O recurso de gerenciamento de logs de mensagens envia automaticamente os logs de operação de uma instância do ApsaraMQ for RabbitMQ para um Logstore do Simple Log Service. Caso ocorra um erro durante o envio, consumo ou confirmação de mensagens, consulte e analise esses logs no Simple Log Service para diagnosticar o problema.
Pré-requisitos
Você criou uma instância do ApsaraMQ for RabbitMQ. Para obter mais informações, consulte Gerencie instances.
Você ativou o Simple Log Service e criou um projeto e um Logstore. Para obter mais informações, consulte Resource management overview.
Crie a função vinculada ao service
AliyunServiceRoleForAmqpLogDeliverye conceda as permissões necessárias quando solicitado no console. Essa função envia os logs para o Simple Log Service.
Se você exclua o projeto ou o Logstore, ou revogar as permissões do ApsaraMQ for RabbitMQ, a entrega dos logs falhará.
Faturamento
-
ApsaraMQ for RabbitMQ
O recurso gerenciamento de logs de mensagens não gera cobranças adicionais.
-
Simple Log Service
Após o ApsaraMQ for RabbitMQ enviar os logs ao Simple Log Service, você será cobrado por itens como armazenamento, tráfego e requisições. Para obter mais informações, consulte Billable items of pay-as-you-go.
Formato do log
Schema do log
Parâmetro | Descrição |
Action | O método de requisição da operação. Para valores válidos e descrições, consulte Action request methods. |
Code | O código de status. Valores válidos:
|
Info | Este campo fica vazio para requisições bem-sucedidas. Para requisições com falha, fornece detalhes sobre o código de status do erro. |
InstanceId | O ID da instância do ApsaraMQ for RabbitMQ. O ID da instância está disponível nas páginas Instance Details ou Overview no console do ApsaraMQ for RabbitMQ. |
Queue | A fila associada à assinatura ou à mensagem.
|
Property | Os atributos da mensagem. Valores válidos:
|
RemoteAddress | O endereço IP do cliente que iniciou a operação.
Nota Este campo não é registrado no log se o campo Action for SendDlqMessage. |
ReqUid | O ID da conta.
Nota Este campo não é registrado no log se o campo Action for SendDlqMessage. |
ResourceName | O nome do recurso.
Nota Este campo não é registrado no log se o campo Action for ConnectionOpen, ConnectionClose, ChannelOpen ou ChannelClose. |
VHost | O nome do vhost. O nome está disponível na página vhosts no console do ApsaraMQ for RabbitMQ. |
ConnectionId | O ID gerado pelo servidor que identifica exclusivamente uma conexão. Nota Este campo não é registrado no log se o campo Action for SendDlqMessage. |
ChannelId | O ID gerado pelo cliente que identifica exclusivamente um canal dentro da conexão atual. Nota Se o campo Action for ConnectionOpen ou ConnectionClose, este valor será nulo. |
microtime | O timestamp da requisição em microssegundos. |
_source_ | Campo reservado do Simple Log Service. Para obter mais informações, consulte Reserved fields. |
__tag__:__receive_time__ | Campo reservado do Simple Log Service. Para obter mais informações, consulte Reserved fields. |
__topic__ | Campo reservado do Simple Log Service. Para obter mais informações, consulte Reserved fields. |
Métodos de requisição de Action
|
Método de requisição |
Descrição |
|
ConnectionOpen |
Estabelece uma conexão. |
|
ConnectionClose |
Encerra uma conexão. |
|
ChannelOpen |
Abre um canal. |
|
ChannelClose |
Fecha um canal. |
|
QueueDeclare |
Crie uma fila. |
|
QueueDelete |
Exclua uma fila. |
|
ExchangeDeclare |
Crie um exchange. |
|
ExchangeDelete |
Exclua um exchange. |
|
ExchangeBind |
Vincula um exchange de origem a um exchange de destino. |
|
ExchangeUnBind |
Desvincula um exchange de origem de um exchange de destino. |
|
QueueBind |
Vincula uma fila a um exchange. |
|
QueueUnbind |
Desvincula uma fila de um exchange |
|
SendMessage |
Um produtor envia uma mensagem. |
|
PushMessage |
Um broker envia uma mensagem por push. |
|
BasicGet |
Um cliente consome uma mensagem via pull. |
|
BasicAck |
Confirme o consumo de uma mensagem. |
|
BasicConsume |
Assina uma fila. |
|
BasicReject |
Rejeita uma mensagem. |
|
BasicRecover |
Reenvia mensagens não confirmadas. |
|
BasicNack |
Confirme negativamente uma mensagem. |
|
BasicQos |
Limita o número de mensagens não confirmadas que um consumidor pode pré-buscar. |
|
QueuePurge |
Remove todas as mensagens de uma fila. |
|
DeleteMessage |
O servidor exclua uma mensagem após receber a confirmação Basic.Ack do cliente. |
|
SendDlqMessage |
Envia uma mensagem para a dead-letter queue. |
Procedimento
Para enviar logs da sua instância do ApsaraMQ for RabbitMQ ao Simple Log Service, configure um destino.
Acesse o console do ApsaraMQ for RabbitMQ. No painel de navegação à esquerda, clique em Instances.
Na barra de navegação superior da página Instances, selecione a região onde reside a instância que deseja gerencie. Em seguida, na lista de instâncias, clique em no nome da instância desejada.
No painel de navegação à esquerda, clique em Log Management.
-
No cartão My Resources, clique em Authorize Now.
Se você já concedeu ao ApsaraMQ for RabbitMQ as permissões de acesso ao Simple Log Service, ignore esta etapa.
Na página Log Management, selecione o projeto e o Logstore criados anteriormente nas listas suspensas Project Name e Logstore, e então clique em Enable.
Acesse o console do Simple Log Service. Ative e configure os índices de campos para seus logs. Para obter mais informações, consulte Crie indexes.
Adicione manualmente o campo __tag__:__receive_time__ e defina seu alias como
timestamp.
Tutoriais
-
Conte as operações de envio e recebimento de mensagens por fila para identificar filas de alto custo
Quando o console do ApsaraMQ for RabbitMQ não fornece detalhamentos de faturamento por fila, use os logs de operação no Simple Log Service para contabilizar independentemente as operações de mensagens por fila e localizar as filas de alto consumo, sem depender de extração de dados no backend.
No Simple Log Service, consulte os logs de operação da sua instância do ApsaraMQ for RabbitMQ e execute a seguinte instrução de consulta para agregar o número de operações
SendMessage,PushMessageeBasicGetpor fila dentro de um intervalo de tempo especificado, ordenado por contagem de operações em ordem decrescente: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
Descrição
SendMessageUm produtor envia uma mensagem ao ApsaraMQ for RabbitMQ.
PushMessageO broker envia uma mensagem por push a um consumidor.
BasicGetUm cliente consumidor consome uma mensagem via pull.
Os resultados mostram quais filas têm o maior throughput de mensagens. Use essas informações para identificar a origem dos altos custos e priorizar a otimização sem aguardar a extração de dados no backend.
FAQ
P: Por que há uma diferença de tempo entre o timestamp do log do cliente e o horário de entrega bem-sucedida do servidor no ApsaraMQ for RabbitMQ?
R: Para investigar essa discrepância, siga estas etapas:
Verifique primeiro os logs do lado do servidor. Consulte os logs de operação no Simple Log Service para confirme que o servidor entregou a mensagem com êxito e sem atraso. Filtre por
Action: PushMessage OR Action: DeleteMessagee confirme que o valor do campoCodeé200. Se os logs do lado do servidor estiverem normais, o servidor não é a causa da diferença de tempo.-
Investigue o ambiente do cliente. Se os logs do lado do servidor não apresentarem problemas, a discrepância geralmente tem origem no lado do cliente. Verifique as seguintes condições:
Latência de rede ou perda de pacotes: problemas intermitentes de rede entre o cliente e o service do ApsaraMQ for RabbitMQ podem atrasar a confirmação de mensagens no lado do cliente.
Alto uso de CPU: uma CPU sobrecarregada pode atrasar a execução dos métodos de envio de mensagens (por exemplo,
convertAndSend), fazendo com que o timestamp registrado pelo cliente fique defasado em relação ao horário real de entrega do servidor.Pausas frequentes de Full GC: eventos de Full GC da JVM interrompem todas as threads da aplicação, o que pode aumentar significativamente o intervalo entre a chamada do método de envio e a entrega efetiva da mensagem. Isso faz com que o log do cliente registre um timestamp posterior ao horário de entrega do servidor.
P: Como analisar a causa de um problema após receber um log de alarme ou notificação de alerta do ApsaraMQ for RabbitMQ?
R: Ao receber um log de alarme ou notificação de alerta, siga estas etapas para identificar a causa raiz:
Localize o link do console no log de alarme. Os logs de alarme incluem uma URL que direciona para a página de monitoramento ou gerenciamento relevante no console da cloud. Encontre essa URL no conteúdo do log de alarme.
Abra a página de detalhes da tarefa. Clique em na URL do log de alarme para acessar diretamente a página Task Details ou a página de monitoramento do cluster. Essa página fornece o contexto do alarme, as métricas associadas e a linha do tempo de eventos para ajudar no diagnóstico do problema.
Correlacione com os logs de operação. Compare o timestamp do evento de alarme com os logs de operação no Simple Log Service para identificar operações de mensagens correlacionadas — como falhas de conexão, rejeições de mensagens ou roteamento para dead-letter queue — ocorridas no mesmo período e que possam ter contribuído para o alarme.