Este é o projeto de demonstração para a palestra "Do Prometheus ao GPT: Uma Nova Era de Observabilidade Inteligente", apresentada na Cloud Native Day São Paulo.
Apresentação disponível em: https://docs.google.com/presentation/d/1WxjzGd6KQzrsPJQqrJYAHd-pw7p8QMW4AosDZvu-fxs/edit?usp=sharing
O objetivo deste projeto é demonstrar como a Inteligência Artificial Generativa pode ser integrada a uma stack de observabilidade tradicional (Prometheus + Alertmanager) para transformar alertas técnicos e críticos em análises ricas, contextualizadas e acionáveis, enviadas diretamente para o Slack.
O fluxo da aplicação é simples:
+-------------------+ +-----------------+ +------------------+
| Aplicação Demo |----->| Prometheus |----->| Alertmanager |
| (Python/Flask) | |(Coleta Métricas)| | (Gatilho Alertas)|
+-------------------+ +-----------------+ +------------------+
| (Webhook)
v
+---------------------+ +----------------+
| Gen AI Bridge |----->| Vertex AI |
| (Python/Flask) | | (Modelo Gemini)|
+---------------------+ +----------------+
|
v
+---------------------+
| Canal do Slack |
|(Análise Inteligente)|
+---------------------+
- Aplicação Simples: Um microserviço em Flask que expõe métricas customizadas para o Prometheus.
- Monitoramento Real: Configuração funcional do Prometheus e Alertmanager para detectar problemas de latência e taxa de erros.
- Ponte Inteligente: Um serviço intermediário que recebe webhooks do Alertmanager.
- Análise com Gen AI: O serviço utiliza a SDK do Vertex AI para enviar os dados do alerta ao modelo Gemini, solicitando uma análise SRE.
- Notificações Ricas: Publica a análise gerada pela IA em um canal do Slack de forma clara e bem formatada.
Antes de começar, garanta que você tenha os seguintes softwares instalados:
- Docker
- Docker Compose
- Uma conta no Google Cloud
- Um workspace no Slack com permissões para criar aplicativos.
Siga estes passos cuidadosamente para configurar o ambiente.
Esta é a etapa mais crítica. A autenticação com a API do Google Cloud requer uma configuração específica.
- Crie um Projeto: Se ainda não tiver um, crie um novo projeto no Google Cloud Console.
- Ative o Faturamento: A utilização das APIs de IA exige que seu projeto esteja vinculado a uma conta de faturamento ativa.
- No menu, vá para
Faturamentoe siga as instruções.
- No menu, vá para
- Ative as APIs Necessárias:
- No menu, vá para
APIs e Serviços > Biblioteca. - Procure e ative as seguintes APIs:
Vertex AI APIGenerative Language API(para garantir compatibilidade)
- No menu, vá para
- Crie uma Conta de Serviço (Service Account):
- Vá para
IAM e admin > Contas de serviço. - Crie uma nova conta de serviço (ex:
gemini-alerter-sa). - Conceda a ela o papel de "Usuário da Vertex AI" (Vertex AI User).
- Vá para
- Gere uma Chave JSON:
- Após criar a conta de serviço, entre nela, vá na aba
CHAVES. - Adicione uma nova chave do tipo JSON.
- Um arquivo
.jsonserá baixado. Renomeie este arquivo paragcp-credentials.jsone coloque-o na raiz deste projeto. Um modelo do arquivo está disponvel no projeto. - Segurança: Adicione
gcp-credentials.jsonao seu arquivo.gitignorepara nunca cometer este segredo no repositório.
- Após criar a conta de serviço, entre nela, vá na aba
- Crie um App no Slack: Vá para api.slack.com/apps e crie um novo aplicativo no seu workspace.
- Ative Incoming Webhooks: No menu do seu app, vá para
Incoming Webhookse ative-os. - Crie um Webhook: Adicione um novo webhook, escolhendo o canal onde os alertas devem ser postados (ex:
#alertas-ia). - Copie a URL do Webhook. Ela se parecerá com
https://hooks.slack.com/services/....
Na raiz do projeto, crie um arquivo chamado .env e preencha com as informações coletadas.
# .env
# Cole a URL do webhook do Slack aqui
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
# Cole o ID do seu projeto do Google Cloud aqui (ex: meu-projeto-12345)
GCP_PROJECT_ID=seu-id-de-projeto-aqui
# Região do Google Cloud para usar a API (us-east4 é uma boa opção)
GCP_REGION=us-east4
Com todas as configurações no lugar, iniciar a stack é muito simples.
- Abra um terminal na raiz do projeto.
- Execute o comando:
docker-compose up --build
- Aguarde enquanto o Docker baixa as imagens e constrói os containers.
- Após a inicialização, os seguintes serviços estarão disponíveis:
- Aplicação Demo:
http://localhost:5000 - Prometheus:
http://localhost:9090 - Alertmanager:
http://localhost:9093
- Aplicação Demo:
Para gerar os alertas, execute os seguintes comandos em um novo terminal.
Para gerar um alerta de alta taxa de erros:
# Gera 50 requests que resultarão em erro HTTP 500
hey -n 50 -c 10 http://localhost:5000/errorou
for i in {1..50}; do curl -s -o /dev/null http://localhost:5000/error & done Para gerar um alerta de alta latência:
# Gera requests lentos
hey -n 20 -c 5 http://localhost:5000/slowApós executar um dos comandos, observe o alerta aparecer primeiro no Prometheus (Alerts), depois no Alertmanager, e finalmente, a análise completa gerada pela IA chegará no seu canal do Slack!
Durante o desenvolvimento, encontramos alguns erros comuns. Se algo der errado, verifique estes pontos:
- Alerta
PENDINGno Prometheus: Se o alerta não passa paraFIRING, verifique a cláusulafore a janela de tempo darate()no arquivoprometheus/alert.rules.yml. Para demos, valores baixos (for: 1serate([3m])) funcionam melhor. - Erro
404 model not found:- Verifique se o faturamento e as APIs (
Vertex AIeGenerative Language) estão ativos no seu projeto GCP. - Confirme se a região (
GCP_REGION) no seu.envestá correta. - Crucial: Verifique o nome do modelo no
gen-ai-bridge/bridge.py. Descobrimos que o nome completo e versionado (gemini-2.5-pro) foi o que funcionou para o nosso projeto.
- Verifique se o faturamento e as APIs (
- Erro
401 UnauthorizedouCREDENTIALS_MISSING: Este erro indica que a autenticação via Chave de API não é aceita. A solução é usar uma Service Account com o arquivo JSON, conforme descrito no guia de configuração. - Erro
403 SERVICE_DISABLED: Confirma que uma API específica (Vertex AIouGenerative Language) não está ativa no seu projeto. Use o link no erro para ativá-la.
Este projeto é distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.