La fonctionnalité de gestion des journaux de messages transfère automatiquement les journaux d'opérations d'une instance ApsaraMQ for RabbitMQ vers un Logstore Simple Log Service. En cas d'erreur lors de l'envoi, de la consommation ou de l'accusé de réception d'un message, interrogez et analysez ces journaux dans Simple Log Service pour diagnostiquer le problème.
Prérequis
Une instance ApsaraMQ for RabbitMQ est créée. Pour plus d'informations, consultez la rubrique Gérer les instances.
Le service Simple Log Service est activé et un projet ainsi qu'un Logstore sont créés. Pour plus d'informations, consultez la rubrique Présentation de la gestion des ressources.
Créez le rôle lié au service
AliyunServiceRoleForAmqpLogDeliveryet accordez-lui les autorisations requises lorsque vous y êtes invité dans la console. Ce rôle permet de transférer les journaux vers votre service Simple Log Service.
Si vous supprimez le projet ou le Logstore, ou si vous révoquez les autorisations accordées à ApsaraMQ for RabbitMQ, le transfert des journaux échouera.
Facturation
-
ApsaraMQ for RabbitMQ
L'utilisation de la fonctionnalité message log management est gratuite.
-
Simple Log Service
Une fois que ApsaraMQ for RabbitMQ a transféré les journaux vers Simple Log Service, des frais vous sont facturés pour le stockage, le trafic et les requêtes. Pour plus d'informations, consultez la rubrique Éléments facturables en mode paiement à l'utilisation.
Format des journaux
Schéma des journaux
Paramètre | Description |
Action | La méthode de requête pour l'opération. Pour connaître les valeurs valides et leurs descriptions, consultez la section Méthodes de requête Action. |
Code | Le code d'état. Valeurs possibles :
|
Info | Ce champ est vide pour les requêtes réussies. Pour les requêtes ayant échoué, il fournit des détails sur le code d'état d'erreur. |
InstanceId | L'ID de l'instance ApsaraMQ for RabbitMQ. L'ID de l'instance est disponible sur la page Instance Details ou Overview de la console ApsaraMQ for RabbitMQ. |
Queue | La file d'attente associée à l'abonnement ou au message.
|
Property | Les attributs du message. Valeurs possibles :
|
RemoteAddress | L'adresse IP du client qui a initié l'opération.
Remarque Ce champ n'est pas enregistré si l'Action est SendDlqMessage. |
ReqUid | L'ID du compte.
Remarque Ce champ n'est pas enregistré si l'Action est SendDlqMessage. |
ResourceName | Le nom de la ressource.
Remarque Ce champ n'est pas enregistré si l'Action est ConnectionOpen, ConnectionClose, ChannelOpen ou ChannelClose. |
VHost | Le nom du vhost. Le nom est disponible sur la page vhosts de la console ApsaraMQ for RabbitMQ. |
ConnectionId | L'ID côté serveur qui identifie de manière unique une connexion. Remarque Ce champ n'est pas enregistré si l'Action est SendDlqMessage. |
ChannelId | L'ID généré par le client qui identifie de manière unique un canal au sein de la connexion actuelle. Remarque Si l'Action est ConnectionOpen ou ConnectionClose, cette valeur est nulle. |
microtime | L'horodatage de la requête en microsecondes. |
_source_ | Il s'agit d'un champ réservé dans Simple Log Service. Pour plus d'informations, consultez la rubrique Champs réservés. |
__tag__:__receive_time__ | Il s'agit d'un champ réservé dans Simple Log Service. Pour plus d'informations, consultez la rubrique Champs réservés. |
__topic__ | Il s'agit d'un champ réservé dans Simple Log Service. Pour plus d'informations, consultez la rubrique Champs réservés. |
Méthodes de requête Action
|
Méthode de requête |
Description |
|
ConnectionOpen |
Établit une connexion. |
|
ConnectionClose |
Ferme une connexion. |
|
ChannelOpen |
Ouvre un canal. |
|
ChannelClose |
Ferme un canal. |
|
QueueDeclare |
Crée une file d'attente. |
|
QueueDelete |
Supprime une file d'attente. |
|
ExchangeDeclare |
Crée un échange. |
|
ExchangeDelete |
Supprime un échange. |
|
ExchangeBind |
Lie un échange source à un échange de destination. |
|
ExchangeUnBind |
Détache un échange source d'un échange de destination. |
|
QueueBind |
Lie une file d'attente à un échange. |
|
QueueUnbind |
Détache une file d'attente d'un échange |
|
SendMessage |
Un producteur envoie un message. |
|
PushMessage |
Un broker pousse un message. |
|
BasicGet |
Un client extrait un message. |
|
BasicAck |
Accuse réception de la consommation d'un message. |
|
BasicConsume |
S'abonne à une file d'attente. |
|
BasicReject |
Rejette un message. |
|
BasicRecover |
Redistribue les messages non acquittés. |
|
BasicNack |
Envoie un accusé de réception négatif pour un message. |
|
BasicQos |
Limite le nombre de messages non acquittés pouvant être préchargés par un consommateur. |
|
QueuePurge |
Supprime tous les messages d'une file d'attente. |
|
DeleteMessage |
Le serveur supprime un message après avoir reçu l'accusé de réception Basic.Ack du client. |
|
SendDlqMessage |
Envoie un message mort (dead-letter). |
Procédure
Pour transférer les journaux de votre instance ApsaraMQ for RabbitMQ vers Simple Log Service, configurez une destination.
Connectez-vous à la console ApsaraMQ for RabbitMQ. Dans le volet de navigation de gauche, cliquez sur Instances.
Dans la barre de navigation supérieure de la page Instances, sélectionnez la région où se trouve l'instance que vous souhaitez gérer. Ensuite, dans la liste des instances, cliquez sur le nom de l'instance à gérer.
Dans le volet de navigation de gauche, cliquez sur Log Management.
-
Sur la carte My Resources, cliquez sur Authorize Now.
Si vous avez déjà accordé à ApsaraMQ for RabbitMQ les autorisations d'accès à Simple Log Service, ignorez cette étape.
Sur la page Log Management, sélectionnez le projet et le Logstore que vous avez créés dans les listes déroulantes Project Name et Logstore, puis cliquez sur Enable.
Connectez-vous à la console Simple Log Service. Activez et configurez les index de champs pour vos journaux. Pour plus d'informations, consultez la rubrique Créer des index.
Ajoutez manuellement le champ __tag__:__receive_time__ et définissez son alias sur
timestamp.
Tutoriels
-
Compter les opérations d'envoi/réception de messages par file d'attente pour identifier les files d'attente à coût élevé
Lorsque la console ApsaraMQ for RabbitMQ ne fournit pas de ventilation de la facturation au niveau des files d'attente, utilisez les journaux d'opérations dans Simple Log Service pour compter indépendamment les opérations de messages par file d'attente et localiser les files d'attente à forte consommation, sans dépendre de l'extraction des données backend.
Dans Simple Log Service, interrogez les journaux d'opérations de votre instance ApsaraMQ for RabbitMQ et exécutez l'instruction de requête suivante pour agréger le nombre d'opérations
SendMessage,PushMessageetBasicGetpar file d'attente dans une plage de temps spécifiée, triées par nombre d'opérations par ordre décroissant :Action: SendMessage OR Action: PushMessage OR Action: BasicGet | SELECT Queue, Action, COUNT(*) AS operation_count GROUP BY Queue, Action ORDER BY operation_count DESC LIMIT 100Action
Description
SendMessageUn producteur envoie un message à ApsaraMQ for RabbitMQ.
PushMessageLe broker pousse un message à un consommateur.
BasicGetUn client consommateur extrait un message.
Les résultats indiquent quelles files d'attente ont le débit de messages le plus élevé. Utilisez ces résultats pour identifier la source des coûts élevés et prioriser l'optimisation sans attendre l'extraction des données backend.
FAQ
Q : Pourquoi existe-t-il un décalage temporel entre l'horodatage du journal client et l'heure de réussite de la livraison du serveur dans ApsaraMQ for RabbitMQ ?
R : Pour résoudre cet écart, suivez les étapes suivantes :
Vérifiez d'abord les journaux côté serveur. Interrogez les journaux d'opérations dans Simple Log Service pour vérifier que le serveur a livré le message avec succès et sans délai. Filtrez par
Action: PushMessage OR Action: DeleteMessageet confirmez que la valeur du champCodeest200. Si les journaux côté serveur sont normaux, le serveur n'est pas à l'origine du décalage temporel.-
Examinez l'environnement client. Si les journaux côté serveur ne montrent aucun problème, l'écart est généralement causé par le côté client. Vérifiez les conditions suivantes :
Latence réseau ou perte de paquets : Des problèmes réseau intermittents entre le client et le service ApsaraMQ for RabbitMQ peuvent retarder l'accusé de réception du message côté client.
Utilisation élevée du CPU : Un CPU fortement sollicité peut retarder l'exécution des méthodes d'envoi de messages (par exemple,
convertAndSend), ce qui entraîne un décalage de l'horodatage enregistré par le client par rapport à l'heure réelle de livraison du serveur.Pauses Full GC fréquentes : Les événements JVM Full GC suspendent tous les threads de l'application, ce qui peut augmenter considérablement le temps entre l'appel d'une méthode d'envoi et la livraison effective du message. Cela amène le journal client à enregistrer un horodatage ultérieur à l'heure de livraison du serveur.
Q : Comment analyser la cause d'un problème après avoir reçu un journal d'alarme ou une notification d'alerte d'ApsaraMQ for RabbitMQ ?
R : Lorsque vous recevez un journal d'alarme ou une notification d'alerte, suivez ces étapes pour identifier la cause racine :
Localisez le lien de la console dans le journal d'alarme. Les journaux d'alarme incluent une URL qui vous dirige vers la page de surveillance ou de gestion pertinente dans la console cloud. Trouvez cette URL dans le contenu du journal d'alarme.
Ouvrez la page Task Details. Cliquez sur l'URL dans le journal d'alarme pour accéder directement à la page Task Details ou à la page de surveillance du cluster. Cette page fournit le contexte de l'alarme, les métriques associées et la chronologie des événements pour vous aider à diagnostiquer le problème sous-jacent.
Mettez en corrélation avec les journaux d'opérations. Recoupez l'horodatage de l'événement d'alarme avec les journaux d'opérations dans Simple Log Service pour identifier les opérations de messages corrélées (telles que les échecs de connexion, les rejets de messages ou le routage vers les files d'attente de lettres mortes) qui se sont produites au même moment et ont pu contribuer à l'alarme.