* HH-445: deploy production observability and runbooks * fix(ops): share production database DSN * fix(HH-445): enforce database TLS gate * fix(HH-445): preserve production serve command * fix(prod): require external database dependencies * fix(prod): unify database host rejection gates * test(prod): enforce exact database TLS runbook contract --------- Co-authored-by: Rogee <rogee@ipao.vip>
150 lines
5.3 KiB
YAML
150 lines
5.3 KiB
YAML
rule_files:
|
|
- prometheus_alerts.yml
|
|
|
|
evaluation_interval: 1m
|
|
|
|
tests:
|
|
- name: HTTP error rate only fires above five percent
|
|
interval: 1m
|
|
input_series:
|
|
- series: 'http_requests_total{job="gochat",instance="below-threshold"}'
|
|
values: '0+100x12'
|
|
- series: 'http_request_errors_total{job="gochat",instance="below-threshold"}'
|
|
values: '0+5x12'
|
|
- series: 'http_requests_total{job="gochat",instance="above-threshold"}'
|
|
values: '0+100x12'
|
|
- series: 'http_request_errors_total{job="gochat",instance="above-threshold"}'
|
|
values: '0+6x12'
|
|
alert_rule_test:
|
|
- eval_time: 10m
|
|
alertname: GoChatHighErrorRate
|
|
exp_alerts:
|
|
- exp_labels:
|
|
instance: above-threshold
|
|
job: gochat
|
|
severity: warning
|
|
exp_annotations:
|
|
summary: GoChat error rate above 5%
|
|
description: Error rate is 6% over the last 5 minutes.
|
|
|
|
- name: Dependency failures page after one minute
|
|
interval: 1m
|
|
input_series:
|
|
- series: 'probe_success{job="gochat-database-readiness",instance="database"}'
|
|
values: '0x5'
|
|
- series: 'probe_success{job="gochat-redis-readiness",instance="redis"}'
|
|
values: '0x5'
|
|
- series: 'up{job="gochat",instance="gochat:3000"}'
|
|
values: '0x5'
|
|
- series: 'up{job="alertmanager",instance="alertmanager:9093"}'
|
|
values: '0x5'
|
|
alert_rule_test:
|
|
- eval_time: 2m
|
|
alertname: GoChatDatabaseReadinessFailed
|
|
exp_alerts:
|
|
- exp_labels:
|
|
instance: database
|
|
job: gochat-database-readiness
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: GoChat database readiness failed
|
|
description: The application cannot complete its PostgreSQL dependency check.
|
|
- eval_time: 2m
|
|
alertname: GoChatRedisReadinessFailed
|
|
exp_alerts:
|
|
- exp_labels:
|
|
instance: redis
|
|
job: gochat-redis-readiness
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: GoChat Redis readiness failed
|
|
description: The application cannot complete its Redis dependency check.
|
|
- eval_time: 2m
|
|
alertname: GoChatAppDown
|
|
exp_alerts:
|
|
- exp_labels:
|
|
instance: gochat:3000
|
|
job: gochat
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: GoChat application is down
|
|
description: GoChat metrics have been unreachable for more than one minute.
|
|
- eval_time: 2m
|
|
alertname: GoChatAlertmanagerDown
|
|
exp_alerts:
|
|
- exp_labels:
|
|
instance: alertmanager:9093
|
|
job: alertmanager
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: Alertmanager is down
|
|
description: Prometheus cannot deliver notifications to Alertmanager.
|
|
|
|
- name: Worker and critical queues page
|
|
interval: 1m
|
|
input_series:
|
|
- series: 'container_last_seen{container_label_com_docker_compose_service="worker"}'
|
|
values: '0x10'
|
|
- series: 'gochat_background_jobs_total{queue="critical",status="queued"}'
|
|
values: '30x10'
|
|
- series: 'gochat_background_jobs_oldest_seconds{queue="critical",status="queued"}'
|
|
values: '600x10'
|
|
- series: 'gochat_background_jobs_oldest_seconds{queue="default",status="running"}'
|
|
values: '1000x10'
|
|
alert_rule_test:
|
|
- eval_time: 6m
|
|
alertname: GoChatWorkerDown
|
|
exp_alerts:
|
|
- exp_labels:
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: GoChat worker is down
|
|
description: cAdvisor has not observed a production worker container for more than one minute.
|
|
- eval_time: 6m
|
|
alertname: GoChatCriticalQueueBacklog
|
|
exp_alerts:
|
|
- exp_labels:
|
|
queue: critical
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: Critical background queue is delayed
|
|
description: Queue critical exceeds 25 ready jobs or its oldest job is over five minutes old.
|
|
- eval_time: 6m
|
|
alertname: GoChatWorkerJobsStuck
|
|
exp_alerts:
|
|
- exp_labels:
|
|
queue: default
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: Background jobs are stuck
|
|
description: Queue default has a running job older than 15 minutes.
|
|
|
|
- name: Backup RPO pages and clears
|
|
interval: 1h
|
|
input_series:
|
|
- series: gochat_backup_last_success_timestamp_seconds
|
|
values: '0x4'
|
|
- series: gochat_backup_rpo_target_seconds
|
|
values: '3600x4'
|
|
alert_rule_test:
|
|
- eval_time: 2h
|
|
alertname: GoChatBackupStale
|
|
exp_alerts:
|
|
- exp_labels:
|
|
severity: critical
|
|
exp_annotations:
|
|
summary: GoChat backup is stale
|
|
description: No successful encrypted off-site backup exists inside the declared RPO.
|
|
|
|
- name: Fresh backup does not page
|
|
interval: 1h
|
|
input_series:
|
|
- series: gochat_backup_last_success_timestamp_seconds
|
|
values: '7000x4'
|
|
- series: gochat_backup_rpo_target_seconds
|
|
values: '86400x4'
|
|
alert_rule_test:
|
|
- eval_time: 2h
|
|
alertname: GoChatBackupStale
|
|
exp_alerts: []
|