feat(O12): Prometheus alerting rules for all SLOs
- 11 alert rules across 5 groups - Availability: service down, DB down, embedding down - Latency: ingest p95 > 5s, query p95 > 2s, embedding p95 > 10s - Errors: ingest/query error rate > 10%, embedding failures - Storage: pool exhausted, write errors - Quality: relevance precision < 30% - PrometheusRule CRD for kube-prometheus-stack
This commit is contained in:
@@ -0,0 +1,130 @@
|
|||||||
|
# Prometheus alerting rules for Poimen Memory (O12)
|
||||||
|
# Deploy: kubectl apply -f k8s/infra/prometheus-alerts.yaml
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: PrometheusRule
|
||||||
|
metadata:
|
||||||
|
name: poimen-memory-alerts
|
||||||
|
namespace: poimen
|
||||||
|
labels:
|
||||||
|
app: poimen-memory
|
||||||
|
prometheus: k8s
|
||||||
|
role: alert-rules
|
||||||
|
spec:
|
||||||
|
groups:
|
||||||
|
- name: poimen-memory.availability
|
||||||
|
rules:
|
||||||
|
- alert: MemoryServiceDown
|
||||||
|
expr: up{job="poimen-memory"} == 0
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Poimen memory service is down"
|
||||||
|
description: "Memory service has been unreachable for > 2 minutes"
|
||||||
|
|
||||||
|
- alert: MemoryDBDown
|
||||||
|
expr: memory_dependency_db_up == 0
|
||||||
|
for: 1m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Memory service cannot reach database"
|
||||||
|
description: "DB dependency health check failing for > 1 minute"
|
||||||
|
|
||||||
|
- alert: MemoryEmbeddingDown
|
||||||
|
expr: memory_dependency_embedding_up == 0
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Embedding service unreachable"
|
||||||
|
description: "Embedding dependency health check failing for > 5 minutes"
|
||||||
|
|
||||||
|
- name: poimen-memory.latency
|
||||||
|
rules:
|
||||||
|
- alert: MemoryIngestLatencyHigh
|
||||||
|
expr: histogram_quantile(0.95, rate(memory_ingest_duration_seconds_bucket[5m])) > 5
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Ingest p95 latency > 5s"
|
||||||
|
description: "95th percentile ingest latency is {{ $value }}s"
|
||||||
|
|
||||||
|
- alert: MemoryQueryLatencyHigh
|
||||||
|
expr: histogram_quantile(0.95, rate(memory_query_duration_seconds_bucket[5m])) > 2
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Query p95 latency > 2s"
|
||||||
|
description: "95th percentile query latency is {{ $value }}s"
|
||||||
|
|
||||||
|
- alert: MemoryEmbeddingLatencyHigh
|
||||||
|
expr: histogram_quantile(0.95, rate(memory_query_embedding_duration_seconds_bucket[5m])) > 10
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Embedding p95 latency > 10s"
|
||||||
|
description: "95th percentile embedding call latency is {{ $value }}s"
|
||||||
|
|
||||||
|
- name: poimen-memory.errors
|
||||||
|
rules:
|
||||||
|
- alert: MemoryIngestErrorRateHigh
|
||||||
|
expr: rate(memory_ingest_errors_total[5m]) / rate(memory_ingest_requests_total[5m]) > 0.1
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Ingest error rate > 10%"
|
||||||
|
description: "{{ $value | humanizePercentage }} of ingest requests are failing"
|
||||||
|
|
||||||
|
- alert: MemoryQueryErrorRateHigh
|
||||||
|
expr: rate(memory_query_errors_total[5m]) / rate(memory_query_requests_total[5m]) > 0.1
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Query error rate > 10%"
|
||||||
|
description: "{{ $value | humanizePercentage }} of query requests are failing"
|
||||||
|
|
||||||
|
- alert: MemoryEmbeddingFailureRate
|
||||||
|
expr: rate(memory_query_embedding_failures_total[5m]) > 0.5
|
||||||
|
for: 3m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Embedding failures > 0.5/s"
|
||||||
|
description: "Embedding service failing at {{ $value }}/s — queries cannot embed"
|
||||||
|
|
||||||
|
- name: poimen-memory.storage
|
||||||
|
rules:
|
||||||
|
- alert: MemoryDBPoolExhausted
|
||||||
|
expr: memory_db_pool_idle == 0
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "DB connection pool exhausted"
|
||||||
|
description: "No idle DB connections for > 5 minutes"
|
||||||
|
|
||||||
|
- alert: MemoryWriteErrorsHigh
|
||||||
|
expr: rate(memory_write_errors_total[5m]) > 1
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Write errors > 1/s"
|
||||||
|
description: "Database write errors at {{ $value }}/s"
|
||||||
|
|
||||||
|
- name: poimen-memory.quality
|
||||||
|
rules:
|
||||||
|
- alert: MemoryRelevanceLow
|
||||||
|
expr: memory_relevance_precision < 0.3
|
||||||
|
for: 15m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Retrieval relevance precision < 30%"
|
||||||
|
description: "Relevance precision is {{ $value | humanizePercentage }}"
|
||||||
Reference in New Issue
Block a user