groups: - name: base-alerts rules: - alert: InstanceDown expr: up == 0 for: 2m labels: severity: critical annotations: summary: "{{ $labels.instance }} down" description: "{{ $labels.job }} on {{ $labels.instance }} is not responding" - alert: HighCPU expr: (1 - avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))) > 0.90 for: 10m labels: severity: warning annotations: summary: "High CPU on {{ $labels.instance }}" description: "CPU usage > 90% for 10m" - alert: HighMemory expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.90 for: 10m labels: severity: warning annotations: summary: "High memory on {{ $labels.instance }}" description: "Memory usage > 90% for 10m" - alert: DiskFull expr: (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) < 0.10 for: 15m labels: severity: warning annotations: summary: "Disk low on {{ $labels.instance }}" description: "<10% free on {{ $labels.mountpoint }}" - alert: DiskUsageHigh expr: (1 - (node_filesystem_avail_bytes{mountpoint="/",fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{mountpoint="/",fstype!~"tmpfs|overlay"})) > 0.85 for: 15m labels: severity: warning annotations: summary: "Disk usage >85% on {{ $labels.instance }}" description: "Root filesystem usage above 85%" - alert: MemAvailableLow expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) < 0.08 for: 10m labels: severity: warning annotations: summary: "Low available memory on {{ $labels.instance }}" description: "MemAvailable < 8%"