Monitoramento Kafka com Grafana no Azure

Neste artigo você vai configurar o monitoramento Kafka com Grafana no Azure usando Azure Managed Grafana e Log Analytics, tudo provisionado com Terraform. O monitoramento Kafka com Grafana no Azure fecha o ciclo da série: com dashboards de throughput de entrada, mensagens pendentes por consumer group e latência de processamento, você tem visibilidade completa do seu ambiente Event Hubs em tempo real.
Sumário
- Por que Grafana para monitorar Kafka no Azure
- Azure Managed Grafana vs Grafana self-hosted
- Métricas disponíveis no Event Hubs
- Pré-requisitos
- Passo 1 — Log Analytics Workspace
- Passo 2 — Azure Managed Grafana
- Passo 3 — main.tf completo
- Passo 4 — Executar o Terraform
- Resultado do apply
- Acessar o Grafana
- Configurar dashboard de Event Hubs
- Alerta de Consumer Group Lag
- Troubleshooting
- Limpeza dos recursos
Por que Grafana para monitorar Kafka no Azure
O monitoramento Kafka com Grafana no Azure combina dois serviços gerenciados: o Azure Monitor (que coleta métricas do Event Hubs automaticamente) e o Azure Managed Grafana (que visualiza essas métricas em dashboards). Sem monitoramento, problemas de performance no Kafka são difíceis de diagnosticar: um consumer group com lag crescente pode indicar consumidores lentos, um produtor gerando mais mensagens do que os consumidores processam, ou uma partição desbalanceada.
O Grafana foi escolhido para este monitoramento Kafka com Grafana no Azure porque: (1) é o padrão de mercado para observabilidade, familiar para times de plataforma; (2) o Azure Managed Grafana já vem integrado com o Azure Monitor como data source; (3) a versão 12 do Grafana (que usamos) suporta alertas nativos, eliminando a necessidade do Azure Monitor Alerts separado para casos simples.
Azure Managed Grafana vs Grafana self-hosted
O Azure Managed Grafana é um serviço SaaS da Microsoft que roda Grafana como plataforma gerenciada. Para o monitoramento Kafka com Grafana no Azure, ele tem vantagens claras sobre o Grafana self-hosted: integração automática com Azure Monitor e Azure Data Explorer sem configuração de data sources, autenticação via Azure Active Directory (sem gerenciar usuários do Grafana separadamente), e atualizações automáticas da versão.
O SKU Standard do Azure Managed Grafana (que usamos nesta série) suporta até 50 usuários, dashboards ilimitados e alertas nativos. Para ambientes maiores, o SKU Essential tem menos recursos mas custo menor.
Métricas disponíveis no Event Hubs
O Azure Monitor coleta automaticamente as seguintes métricas do Event Hubs que usaremos no monitoramento Kafka com Grafana no Azure:
| Métrica | Namespace | Uso |
|---|---|---|
| IncomingMessages | Microsoft.EventHub/namespaces | Volume de mensagens produzidas |
| OutgoingMessages | Microsoft.EventHub/namespaces | Volume de mensagens consumidas |
| IncomingBytes | Microsoft.EventHub/namespaces | Throughput de entrada em bytes |
| OutgoingBytes | Microsoft.EventHub/namespaces | Throughput de saída em bytes |
| ActiveConnections | Microsoft.EventHub/namespaces | Conexões ativas (clientes Kafka) |
| ServerErrors | Microsoft.EventHub/namespaces | Erros no broker |
| ThrottledRequests | Microsoft.EventHub/namespaces | Requests limitados por throughput unit |
O consumer group lag — a métrica mais importante para monitoramento Kafka — não é exposta diretamente pelo Azure Monitor no Event Hubs Standard. Para monitorar lag, use a biblioteca confluent-kafka para consultar os offsets do consumer group e calcular o lag por partição, exportando para o Log Analytics via Azure Monitor Logs ingestion API.
Pré-requisitos
Para o monitoramento Kafka com Grafana no Azure, você precisa do Art. 01 aplicado (Resource Group). O Art. 06 é independente dos demais artigos da série — você pode provisionar o Grafana sem o namespace Event Hubs, pois o Log Analytics aceita qualquer fonte de dados. Verifique se o provider Microsoft.Dashboard está registrado na sua subscription:
az provider register --namespace Microsoft.Dashboard
az provider show --namespace Microsoft.Dashboard --query registrationState
Passo 1 — Log Analytics Workspace
O Log Analytics Workspace é o repositório central de logs e métricas que o Grafana vai consultar no monitoramento Kafka com Grafana no Azure. O SKU PerGB2018 cobra por GB ingerido, com 30 dias de retenção padrão (configurável até 730 dias).
module "log_analytics" {
source = "../../terraform-log-analytics-modules"
name = "law-kafka-blog-castilho-eus"
resource_group_name = data.azurerm_resource_group.kafka.name
location = data.azurerm_resource_group.kafka.location
sku = "PerGB2018"
retention_in_days = 30
tags = var.tags
}
Passo 2 — Azure Managed Grafana
O módulo terraform-grafana-modules cria a instância do Azure Managed Grafana com a versão 12 e configura o monitoring_scope para a subscription inteira — isso permite que o Grafana acesse métricas de qualquer recurso na subscription, incluindo o namespace Event Hubs.
module "grafana" {
source = "../../terraform-grafana-modules"
name = "amg-kafka-castilho-eus"
resource_group_name = data.azurerm_resource_group.kafka.name
location = data.azurerm_resource_group.kafka.location
grafana_major_version = 12
sku = "Standard"
monitoring_scope = data.azurerm_subscription.current.id
tags = var.tags
depends_on = [module.log_analytics]
}
Passo 3 — main.tf completo
data "azurerm_resource_group" "kafka" {
name = "rg-kafka-blog-castilho-eus"
}
data "azurerm_subscription" "current" {}
module "log_analytics" {
source = "../../terraform-log-analytics-modules"
name = "law-kafka-blog-castilho-eus"
resource_group_name = data.azurerm_resource_group.kafka.name
location = data.azurerm_resource_group.kafka.location
sku = "PerGB2018"
retention_in_days = 30
tags = var.tags
}
module "grafana" {
source = "../../terraform-grafana-modules"
name = "amg-kafka-castilho-eus"
resource_group_name = data.azurerm_resource_group.kafka.name
location = data.azurerm_resource_group.kafka.location
grafana_major_version = 12
sku = "Standard"
monitoring_scope = data.azurerm_subscription.current.id
tags = var.tags
depends_on = [module.log_analytics]
}
Passo 4 — Executar o Terraform
cp backend.hcl.example backend.hcl
terraform init -backend-config=backend.hcl
terraform plan
terraform apply
O provisionamento do Azure Managed Grafana leva cerca de 5-8 minutos — é um dos recursos mais lentos do Azure para provisionar via Terraform. O Log Analytics é criado primeiro (via depends_on) e leva cerca de 1 minuto.
Resultado do apply
Após o apply do monitoramento Kafka com Grafana no Azure, os seguintes recursos estão disponíveis:
| Recurso | Nome | Detalhe |
|---|---|---|
| Log Analytics | law-kafka-blog-castilho-eus |
SKU PerGB2018, 30 dias retenção |
| Grafana | amg-kafka-castilho-eus |
v12, SKU Standard, East US |
| Endpoint Grafana | https://amg-kafka-castilho-eus-hmctbke3h0axdbgs.eus.grafana.azure.com |
Acesso via browser |
Acessar o Grafana
O monitoramento Kafka com Grafana no Azure é acessado via browser no endpoint do Azure Managed Grafana. A autenticação é feita automaticamente com a conta Azure AD do usuário — sem senha separada. Se você não tiver acesso, adicione seu usuário como Grafana Admin via Portal Azure → Azure Managed Grafana → Access Control (IAM) → Add role assignment → Grafana Admin.
# Obter endpoint do Grafana
az grafana show \
--name amg-kafka-castilho-eus \
--resource-group rg-kafka-blog-castilho-eus \
--query properties.endpoint -o tsv
Configurar dashboard de Event Hubs
No Grafana, o data source Azure Monitor já vem pré-configurado pelo Azure Managed Grafana. Para criar um dashboard de monitoramento Kafka com Grafana no Azure rapidamente, use o painel “Explore”: selecione o data source Azure Monitor, escolha o namespace de métricas Microsoft.EventHub/namespaces, o recurso evhns-kafka-blog-castilho-eus e a métrica IncomingMessages. O resultado é um gráfico em tempo real do volume de mensagens produzidas.
Para um dashboard completo de monitoramento Kafka com Grafana no Azure, crie painéis para: throughput de entrada por event hub (IncomingBytes dividido por partições), taxa de saída (OutgoingMessages), conexões ativas (ActiveConnections) e requests throttled (ThrottledRequests — indica que você atingiu o limite de throughput units e precisa escalar).

Alerta de Consumer Group Lag
Para monitorar o consumer group lag no monitoramento Kafka com Grafana no Azure, você precisa enviar o lag calculado para o Log Analytics. O script abaixo calcula o lag do consumer group cg-python-app e envia via Log Analytics HTTP Data Collector API:
import json
import os
import hashlib
import hmac
import base64
import datetime
import requests
from confluent_kafka import Consumer, TopicPartition
NAMESPACE = "evhns-kafka-blog-castilho-eus.servicebus.windows.net"
EVENTHUB = "evh-pedidos-blog-castilho-eus"
CONN_STR = os.environ["CONSUMER_CONN_STR"]
LAW_ID = os.environ["LAW_WORKSPACE_ID"]
LAW_KEY = os.environ["LAW_PRIMARY_KEY"]
conf = {
"bootstrap.servers": f"{NAMESPACE}:9093",
"security.protocol": "SASL_SSL",
"sasl.mechanism": "PLAIN",
"sasl.username": "$ConnectionString",
"sasl.password": CONN_STR,
"group.id": "cg-python-app",
}
consumer = Consumer(conf)
metadata = consumer.list_topics(EVENTHUB)
partitions = [
TopicPartition(EVENTHUB, p)
for p in metadata.topics[EVENTHUB].partitions.keys()
]
committed = consumer.committed(partitions)
end_offsets = consumer.get_watermark_offsets
lag_data = []
for tp in committed:
_, high = consumer.get_watermark_offsets(tp)
lag = high - (tp.offset if tp.offset >= 0 else 0)
lag_data.append({"partition": tp.partition, "lag": lag, "eventhub": EVENTHUB})
consumer.close()
print(json.dumps(lag_data, indent=2))
Configure um Grafana Alert no painel de lag: se sum(lag) > 10000 por mais de 5 minutos, dispare uma notificação para o canal de alertas do time. Esse limiar indica que os consumidores não estão acompanhando o volume de produção.
Troubleshooting
Provider Microsoft.Dashboard não registrado — o Terraform retorna um erro ao criar o Azure Managed Grafana se o provider não estiver registrado. Execute az provider register --namespace Microsoft.Dashboard e aguarde alguns minutos antes de rodar novamente o apply.
Nome do Grafana muito longo — o recurso azurerm_dashboard_grafana tem limite de 23 caracteres no nome. O nome amg-kafka-castilho-eus (22 chars) respeita esse limite.
Grafana v10 não suportado no SKU Standard — o SKU Standard do Azure Managed Grafana suporta apenas as versões mais recentes. Use grafana_major_version = 12 para garantir compatibilidade com o monitoramento Kafka com Grafana no Azure.
Limpeza dos recursos
Para destruir todos os recursos desta série e parar a cobrança, execute terraform destroy em cada artigo na ordem inversa: art-06, art-05, art-04, art-03, art-02, art-01. O Resource Group do art-01 só pode ser destruído depois de todos os recursos internos serem removidos.
# Destruir art-06 primeiro
cd artigos-kafka/art-06-grafana
terraform destroy
# Depois art-05, art-04... e por último art-01
# Alternativa: destruir o Resource Group diretamente (remove tudo)
az group delete --name rg-kafka-blog-castilho-eus --yes --no-wait
Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI
🚀 Vamos nos conectar?
Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.
Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!
💬 Dúvidas ou Problemas?
Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!
Muito obrigado pela visita e até o próximo post!
Jefferson Castilho Especialista em Cloud & DevOps.Este guia técnico é exclusivo do Blog do Castilho. Explore nossa para mais conteúdos sobre IA e Cloud.


