Tous les produits
Search
Centre de documentation

ApsaraMQ for RabbitMQ:Per-second metrics

Dernière mise à jour :Aug 11, 2026

Cette rubrique explique comment utiliser la gestion des journaux pour générer des métriques par seconde.

Contexte

Les graphiques de Cloud Monitor affichent des moyennes à la minute et ne permettent pas de visualiser les données TPS par seconde. Pour ApsaraMQ for RabbitMQ, le TPS correspond au nombre de requêtes de méthodes AMQP initiées par les clients chaque seconde.

Le calcul du TPS inclut les méthodes AMQP suivantes :

  • ConnectionOpen, ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, QueueUnbind

  • ExchangeDeclare, ExchangeDelete

  • ExchangeBind, ExchangeUnBind

  • SendMessage, BasicConsume, BasicGet, BasicAck, BasicReject, BasicNack, BasicRecover

Pour plus d'informations sur les méthodes de requête, consultez la section Méthodes de requête.

Procédure

  1. Activer la gestion des journaux et configurer les index.

  2. Créez un Metricstore pour stocker les données de métriques nettoyées.

    1. Sur la page des détails du projet dans la console Simple Log Service, cliquez sur Create Now. La page affiche alors l'état vide The current Project has no Metricstore.

    2. Dans le panneau Create Metricstore, configurez les informations de base du Metricstore. Les paramètres clés incluent Name (nom du Metricstore) et data retention period (durée de conservation des données, 30 jours par défaut).

  3. Créez une tâche de transformation de données.

    1. Dans le logstore, saisissez une instruction de requête. Cet exemple interroge les codes d'erreur de l'instance.

      * | SELECT Code, count(*) as num, microtime / 1000 / 1000 as timeSecond group by Code, timeSecond limit 1000000

      Le format de l'instruction est : Instruction de recherche | Instruction analytique. L'instruction de recherche filtre les données tandis que l'instruction analytique est une requête SQL standard. L'écriture des données dans un Metricstore nécessite l'extraction de trois composants à partir des résultats de la requête : les libellés requis, les valeurs de métrique pour chaque libellé et l'horodatage. Dans cet exemple, Code est le libellé du code d'erreur, num est la valeur de métrique pour chaque code et timeSecond est l'horodatage en secondes.

      La requête renvoie un tableau comportant trois colonnes : Code (code d'erreur), num (nombre) et timeSecond (horodatage par seconde).

    2. Dans les résultats de la requête, cliquez sur l'onglet Graph, puis sur Save as Scheduled SQL Job. Dans l'onglet Compute Settings, configurez les paramètres, puis cliquez sur Next. Pour SQL Type, sélectionnez Search & Analysis. Pour Write Mode, sélectionnez Import New Data. Configurez le mappage des colonnes d'écriture (Write Column Mapping) en fonction des champs de votre requête SQL.

      Remarque

      Le magasin de destination doit être le Metricstore créé à l'étape précédente.

    3. Dans l'onglet Scheduling Settings, définissez l'intervalle de planification, puis cliquez sur OK. Vous pouvez définir l'intervalle de planification sur horaire ou sur un intervalle personnalisé. Le délai d'expiration SQL (SQL Timeout) par défaut est de 600 secondes et le délai d'exécution (Execution Delay) par défaut est de 60 secondes.

  4. Interrogez la distribution des valeurs de métrique dans le Metricstore. Dans le volet de navigation de gauche, sélectionnez le Metricstore de destination, accédez à la page de requête et exécutez une requête.

    Voici un exemple de résultat de requête :image

  5. Facultatif : Connectez les données du Metricstore à un tableau de bord de visualisation. Vous pouvez utiliser Grafana ou les fonctionnalités de visualisation de Simple Log Service.

Remarque

Le tutoriel précédent utilise les données de code d'erreur de l'instance comme exemple. Vous pouvez également nettoyer d'autres types de données, tels que le taux d'envoi et de réception des messages pour chaque canal sur chaque RemoteAddress, l'activité par seconde de chaque file d'attente, le nombre total de messages envoyés et reçus par seconde, ainsi que le nombre d'appels par seconde de chaque API.

Instructions courantes

TPS par seconde de l'instance

* | select microtime/1000/1000 as time, sum(count) as tps 
from 
  (SELECT  microtime, if(Action!='SendMessage', 1, tps) as count 
   from log 
   Where  InstanceId='amqp-xx-xxx' 
     and Action in ('SendMessage', 'ConnectionOpen', 'ChannelOpen', 'ExchangeDeclare', 'QueueBind', 'QueueDeclare', 'QueueDelete', 'ExchangeDelete', 'QueueUnBind', 'ExchangeBind', 'ExchangeUnBind', 'BasicConsume', 'BasicReject', 'BasicRecover', 'BasicAck', 'BasicNAck', 'PullMessage') 
   limit 90000000) 
  
GROUP by time ORDER by time limit 90000000

Voici un exemple de résultat de requête :

La requête renvoie un tableau comportant deux colonnes : time (horodatage par seconde) et tps (requêtes par seconde). Vous pouvez basculer vers l'onglet Graph pour afficher le graphique de tendance.

  • Avant d'exécuter la requête, remplacez l'ID de l'instance amqp-xx-xxx par l'ID de votre instance.

  • Pour un appel BasicNack(multiple=false), le TPS est compté comme 1. Pour un appel BasicNack(multiple=true), le TPS est compté comme N. Par conséquent, la valeur TPS calculée à partir des journaux Simple Log Service peut être inférieure au nombre réel de requêtes.

  • Si le trafic client est élevé lorsque vous interrogez un graphique TPS, limitez la plage de temps à 1 heure ou moins. Ajoutez également limit 90000000, ou une clause limit avec la plus grande valeur possible, à la fin de l'instruction SQL.

Messages envoyés par exchange

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  split_part(ResourceName,',',2) as exchange_name, 
  split_part(ResourceName,',',3) as routing_key, 
  count(*) as send_total_num 
group by 
  instance_id,
  virtual_host, 
  exchange_name, 
  routing_key 
order by 
  send_total_num 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id (ID de l'instance), virtual_host (hôte virtuel), exchange_name (nom de l'exchange), routing_key (clé de routage) et send_total_num (total des messages envoyés).

Taux d'envoi par exchange

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  split_part(ResourceName,',',2) as exchange_name, 
  split_part(ResourceName,',',3) as routing_key, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as send_qps 
group by 
  instance_id,
  virtual_host, 
  exchange_name, 
  routing_key,
  time_second 
order by 
  time_second, 
  send_qps 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, exchange_name, routing_key, time_second (horodatage par seconde) et send_qps (taux d'envoi par seconde).

Messages consommés par file d'attente

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  Queue as queue_name, 
  count(*) as push_total_num 
group by 
  instance_id,
  virtual_host, 
  queue_name 
order by 
  push_total_num 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, queue_name (nom de la file d'attente) et push_total_num (total des messages poussés).

Taux de consommation par file d'attente

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  Queue as queue_name, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as push_qps 
group by 
  instance_id,
  virtual_host, 
  queue_name, 
  time_second 
order by 
  time_second, 
  push_qps 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, queue_name, time_second (horodatage par seconde) et push_qps (taux de consommation par seconde).

Taux d'envoi par client

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as send_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  send_qps 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, client_ip_port (adresse IP et port du client), time_second et send_qps (messages envoyés par seconde).

Taux de consommation par client

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as push_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  push_qps 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, client_ip_port, time_second et push_qps (messages consommés par seconde).

Taux d'une action spécifique

Pour interroger les requêtes par seconde (QPS) d'une action spécifique pour un client, copiez l'instruction suivante et remplacez {action_name} par le nom de l'action. Les noms d'action valides incluent :

  • ConnectionOpen, ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, QueueUnbind

  • ExchangeDeclare, ExchangeDelete

  • ExchangeBind, ExchangeUnBind

  • SendMessage, BasicConsume, BasicGet, BasicAck, BasicReject, BasicNack, BasicRecover

* and Action : {action_name} and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as {action_name}_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  {action_name}_qps 
limit 10000000

Par exemple, pour interroger le QPS des actions ConnectionOpen sur un client, utilisez l'instruction suivante :

* and Action : ConnectionOpen and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as connection_open_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  connection_open_qps 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, client_ip_port, time_second et connection_open_qps (requêtes ConnectionOpen par seconde).

QPS par action

Cette instruction regroupe les statistiques QPS pour toutes les actions sur chaque client en une seule fois.

* and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host,
  Action as action_type,
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as action_qps
group by 
  instance_id,
  virtual_host,
  client_ip_port,
  action_type,
  time_second 
order by
  time_second, 
  action_qps
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, client_ip_port, action_type (le type d'action, tel que ExchangeDeclare ou ConnectionOpen), time_second et action_qps.

Fréquence des erreurs

* and not Code = 200 | 
select 
  Code as error_code,
  VHost as virtual_host,
  split_part(split_part(Info, '[', 1), 'Req', 1) as error_info,
  microtime / 1000 / 1000 as time_second,
  count(*) as error_num
group by 
  virtual_host,
  error_code,
  time_second,
  error_info
order by
  time_second, 
  error_num
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : error_code (code d'erreur), virtual_host, error_info (description de l'erreur), time_second et error_num (nombre d'erreurs).

Taille moyenne du corps du message

* and Action : SendMessage and Code: 200 | 
select 
  InstanceId as instance_id, 
  VHost as virtual_host, 
  split_part(Queue, ';', 1) as queue_name, 
  microtime / 1000 / 1000 as time_second, 
  avg(cast(split_part(ResourceName, 'bodySize=', 2) as bigint)) as avg_body_size 
group by 
  instance_id, 
  virtual_host, 
  queue_name, 
  time_second 
order by 
  time_second, 
  avg_body_size 
limit 10000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, queue_name, time_second et avg_body_size (taille moyenne du corps du message en octets).

Tentatives de push par message

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id, 
  VHost as virtual_host, 
  split_part(split_part(ResourceName, ',', 1), '=', 2) as msg_id, 
  count(*) as push_times 
group by 
  instance_id, 
  virtual_host, 
  msg_id 
order by 
  push_times desc 
limit 1000000

Voici un exemple de résultat de requête :

Le résultat est un tableau comportant les colonnes suivantes : instance_id, virtual_host, msg_id (ID du message) et push_times (nombre de tentatives de push). Les résultats sont triés par ordre décroissant selon le nombre de tentatives de push.