groups: - name: nereus-api rules: - alert: NereusAPIHighErrorRate expr: | sum(rate(nereus_http_requests_total{path=~"/api/v1/.*",status=~"5.."}[2m])) / clamp_min(sum(rate(nereus_http_requests_total{path=~"/api/v1/.*"}[2m])), 0.001) > 0.05 for: 1m labels: severity: critical annotations: summary: Nereus API error rate exceeds 5 percent description: The API has returned more than 5 percent HTTP 5xx responses for one minute. - alert: NereusAPIHighLatency expr: | histogram_quantile( 0.95, sum by (le) (rate(nereus_http_request_duration_seconds_bucket{path=~"/api/v1/.*"}[5m])) ) > 1 for: 2m labels: severity: warning annotations: summary: Nereus API p95 latency exceeds one second description: The API p95 request duration has exceeded one second for two minutes. - alert: NereusAPIReadinessFailing expr: sum(rate(nereus_http_requests_total{path="/readyz",status="503"}[2m])) > 0 for: 1m labels: severity: critical annotations: summary: Nereus API cannot reach its database description: Readiness requests have returned HTTP 503 for one minute. - alert: NereusAPIDown expr: up{job="nereus-api"} == 0 for: 1m labels: severity: critical annotations: summary: Prometheus cannot scrape the Nereus API description: The Nereus API metrics endpoint has been unreachable for one minute.