Monitoramento Kafka com Grafana no Azure

Monitoramento Kafka com Grafana no Azure

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.

Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • 📖 Art. 02: Azure Event Hubs com Terraform
  • 📖 Art. 03: Python e Kafka no Azure Event Hubs
  • 📖 Art. 04: Kafka Connect no Azure Container Instances
  • 📖 Art. 05: Schema Registry no Azure Event Hubs
  • ⚙️ Art. 06 (este): Monitoramento Kafka com Grafana no Azure

Sumário

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).

Dashboards de monitoramento Kafka com Grafana no Azure — Infraestrutura e Event Hubs Monitor

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
Série: Kafka no Azure com Event Hubs
  • 📖 Art. 01: Kafka no Azure com Event Hubs
  • 📖 Art. 02: Azure Event Hubs com Terraform
  • 📖 Art. 03: Python e Kafka no Azure Event Hubs
  • 📖 Art. 04: Kafka Connect no Azure Container Instances
  • 📖 Art. 05: Schema Registry no Azure Event Hubs
  • ⚙️ Art. 06 (este): Monitoramento Kafka com Grafana no Azure

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.

 

Deixe uma resposta

Rolar para cima

Descubra mais sobre Blog do Castilho - Tecnologia | FinOps | DevOps | Cloud

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continuar lendo