Todos os produtos
Search
Central de documentação

ApsaraMQ for RabbitMQ:**Per-second metrics**

Última atualização: Jun 28, 2026

Este tópico descreve como usar o gerenciamento de logs para gerar métricas por segundo.

Contexto

Os gráficos do Cloud Monitor exibem médias no nível de minuto e não mostram dados de TPS por segundo. No ApsaraMQ for RabbitMQ, o TPS representa a quantidade de requisições de métodos AMQP iniciadas pelos clientes a cada segundo.

O cálculo do TPS inclui os seguintes métodos AMQP:

  • ConnectionOpen, ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, QueueUnbind

  • ExchangeDeclare, ExchangeDelete

  • ExchangeBind, ExchangeUnBind

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

Para obter mais informações sobre os métodos de requisição, consulte Métodos de requisição.

Procedimento

  1. Ative o gerenciamento de logs e configure índices.

  2. Crie um Metricstore para armazenar os dados de métricas limpos.

    1. Na página de detalhes do projeto no console do Simple Log Service, clique em Create Now. A página exibirá a mensagem The current Project has no Metricstore em estado vazio.

    2. No painel Create Metricstore, configure as informações básicas do Metricstore. Os principais parâmetros incluem Name (nome do Metricstore) e data retention period (30 dias por padrão).

  3. Crie uma tarefa de transformação de dados.

    1. No Logstore, insira uma instrução de consulta. Este exemplo consulta códigos de erro da instância.

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

      O formato da instrução é: Search statement | Analytic statement. A instrução de pesquisa filtra os dados, enquanto a instrução analítica é uma consulta SQL padrão. Para gravar dados em um Metricstore, extraia três componentes dos resultados da consulta: os rótulos necessários, os valores da métrica para cada rótulo e o timestamp. Neste exemplo, Code é o rótulo do código de erro, num é o valor da métrica para cada código e timeSecond é o timestamp em segundos.

      A consulta retorna uma tabela com três colunas: Code (código de erro), num (contagem) e timeSecond (timestamp por segundo).

    2. Nos resultados da consulta, clique em Graph e, em seguida, clique em Save as Scheduled SQL Job. Na aba Compute Settings, configure os parâmetros e clique em Next. Em SQL Type, selecione Search & Analysis. Em Write Mode, selecione Import New Data. Configure o Write Column Mapping com base nos campos da sua consulta SQL.

      Nota

      O armazenamento de destino deve ser o Metricstore criado na etapa anterior.

    3. Na aba Scheduling Settings, defina o intervalo de agendamento e clique em OK. Defina o scheduling interval como horário ou um intervalo personalizado. O SQL Timeout padrão é de 600 segundos e o Execution Delay padrão é de 60 segundos.

  4. Consulte a distribuição de valores da métrica no Metricstore. No painel de navegação à esquerda, selecione o Metricstore de destino, acesse a página de consulta e execute uma consulta.

    Exemplo de resultado da consulta:image

  5. Opcional: Conecte os dados do Metricstore a um painel de visualização. Use o Grafana ou os recursos de visualização do Simple Log Service.

Nota

O tutorial anterior usa dados de código de erro da instância como exemplo. Você também pode limpar outros tipos de dados, como a taxa de envio e recebimento de mensagens para cada canal em cada RemoteAddress, a atividade por segundo de cada fila, o número total de mensagens enviadas e recebidas por segundo e a contagem de chamadas por segundo de cada API.

Instruções comuns

TPS por segundo da instância

* | 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

Exemplo de resultado da consulta:

A consulta retorna uma tabela com duas colunas: time (timestamp por segundo) e tps (requisições por segundo). Alterne para a aba Graph para visualizar o gráfico de tendências.

  • Antes de executar a consulta, substitua o ID da instância amqp-xx-xxx pelo ID da sua instância.

  • Para uma chamada BasicNack(multiple=false), o TPS é contado como 1. Já para uma chamada BasicNack(multiple=true), o TPS é contado como N. Portanto, o valor de TPS calculado a partir dos logs do Simple Log Service pode ser inferior ao número real de requisições.

  • Se o tráfego do cliente estiver alto ao consultar um gráfico de TPS, limite o intervalo de tempo a 1 hora ou menos. Além disso, adicione limit 90000000, ou uma cláusula limit com o maior valor possível, ao final da instrução SQL.

Mensagens enviadas por 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id (ID da instância), virtual_host (host virtual), exchange_name (nome do exchange), routing_key (chave de roteamento) e send_total_num (total de mensagens enviadas).

Taxa de envio por 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, exchange_name, routing_key, time_second (timestamp por segundo) e send_qps (taxa de envio por segundo).

Mensagens consumidas por fila

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, queue_name (nome da fila) e push_total_num (total de mensagens enviadas via push).

Taxa de consumo por fila

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, queue_name, time_second (timestamp por segundo) e push_qps (taxa de consumo por segundo).

Taxa de envio por cliente

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, client_ip_port (endereço IP e porta do cliente), time_second e send_qps (mensagens enviadas por segundo).

Taxa de consumo por cliente

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, client_ip_port, time_second e push_qps (mensagens consumidas por segundo).

Taxa de ação específica

Para consultar as consultas por segundo (QPS) de uma ação específica para um cliente, copie a seguinte instrução e substitua {action_name} pelo nome da ação. Os nomes de ação válidos incluem:

  • 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

Por exemplo, para consultar o QPS de ações ConnectionOpen em um cliente, use a seguinte instrução:

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, client_ip_port, time_second e connection_open_qps (requisições ConnectionOpen por segundo).

QPS por ação

Esta instrução reúne as estatísticas de QPS para todas as ações em cada cliente de uma só vez.

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, client_ip_port, action_type (o tipo de ação, como ExchangeDeclare ou ConnectionOpen), time_second e action_qps.

Frequência de erros

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: error_code (código de erro), virtual_host, error_info (descrição do erro), time_second e error_num (número de erros).

Tamanho médio do corpo da mensagem

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, queue_name, time_second e avg_body_size (tamanho médio do corpo da mensagem em bytes).

Tentativas de push por mensagem

* 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

Exemplo de resultado da consulta:

O resultado é uma tabela com as seguintes colunas: instance_id, virtual_host, msg_id (ID da mensagem) e push_times (número de tentativas de push). Os resultados são classificados em ordem decrescente pelo número de tentativas de push.