groups: - name: portaljuru_api rules: # Alerta se a API ficar inacessível por mais de 1 minuto - alert: PortalJuruApiDown expr: up{job="api-portaljuru"} == 0 for: 1m labels: severity: critical annotations: summary: "Portal Jurunense API fora do ar" description: "A API do Portal Jurunense está inacessível há pelo menos 1 minuto." # Alerta se a taxa de erro HTTP for maior que 5% em 5 minutos - alert: HighErrorRate expr: sum(rate(http_request_total{job="api-portaljuru", statusCode=~"5.."}[5m])) / sum(rate(http_request_total{job="api-portaljuru"}[5m])) > 0.05 for: 2m labels: severity: warning annotations: summary: "Taxa de erro elevada na API" description: "A taxa de erros HTTP 5xx está acima de 5% nos últimos 5 minutos." # Alerta se o tempo de resposta estiver muito alto - alert: SlowResponseTime expr: histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="api-portaljuru"}[5m])) by (le)) > 1 for: 5m labels: severity: warning annotations: summary: "Tempo de resposta elevado na API" description: "95% das requisições estão levando mais de 1 segundo para completar." # Alerta para uso alto de memória - alert: HighMemoryUsage expr: process_resident_memory_bytes{job="api-portaljuru"} > 350000000 for: 5m labels: severity: warning annotations: summary: "Uso elevado de memória" description: "A API está usando mais de 350MB de memória por mais de 5 minutos." # Alerta para pool de conexões quase esgotado - alert: DatabaseConnectionPoolNearlyFull expr: api_db_connection_pool_used{job="api-portaljuru"} / api_db_connection_pool_total{job="api-portaljuru"} > 0.8 for: 2m labels: severity: warning annotations: summary: "Pool de conexões quase cheio" description: "O pool de conexões está usando mais de 80% da capacidade máxima."