Como monitorar o RabbitMQ (sem perder mensagens, dinheiro ou sono)
Imagine o seguinte: é segunda-feira de manhã. Seu site de comércio eletrônico está realizando uma “venda relâmpago de 48 horas”. Os pedidos estão chegando, os pagamentos estão sendo processados e sua equipe de suporte está excepcionalmente tranquila - uma coisa linda.
Então, de repente, o Slack explode.
-
“O checkout está travado na rotação...”
-
“As confirmações de pedidos não estão sendo enviadas.”
-
“O inventário parece errado.”
-
“Por que os reembolsos ficam na fila por horas?”
No início, tudo aparência saudável: A CPU está boa, seus servidores da Web estão funcionando e os gráficos do banco de dados não mostram nada de dramático. Mas o sistema ainda parece... congelado.
Após 45 minutos de combate ao fogo, você encontra o verdadeiro culpado: RabbitMQ. Algumas filas aumentaram, os consumidores ficaram mais lentos, as confirmações se acumularam e a memória atingiu o limite máximo. O RabbitMQ começou a aplicar o controle de fluxo, os editores começaram a atingir o tempo limite e sua lógica de negócios parou silenciosamente de mover mensagens por fluxos de trabalho críticos.
É exatamente por isso que Monitoramento do RabbitMQ não é opcional. Se o RabbitMQ é o “sistema circulatório” da sua arquitetura, o monitoramento é o monitor cardíaco que informa que algo está errado antes de o paciente entra em colapso.
Neste guia, você aprenderá:
-
O que é o RabbitMQ (em inglês simples)
-
Por que você deve monitorá-lo (mesmo que “esteja tudo bem há meses”)
-
Quais métricas são mais importantes e o que é “bom”
-
Padrões de falha comuns e como o monitoramento os detecta com antecedência
-
Ferramentas de alto nível que podem monitorar o RabbitMQ
-
Uma lista de verificação simples e prática de monitoramento do RabbitMQ
O que é o RabbitMQ?
RabbitMQ é um popular corretor de mensagens. Ele fica entre os sistemas e os ajuda a trocar mensagens de forma confiável.
Em vez de um serviço chamar outro diretamente (e falhar se o outro serviço estiver lento ou inativo), os serviços podem publicar mensagens no RabbitMQ, e outros serviços consomem essas mensagens quando estiverem prontas.
RabbitMQ em uma frase
O RabbitMQ é um sistema que enfileira mensagens para que seus aplicativos possam se comunicar de forma assíncrona, confiável e em escala.
Principais conceitos do RabbitMQ (rápido e amigável)
Você não precisa memorizá-los, mas eles o ajudam a interpretar os sinais de monitoramento:
-
Produtor / Editor: o aplicativo que envia mensagens
-
Consumidor: o aplicativo que recebe as mensagens
-
Fila: onde as mensagens aguardam
-
Câmbio: onde as mensagens chegam primeiro e são encaminhadas
-
EncadernaçãoRegra que conecta uma bolsa a uma fila
-
Host virtual (vhost): um namespace lógico (como um locatário/ambiente)
-
Canal: uma conexão leve dentro de uma conexão TCP
-
Ack (confirmação)O consumidor confirma que processou a mensagem
-
DLQ (fila de letras mortas)mensagens que não puderam ser processadas vão para cá (se configuradas)
O RabbitMQ normalmente implementa AMQP (Advanced Message Queuing Protocol), mas também oferece suporte a outros protocolos por meio de plug-ins.
Por que você precisa monitorar o RabbitMQ?
O RabbitMQ é frequentemente uma “dependência silenciosa”. Quando ele tem problemas, os sintomas aparecem em outro lugar:
-
Tempo limite das solicitações da Web
-
Os trabalhos em segundo plano se acumulam
-
Os e-mails param de ser enviados
-
Atrasos no processamento de pagamentos
-
Os sistemas orientados por eventos tornam-se inconsistentes
-
Os microsserviços começam a tentar de novo e a se chocar uns com os outros
Os problemas do RabbitMQ podem ser caros porque criam atrasos ocultos. Seu sistema ainda pode estar “ativo”, mas não está produzindo resultados.
O monitoramento do RabbitMQ ajuda você:
-
Detectar lentidão antecipadamente (antes que os clientes percebam)
-
Evitar a perda de mensagens (ou pelo menos capturar condições de risco)
-
Proteger a taxa de transferência durante o pico de tráfego
-
Evitar falhas em cascata em todos os microsserviços
-
Capacidade do plano (contagem de RAM/disco/rede/consumidor)
-
Acelerar a solução de problemas quando algo dá errado
A armadilha do “funcionou ontem”
As falhas do RabbitMQ geralmente aparecem depois:
-
um pico de tráfego
-
uma implantação de consumidor bloqueada
-
uma interrupção de dependência downstream (por exemplo, banco de dados ou provedor de pagamento)
-
um manipulador de mensagens lento
-
uma explosão de mensagens grandes
-
redução do espaço em disco
-
marca d'água de memória atingida
-
crescimento ilimitado da fila devido à falta de TTLs/limites
Em outras palavras: O RabbitMQ não falha apenas aleatoriamente - ele falha quando o sistema ao seu redor muda. O monitoramento torna essas alterações visíveis.
O que você deve monitorar no RabbitMQ?
Se você monitorar apenas uma coisa, monitore isso:
Profundidade da fila + saúde do consumidor
Porque é aí que o “trabalho que não está sendo feito” se revela.
Mas uma configuração sólida de monitoramento do RabbitMQ abrange quatro camadas:
-
Nível da fila (fluxo de mensagens)
-
Nível do corretor (Informações internas do RabbitMQ)
-
Nível de nó/sistema (SO + disco + memória)
-
Nível do aplicativo (comportamento e erros de publicação/consumo)
Vamos detalhar as métricas mais importantes.
Métricas de monitoramento do RabbitMQ que realmente importam
1) Métricas de fila (seu aviso antecipado do #1)
Essas métricas informam se as mensagens estão fluindo ou se estão se acumulando.
Principais métricas:
-
Mensagens prontas: aguardando na fila
-
Mensagens desempacotadasEntrega aos consumidores, mas ainda não reconhecida
-
Total de mensagens: pronto + desempacotado
-
Taxa de entrada: mensagens publicadas por segundo
-
Taxa de saídaMensagens reconhecidas/consumidas por segundo
-
Consumidores em fila: quantos consumidores estão ativos por fila
O que observar:
-
Tendência de aumento no total de mensagens com o tempo → os consumidores não conseguem acompanhar
-
Crescimento desempacotado → o consumidor está lento, travado ou não está acessando corretamente
-
Consumidores = 0 em uma fila crítica → as mensagens se acumularão rapidamente
-
A saída cai repentinamente → Problema de dependência de downstream ou consumidores com falha
Regra geral simples:
Se a fila continuar crescendo por mais de alguns minutos durante o “tráfego normal”, algo está errado.
2) Saúde do consumidor (onde muitos incidentes começam)
O RabbitMQ é frequentemente responsabilizado, mas a causa raiz é frequentemente um problema do consumidor:
-
código implantado com um bug
-
consumidor preso em novas tentativas
-
pool de threads esgotado
-
chamadas de banco de dados lentas
-
Limites de taxa de API externa
-
vazamento de memória do consumidor
Monitor:
-
contagem de consumidores por fila
-
taxa de consumo vs. taxa de publicação
-
mensagens desempacotadas
-
Registros de erros do consumidor (tempos limite, exceções)
-
tempo de processamento (da telemetria do aplicativo, se disponível)
Dica profissional:
Uma fila crescente nem sempre é ruim durante um pico. Uma fila que cresce e nunca se recupera é ruim.
3) Conexões e canais (uma fonte sorrateira de instabilidade)
O excesso de conexões ou canais pode prejudicar o desempenho.
Monitor:
-
conexões abertas
-
canais por conexão
-
rotatividade de conexão (desconexões/reconexões frequentes)
-
conexões bloqueadas (controle de fluxo)
O que observar:
-
picos repentinos de conexões (clientes mal configurados)
-
grandes contagens de canais (vazamentos)
-
Loops de reconexão frequentes (problemas de rede ou de autenticação)
4) Integridade do nó: memória, disco, CPU, descritores de arquivos
O RabbitMQ é sensível à memória e ao disco.
Monitor:
-
Uso da memória e se ele se aproxima da marca d'água alta
-
Espaço livre em disco (O RabbitMQ bloqueará os editores se o disco estiver baixo)
-
CPU (uma CPU alta e contínua pode reduzir a taxa de transferência)
-
Descritores de arquivos (o esgotamento pode romper as conexões)
-
Taxa de transferência e erros da rede (os corretores utilizam muito a rede)
Por que o disco é tão importante
O RabbitMQ persiste nas mensagens (dependendo das configurações de durabilidade) e usa muito o disco em determinadas condições. Quando o disco está muito baixo, o RabbitMQ pode se proteger bloqueando os publicadores. Isso parece que “o aplicativo está fora do ar”, mesmo que o servidor esteja em execução.
5) Saúde do corretor e status do cluster
Se você executar um cluster RabbitMQ, monitore também:
-
status de nó ativo/inativo
-
partições de cluster
-
espelhamento de fila/integridade da fila de quorum (dependendo de sua configuração)
-
status de sincronização (quando aplicável)
-
mudanças de líder e atrasos de replicação (para filas de quorum)
6) Segurança no nível da mensagem: DLQs, novas tentativas, TTLs
Muitos sistemas usam novas tentativas e dead-lettering para lidar com as falhas de forma graciosa. O monitoramento ajuda a garantir que a “falha graciosa” não se torne uma “falha silenciosa”.”
Monitor:
-
profundidade da fila de letras mortas
-
taxa de mensagens com letras mortas
-
profundidade da fila de novas tentativas (se usada)
-
Expirações de TTL da mensagem (se aplicável)
Se os DLQs estiverem crescendo, isso geralmente significa que seus consumidores estão falhando e as mensagens estão sendo redirecionadas - os clientes podem ser afetados mesmo que sua fila principal “pareça estar bem”.”
Problemas comuns do RabbitMQ (e o sinal de monitoramento que os detecta)
Problema: os consumidores estão em baixa
Sinal:
-
Consumidores = 0
-
As mensagens prontas aumentam rapidamente
Problema: o bug do consumidor causa lentidão no processamento
Sinal:
-
Aumentos não atacados
-
Quedas na taxa de saída
-
O tempo de processamento (métrica do aplicativo) aumenta
Problema: interrupção da dependência downstream (DB/API)
Sinal:
-
Escaladas sem escalas
-
Aumento dos erros/tempo limite do consumidor
-
O crescimento da fila se acelera
Problema: marca d'água alta na memória acionada
Sinal:
-
O uso da memória se aproxima da marca d'água
-
As conexões ficam bloqueadas
-
Aumento da latência de publicação
Problema: alarme de disco / pouco espaço em disco
Sinal:
-
O disco livre cai abaixo do limite
-
RabbitMQ bloqueia a publicação
-
Aumento do tempo limite do produtor
Problema: vazamento de conexão/canal em um aplicativo
Sinal:
-
Conexões/canais com tendência de aumento constante
-
Escalada de descritores de arquivos
-
Eventualmente: falhas de conexão
Problema: uma fila “quente” domina os recursos do broker
Sinal:
-
Uma fila tem uma profundidade enorme e taxas altas
-
Outros ficam lentos mesmo com baixo volume
-
Picos de CPU e aumento da latência do broker
O monitoramento não apenas lhe diz que algo está errado - ele aponta para onde.
Como monitorar o RabbitMQ: uma abordagem prática
Uma estratégia simples e eficaz é:
-
Comece com os itens essenciais
Profundidade da fila, consumidores, entrada/saída, desempacotamento, memória, disco. -
Adicionar alertas que correspondam ao impacto nos negócios
Alerta sobre tendências (aumento do backlog), não apenas sobre limites brutos. -
Criar painéis em torno de fluxos de trabalho
Mostrar filas agrupadas por domínio de negócios: checkout, notificações, faturamento. -
Correlacione as métricas do broker com a telemetria do aplicativo
Métricas do RabbitMQ + registros de erros do consumidor = causa raiz rápida. -
Usar sinais do tipo SLO
“As mensagens são processadas em X minutos” é mais significativo do que CPU%.
Soluções de alto nível para monitorar o RabbitMQ
Abaixo estão as opções comprovadas usadas em ambientes de produção reais.
1) Xitoring (monitoramento completo para RabbitMQ e toda a sua pilha)
Xitoring.com é uma solução de monitoramento tudo-em-um projetada para ajudá-lo a monitorar a infraestrutura e os serviços essenciais, inclusive corretores de mensagens como o RabbitMQ, de forma clara e prática.
Por que ele se encaixa bem no monitoramento do RabbitMQ:
-
Painéis centrais para infraestrutura + serviços (um único local para consulta)
-
Alertas projetados para momentos em que “algo está errado neste momento”
-
Visibilidade de alto nível que ajuda tanto os desenvolvedores quanto as equipes de operações
-
Útil quando os problemas do RabbitMQ são sintomas de problemas mais amplos do sistema (banco de dados, rede, latência do aplicativo)
Melhor para:
As equipes que desejam um hub de monitoramento único em vez de juntar várias ferramentas, e querem o monitoramento do RabbitMQ como parte de um quadro maior de “pilha completa”.
2) Plug-in de gerenciamento do RabbitMQ (interface do usuário integrada + métricas básicas)
O RabbitMQ inclui uma interface de gerenciamento (se ativada) que mostra filas, taxas, conexões, consumidores e estatísticas de nós.
Prós:
-
Rápido para ativar
-
Excelente para inspeção manual e depuração
-
Mostra claramente os detalhes em nível de fila
Contras:
-
Não é um sistema de monitoramento completo por si só
-
Alerta limitado e tendências de longo prazo, a menos que sejam integrados em outro lugar
Melhor para:
Solução rápida de problemas e visibilidade diária, especialmente em configurações menores.
3) Prometheus + Grafana (pilha popular de monitoramento de código aberto)
Uma abordagem comum é:
-
Exportar métricas do RabbitMQ por meio de um exportador ou de pontos de extremidade integrados
-
Coletar com a Prometheus
-
Visualize e alerte com o Grafana/Alertmanager
Prós:
-
Painéis de controle e alertas avançados
-
Modelos sólidos de ecossistema e comunidade
-
Excelente para tendências de longo prazo e SLOs
Contras:
-
Mais configuração e manutenção
-
Você provavelmente precisará ajustar os alertas e painéis
Melhor para:
Equipes que já executam o Prometheus ou que desejam uma pilha flexível de código aberto.
4) Datadog (plataforma de observabilidade SaaS)
O Datadog oferece suporte ao monitoramento do RabbitMQ por meio de integrações e pode correlacionar as métricas do broker com hosts, contêineres e traços de APM.
Prós:
-
Integração rápida
-
Forte correlação entre métricas, registros e rastreamentos
-
Ótimos alertas e visualizações
Contras:
-
O custo aumenta com a escala
-
Dependência de SaaS
Melhor para:
Equipes que desejam um rápido time-to-value e ampla observabilidade.
5) New Relic (plataforma SaaS de observabilidade)
A New Relic fornece monitoramento de infraestrutura, APM, painéis e alertas. O RabbitMQ pode ser monitorado por meio de integrações e pipelines de métricas personalizadas.
Prós:
-
Visibilidade de pilha completa (APM + infraestrutura)
-
Bons painéis de controle e alertas
Contras:
-
Requer uma configuração cuidadosa para obter os melhores sinais do RabbitMQ
Melhor para:
Equipes que já usam o New Relic para monitoramento de aplicativos.
6) Elastic Stack (ELK) para registros + métricas (e painéis do Kibana)
A Elastic é amplamente usada para agregação de logs e também pode lidar com métricas, dependendo da sua configuração.
Prós:
-
Excelente pesquisa e correlação de registros
-
Painéis avançados para análise operacional
Contras:
-
Pode se tornar complexo em escala
-
Precisa de uma boa disciplina em relação a esquemas e retenção
Melhor para:
Equipes em que os registros são a principal ferramenta de diagnóstico e conformidade.
7) Splunk
O Splunk é comum em grandes organizações para agregação de registros, alertas e inteligência operacional.
Prós:
-
Recursos empresariais sólidos
-
Consultas e alertas avançados
Contras:
-
Pode ser caro e pesado para operar
Melhor para:
Grandes empresas com fluxos de trabalho de observabilidade maduros.
8) Monitoramento do provedor de nuvem (quando o RabbitMQ é gerenciado)
Se você executar o RabbitMQ por meio de um serviço gerenciado (ou de uma oferta gerenciada pelo fornecedor), poderá contar com ele:
-
Monitoramento de nuvem (como os equivalentes do CloudWatch)
-
Painéis de fornecedores + pontos de extremidade de métricas
Prós:
-
Menos trabalho operacional
-
Integrado com alertas de plataforma
Contras:
-
Pode não expor a profundidade que você deseja para operações no nível da fila
-
Ainda precisa de visibilidade no nível do aplicativo
Melhor para:
Equipes que priorizam a redução da sobrecarga de operações.
Criação de um painel de monitoramento do RabbitMQ (o que incluir)
Se estiver criando um painel no Xitoring (ou em qualquer outra ferramenta), crie-o com base nas perguntas feitas durante os incidentes.
Seção A: “O fluxo de mensagens é saudável?”
-
total de mensagens por fila crítica
-
mensagens prontas versus desempacotadas
-
taxa de publicação vs. taxa de aceitação
-
contagem de consumidores por fila
-
Profundidade de DLQ e taxa de DLQ
Seção B: “O corretor está sob pressão?”
-
uso de memória (e proximidade da marca d'água)
-
espaço livre em disco
-
Uso da CPU
-
taxa de transferência da rede
-
descritores de arquivos
Seção C: “O cluster é estável?”
-
nó para cima/para baixo
-
eventos de partição
-
replicação de fila / integridade do quorum (se aplicável)
Seção D: “Os aplicativos estão se comportando?”
-
erros/tempo limite de publicação do produtor
-
taxa de erro do consumidor
-
tempo de processamento do consumidor
-
taxa de reconexão
Dica: Coloque suas filas mais críticas para os negócios na parte superior. Em um incidente, ninguém quer rolar a tela.
Alerta para o RabbitMQ: mantenha-o simples e útil
Os alertas devem ser acionáveis. Um bom alerta do RabbitMQ responde:
-
O que é afetado?
-
Onde isso está acontecendo (qual fila/nó)?
-
Qual é a urgência?
Alertas práticos que funcionam bem
1) Crescimento do acúmulo de filas
-
Acionar quando a profundidade da fila aumentar continuamente por N minutos
2) Os consumidores estão ausentes
-
Acionar quando a contagem de consumidores for 0 para uma fila crítica por mais de 1 a 2 minutos
3) Mensagens desempacotadas muito altas
-
Acionar quando o desempacotamento exceder um limite (ou crescer de forma constante)
4) Pouco espaço em disco
-
Acionar quando o disco livre cair abaixo de um buffer seguro (definido com base em seu ambiente)
5) Pressão da memória
-
Acionar quando a memória estiver alta e subindo em direção à marca d'água
6) Crescimento do DLQ
-
Acionamento quando a profundidade do DLQ aumenta além da linha de base normal
Evite alertas ruidosos
-
Não alerte apenas sobre picos de CPU.
-
Não alerte somente sobre a profundidade da fila sem contexto.
-
Faça alertas sobre tendências, consumidores ausentes e limites de recursos do corretor.
Práticas recomendadas que tornam o monitoramento mais eficaz
O monitoramento é mais forte quando a configuração do RabbitMQ também é projetada para estabilidade.
1) Evitar o crescimento infinito
-
Use TTLs quando apropriado
-
Use os DLQs intencionalmente
-
Considere políticas de comprimento máximo para filas que precisam ser limitadas
2) Mantenha as mensagens enxutas
Mensagens grandes aumentam a carga da memória e da rede. Prefira enviar IDs e buscar detalhes em outro lugar, quando possível.
3) Use os agradecimentos corretamente
-
Ack somente após o processamento ser bem-sucedido
-
Tenha cuidado com o auto-ack (ele pode ocultar falhas)
4) Pré-busca de controle
As configurações de pré-busca do consumidor afetam as contagens de unacked e a taxa de transferência. O monitoramento do unacked ajuda a ajustar a pré-busca.
5) Separar as cargas de trabalho
Coloque as cargas de trabalho lentas/raras em filas separadas para que elas não bloqueiem os fluxos de alta prioridade.
6) Fique atento a “tempestades de tentativas”
Se os consumidores tentarem novamente de forma muito agressiva, você poderá sobrecarregar o RabbitMQ e os sistemas downstream. Os DLQs e as tentativas atrasadas ajudam.
Considerações finais: Monitore o RabbitMQ como se fosse um produto
O RabbitMQ não é apenas uma “infraestrutura”. Ele é uma parte viva do comportamento de seu sistema. Quando ele fica mais lento, sua empresa fica mais lenta.
Uma boa configuração de monitoramento permite que você responda com rapidez e confiança:
-
As mensagens estão fluindo?
-
Caso contrário, qual fila está travada?
-
O corretor está saudável?
-
Os consumidores estão trabalhando - ou falhando silenciosamente?
-
Isso é um pico, um bug ou um problema de capacidade?
Se você quiser um monitoramento do RabbitMQ que se encaixe em uma abordagem mais ampla de “monitorar tudo em um só lugar”, Monitoramento é uma excelente primeira opção a ser considerada, especialmente quando os problemas do RabbitMQ são apenas uma peça de um quebra-cabeça de desempenho maior.