| name | prometheus-scraping-rules |
| description | Prometheus scrape configuration, recording rules, alerting rules, and Alertmanager routing. Service discovery, relabeling, federation, and cluster-wide agent health monitoring. Sources: prometheus/prometheus (Apache-2.0). |
/prometheus-scraping-rules
When to Use
- Scrape all yamtam agent /metrics endpoints automatically via K8s service discovery
- Recording rules: pre-compute expensive queries (agent error rate per namespace)
- Alerting rules: fire alert when agent p99 latency > SLA for > 2 minutes
- Federation: aggregate metrics from multiple clusters into a global Prometheus
Do NOT use for
- Log ingestion (use [[loki-log-aggregation]])
- Distributed tracing (use [[opentelemetry-distributed-tracing]])
prometheus.yaml — scrape config
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: yamtam-agents
kubernetes_sd_configs:
- role: pod
namespaces: { names: [yamtam, yamtam-sandbox] }
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: (.+)
replacement: "${__meta_kubernetes_pod_ip}:${1}"
- source_labels: [__meta_kubernetes_pod_label_agentId]
target_label: agent_id
- job_name: kubernetes-apiservers
kubernetes_sd_configs: [{ role: endpoints }]
scheme: https
tls_config: { ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt }
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
Recording rules (pre-compute expensive queries)
groups:
- name: yamtam.recording
interval: 30s
rules:
- record: yamtam:agent_error_rate:rate5m
expr: |
sum by (agent_id, namespace) (
rate(llm_requests_total{status="error"}[5m])
) /
sum by (agent_id, namespace) (
rate(llm_requests_total[5m])
)
- record: yamtam:ttft_p99:5m
expr: |
histogram_quantile(0.99,
sum by (model, le) (rate(llm_ttft_seconds_bucket[5m]))
)
Alerting rules
groups:
- name: yamtam.alerts
rules:
- alert: AgentHighErrorRate
expr: yamtam:agent_error_rate:rate5m > 0.05
for: 2m
labels: { severity: warning, team: yamtam }
annotations:
summary: "Agent {{ $labels.agent_id }} error rate {{ $value | humanizePercentage }}"
description: "Agent in namespace {{ $labels.namespace }} exceeds 5% error rate"
runbook_url: "https://wiki/yamtam/runbooks/high-error-rate"
- alert: AgentDown
expr: up{job="yamtam-agents"} == 0
for: 1m
labels: { severity: critical }
annotations:
summary: "Agent {{ $labels.agent_id }} is down"
Alertmanager routing
route:
group_by: [alertname, namespace]
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: default
routes:
- match: { severity: critical }
receiver: pagerduty
- match: { team: yamtam }
receiver: slack-yamtam
receivers:
- name: slack-yamtam
slack_configs:
- api_url: "$SLACK_WEBHOOK"
channel: "#yamtam-alerts"
text: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
Anti-Fake-Pass Checklist
❌ scrape_interval < 5s → Prometheus scrapes too fast, target overwhelmed
❌ Recording rules not evaluated → check evaluation_interval matches scrape_interval
❌ Alert for: 0m → fires immediately on first data point; always add minimum for: 1m
❌ relabeling drops __address__ → pods not scraped, no error reported
❌ Alertmanager not configured → alerts fire in Prometheus but nobody notified
❌ Federation without honor_labels: true → remote labels overwritten by local job label