Visao Geral
ONotificationEngine e acionado sempre que:
| Evento | Descrição |
|---|---|
| Issue state change | Transicao de estado (Detected, Analyzing, Remediating, Resolved, Escalated) |
| SLO burn rate alert | Burn rate excede threshold em janelas short+long |
| SLA violation | Tempo de resposta ou resolucao excedeu o limite |
| Remediation failure | RemediationPlan falhou e atingiu max attempts |
| Approval request | ApprovalRequest criado aguardando aprovação |
NotificationPolicy CRD
ONotificationPolicy define quais eventos disparam notificações, para quais canais, e com quais regras de throttling.
Campos do Spec
NotificationRule
Cada regra define um par match + channels. Multiplas regras podem ser definidas em uma mesma policy.| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome único da regra dentro da policy |
match | NotificationMatch | Sim | Criterios de matching |
channels | []ChannelConfig | Sim | Lista de canais de destino |
NotificationMatch
Todos os campos são opcionais. Se omitido, funciona como wildcard (match all). Quando multiplos campos são definidos, a logica e AND entre campos e OR dentro de cada campo.| Campo | Tipo | Descrição |
|---|---|---|
severities | []string | critical, high, medium, low |
signalTypes | []string | oom_kill, pod_restart, pod_not_ready, deploy_failing, error_rate, latency_spike |
namespaces | []string | Namespaces K8s a monitorar |
resourceKinds | []string | Deployment, StatefulSet, DaemonSet |
states | []string | Detected, Analyzing, Remediating, Resolved, Escalated, Failed |
ThrottleConfig
Controla a frequência e deduplicacao de notificações para evitar alert fatigue.| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
deduplicationWindow | duration | 5m | Janela temporal para deduplicacao. Notificações identicas dentro desta janela são suprimidas. |
maxPerHour | int | 120 | Máximo de notificações por hora por policy. Excedentes são enfileirados. |
groupBy | []string | [namespace, resourceName] | Campos usados para agrupar notificações. Notificações do mesmo grupo são consolidadas. |
Canais de Notificação
1. Slack
Envia notificações via Slack Incoming Webhooks usando Block Kit para rich formatting.Configuração completa do Slack
Configuração completa do Slack
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
webhook_url | string | Sim | URL do Incoming Webhook do Slack |
channel | string | Não | Override do canal (requer webhook com permissao) |
mention | string | Não | Mencao (@user, @here, @channel, @oncall-group) |
username | string | Não | Nome do bot (padrão: ChatCLI AIOps) |
icon_emoji | string | Não | Emoji do bot (padrão: :robot_face:) |
| Severidade | Cor (hex) | Visual |
|---|---|---|
| Critical | #E74C3C | Vermelho intenso |
| High | #E67E22 | Laranja |
| Medium | #F1C40F | Amarelo |
| Low | #2ECC71 | Verde |
2. PagerDuty
Integra com PagerDuty via Events API v2 para gerenciamento de incidentes on-call.Configuração completa do PagerDuty
Configuração completa do PagerDuty
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
routing_key | string | Sim | Integration Key do servico PagerDuty (Events API v2) |
severity_mapping | map | Não | Mapeamento de severidades ChatCLI para PagerDuty |
dedup_key_template | string | Não | Template para dedup_key (padrão: {{.IssueName}}) |
custom_details | map | Não | Campos extras no payload |
| ChatCLI | PagerDuty | Comportamento |
|---|---|---|
critical | critical | Aciona on-call imediatamente |
high | error | Alta prioridade |
medium | warning | Prioridade moderada |
low | info | Informativo |
dedup_key garante que atualizações de um mesmo incidente não criem alertas duplicados no PagerDuty. O padrão usa o nome do Issue, mas pode ser customizado:Resolved, o NotificationEngine envia event_action: resolve com o mesmo dedup_key, fechando o incidente no PagerDuty automaticamente.3. OpsGenie
Integra com OpsGenie para alertas e on-call management com prioridades P1-P4.Configuração completa do OpsGenie
Configuração completa do OpsGenie
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
api_key | string | Sim | API Key do OpsGenie |
api_url | string | Não | URL da API (padrão: https://api.opsgenie.com) |
priority_mapping | map | Não | Mapeamento de severidades para prioridades |
responders | []Responder | Não | Times ou usuários responsaveis |
tags | []string | Não | Tags para categorizar alertas |
visible_to | []Responder | Não | Quem pode ver o alerta |
actions | []string | Não | Ações customizadas no alerta |
| ChatCLI | OpsGenie | Descrição |
|---|---|---|
critical | P1 | Critico - aciona on-call imediatamente |
high | P2 | Alta prioridade |
medium | P3 | Prioridade moderada |
low | P4 | Baixa prioridade |
4. Email
Envia notificações via SMTP com suporte a STARTTLS e templates HTML.Configuração completa do Email
Configuração completa do Email
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
smtp_host | string | Sim | Host do servidor SMTP |
smtp_port | int | Sim | Porta SMTP (587 para STARTTLS, 465 para SSL) |
from | string | Sim | Endereco do remetente |
to | []string | Sim | Lista de destinatarios |
cc | []string | Não | Copia |
bcc | []string | Não | Copia oculta |
username | string | Não | Credencial SMTP (se auth requerida) |
password_secret | SecretRef | Não | Referência ao Secret com a senha SMTP |
subject_template | string | Não | Template Go para o assunto |
tls_skip_verify | bool | Não | Pular verificacao TLS (padrão: false) |
html_template | string | Não | Template HTML customizado (Go template) |
| Variável | Descrição |
|---|---|
{{.Severity}} | Severidade do alerta |
{{.ResourceName}} | Nome do recurso K8s |
{{.Namespace}} | Namespace |
{{.SignalType}} | Tipo do sinal |
{{.State}} | Estado atual do Issue |
{{.RiskScore}} | Risk score (0-100) |
{{.Analysis}} | Análise da IA |
{{.IssueName}} | Nome do Issue CR |
{{.Timestamp}} | Timestamp ISO 8601 |
5. Webhook
Envia notificações para endpoints HTTP arbitrarios com assinatura HMAC-SHA256.Configuração completa do Webhook
Configuração completa do Webhook
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string | Sim | URL do endpoint de destino |
secret | string | Não | Chave para assinatura HMAC-SHA256 |
headers | map | Não | Headers HTTP customizados |
method | string | Não | Método HTTP (padrão: POST) |
timeout | duration | Não | Timeout da requisicao (padrão: 10s) |
retry_count | int | Não | Número de retries em caso de falha (padrão: 3) |
retry_interval | duration | Não | Intervalo entre retries (padrão: 5s) |
secret e definido, toda requisicao inclui o header X-ChatCLI-Signature com a assinatura HMAC-SHA256 do body:6. Microsoft Teams
Envia notificações para canais do Microsoft Teams via Adaptive Cards e Incoming Webhooks.Configuração completa do Microsoft Teams
Configuração completa do Microsoft Teams
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
webhook_url | string | Sim | URL do Incoming Webhook do Teams |
title_template | string | Não | Template para o titulo do card |
theme_color | string | Não | Cor do tema (hex, sem #) |
- Header com severidade colorida
- Detalhes do recurso (namespace, kind, name)
- Análise da IA (se disponivel)
- Ações sugeridas
- Link para o dashboard Grafana
| Severidade | theme_color |
|---|---|
| Critical | E74C3C |
| High | E67E22 |
| Medium | F1C40F |
| Low | 2ECC71 |
EscalationPolicy CRD
AEscalationPolicy define a cadeia de escalacao automática quando um alerta não e reconhecido (acknowledged) dentro do timeout definido.
Campos do Spec
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
match | EscalationMatch | Sim | Criterios para aplicar está escalacao |
levels | []EscalationLevel | Sim | Cadeia ordenada de níveis de escalacao |
repeatInterval | duration | Não | Intervalo para repetir o ultimo nível (padrão: 30m) |
maxRepeats | int | Não | Máximo de repeticoes do ultimo nível (padrão: 3) |
EscalationLevel
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome descritivo do nível |
timeout | duration | Sim | Tempo sem acknowledgement antes de escalar para o próximo nível |
targets | []EscalationTarget | Sim | Destinos da notificação neste nível |
EscalationTarget
| Campo | Tipo | Descrição |
|---|---|---|
type | string | channel, user, team, oncall |
channel | ChannelConfig | Configuração do canal (quando type=channel) |
user | string | Email do usuário (quando type=user) |
team | string | Nome do time (quando type=team) |
oncall | OnCallRef | Referência ao schedule de on-call (quando type=oncall) |
Como a Escalacao Funciona
Tracking via annotations: OEscalationPolicy reconciler rastreia o estado da escalacao usando annotations no Issue CR:
| Annotation | Descrição |
|---|---|
platform.chatcli.io/escalation-level | Nível atual (0=L1, 1=L2, 2=L3) |
platform.chatcli.io/escalation-started-at | Timestamp do início da escalacao |
platform.chatcli.io/escalation-acknowledged | true quando reconhecido |
platform.chatcli.io/escalation-acknowledged-by | Quem reconheceu |
platform.chatcli.io/escalation-repeat-count | Contagem de repeticoes do ultimo nível |
Exemplos Completos
Politica de Notificação: Slack + PagerDuty
Politica de Escalacao L1 -> L2 -> L3
Email para SLA Breaches
Troubleshooting
Notificações não estão sendo enviadas
Notificações não estão sendo enviadas
Checklist de diagnostico:
- Verifique se a
NotificationPolicyexiste no namespace correto:
- Verifique os logs do operator para erros de dispatch:
- Confirme que o matching está correto:
- Verifique se o throttle não está suprimindo:
Slack retorna erro 404 ou invalid_payload
Slack retorna erro 404 ou invalid_payload
- Confirme que o
webhook_urlestá correto e o app Slack está instalado no workspace - Verifique se o canal existe e o bot tem permissao de postar
- Teste o webhook manualmente:
PagerDuty não cria incidentes
PagerDuty não cria incidentes
- Confirme que o
routing_keye uma Integration Key (não API Key) - Verifique se o servico no PagerDuty está ativo
- Valide o payload no PagerDuty Event Debugger
- Confirme que o evento não está sendo deduplicado pelo
dedup_key
Emails não chegam
Emails não chegam
- Verifique conectividade SMTP:
- Confirme credenciais no Secret referenciado em
password_secret - Verifique se
tls_skip_verify: falsee o certificado do servidor e valido - Cheque a pasta de spam dos destinatarios
Escalacao não avanca de nivel
Escalacao não avanca de nivel
- Verifique annotations do Issue:
- Confirme que
escalation-acknowledgednão está setado comotrue - Verifique os logs do EscalationPolicy reconciler
- Confirme que o
timeoutdo nível não e maior que o tempo desde a criacao
Webhook retorna erro de assinatura
Webhook retorna erro de assinatura
- Confirme que o
secretna policy e o mesmo usado no receptor para verificacao - Verifique se o receptor está lendo o body raw antes de parsear JSON
- Use
hmac.compare_digest(ou equivalente) para evitar timing attacks
Prometheus Metrics
O sistema de notificações expoe metricas para observabilidade completa:| Metrica | Tipo | Labels | Descrição |
|---|---|---|---|
chatcli_notifications_sent_total | Counter | channel, severity, rule, namespace | Total de notificações enviadas com sucesso |
chatcli_notifications_failed_total | Counter | channel, severity, rule, error_type | Total de notificações que falharam |
chatcli_notifications_throttled_total | Counter | rule, reason | Notificações suprimidas por throttle ou dedup |
chatcli_notification_dispatch_duration_seconds | Histogram | channel | Latencia do envio por canal |
chatcli_escalation_level_reached | Gauge | policy, namespace | Nível de escalacao atual por policy |
chatcli_escalation_acknowledged_total | Counter | policy, level | Total de escalações reconhecidas por nível |
chatcli_escalation_timeout_total | Counter | policy, level | Total de timeouts de escalacao por nível |
Próximo Passo
SLOs e SLAs
Gestao de Service Level Objectives com burn rate alerting
Workflow de Aprovação
Controle de mudancas com approval policies e blast radius
AIOps Platform
Deep-dive na arquitetura AIOps
K8s Operator
Configuração e CRDs do operator