| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- # Alert rules. Routed via alertmanager → alertmanager-discord bridge →
- # #briven-alerts (severity=critical|warning) or #briven-deploys (info).
- # Severity labels MUST match the route matchers in
- # infra/observability/alertmanager/alertmanager.yml.
- groups:
- - name: briven-services
- interval: 30s
- rules:
- - alert: ServiceDown
- expr: up == 0
- for: 2m
- labels:
- severity: critical
- annotations:
- summary: '{{ $labels.service }} is unreachable'
- description: '/metrics on {{ $labels.instance }} has been down for >2 minutes.'
- - alert: HighErrorRate
- # Triggers when a service's 5xx rate exceeds 5% over the last 5
- # minutes. Requires the service to expose http_requests_total
- # with a `status` label — apps/api should add this when its
- # /metrics endpoint lands.
- expr: |
- sum by (service) (rate(http_requests_total{status=~"5.."}[5m]))
- /
- sum by (service) (rate(http_requests_total[5m]))
- > 0.05
- for: 5m
- labels:
- severity: warning
- annotations:
- summary: '{{ $labels.service }} 5xx rate above 5%'
- - alert: PostgresConnectionsHigh
- expr: pg_stat_activity_count > 80
- for: 5m
- labels:
- severity: warning
- annotations:
- summary: 'postgres has {{ $value }} active connections (>80)'
- description: 'pool exhaustion is likely if this trends up.'
|