grafana: group prometheus alert rules for better organization
This commit is contained in:
		
					parent
					
						
							
								07b3a6947d
							
						
					
				
			
			
				commit
				
					
						5016407cef
					
				
			
		
					 1 changed files with 135 additions and 119 deletions
				
			
		|  | @ -1,7 +1,7 @@ | |||
| # Links & Resources: | ||||
| # - https://samber.github.io/awesome-prometheus-alerts/rules | ||||
| groups: | ||||
|   - name: node-exporter | ||||
|   - name: node-exporter-memory | ||||
|     rules: | ||||
|       - alert: HostOutOfMemory | ||||
|         expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|  | @ -28,6 +28,41 @@ groups: | |||
|         annotations: | ||||
|           summary: Host Memory is underutilized (instance {{ $labels.instance }}) | ||||
|           description: "Node memory is < 10% for 1 week. Consider reducing memory space. (instance {{ $labels.instance }})\n  VALUE = {{ $value }}" | ||||
|       - alert: HostSwapIsFillingUp | ||||
|         expr: ((1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100 > 80) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host swap is filling up (instance {{ $labels.instance }}) | ||||
|           description: "Swap is filling up (>80%)\n  VALUE = {{ $value }}" | ||||
|       - alert: HostOomKillDetected | ||||
|         expr: (increase(node_vmstat_oom_kill[1m]) > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host OOM kill detected (instance {{ $labels.instance }}) | ||||
|           description: "OOM kill detected\n  VALUE = {{ $value }}" | ||||
|       - alert: HostEdacCorrectableErrorsDetected | ||||
|         expr: (increase(node_edac_correctable_errors_total[1m]) > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: info | ||||
|         annotations: | ||||
|           summary: Host EDAC Correctable Errors detected (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} has had {{ printf \"%.0f\" $value }} correctable memory errors reported by EDAC in the last 5 minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostEdacUncorrectableErrorsDetected | ||||
|         expr: (node_edac_uncorrectable_errors_total > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host EDAC Uncorrectable Errors detected (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} has had {{ printf \"%.0f\" $value }} uncorrectable memory errors reported by EDAC in the last 5 minutes.\n  VALUE = {{ $value }}" | ||||
| 
 | ||||
|   - name: node-exporter-network | ||||
|     rules: | ||||
|       - alert: HostUnusualNetworkThroughputIn | ||||
|         expr: (sum by (instance) (rate(node_network_receive_bytes_total[2m])) / 1024 / 1024 > 100) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 5m | ||||
|  | @ -44,6 +79,41 @@ groups: | |||
|         annotations: | ||||
|           summary: Host unusual network throughput out (instance {{ $labels.instance }}) | ||||
|           description: "Host network interfaces are probably sending too much data (> 100 MB/s)\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkReceiveErrors | ||||
|         expr: (rate(node_network_receive_errs_total[2m]) / rate(node_network_receive_packets_total[2m]) > 0.01) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Receive Errors (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} receive errors in the last two minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkTransmitErrors | ||||
|         expr: (rate(node_network_transmit_errs_total[2m]) / rate(node_network_transmit_packets_total[2m]) > 0.01) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Transmit Errors (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} transmit errors in the last two minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkBondDegraded | ||||
|         expr: ((node_bonding_active - node_bonding_slaves) != 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Bond Degraded (instance {{ $labels.instance }}) | ||||
|           description: "Bond \"{{ $labels.device }}\" degraded on \"{{ $labels.instance }}\".\n  VALUE = {{ $value }}" | ||||
|       - alert: HostConntrackLimit | ||||
|         expr: (node_nf_conntrack_entries / node_nf_conntrack_entries_limit > 0.8) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host conntrack limit (instance {{ $labels.instance }}) | ||||
|           description: "The number of conntrack is approaching limit\n  VALUE = {{ $value }}" | ||||
| 
 | ||||
|   - name: node-exporter-disk | ||||
|     rules: | ||||
|       # Have different disk read and write rate alerts for VMs and physical machines. | ||||
|       - alert: VirtualHostUnusualDiskReadRate | ||||
|         expr: (sum by (instance) (rate(node_disk_read_bytes_total[2m])) / 1024 / 1024 > 50) * on(instance) group_left (nodename) node_uname_info{ype="virtual_machine", nodename=~".+", nodename!="forgejo-actions-runner", nodename!="woodpecker"} | ||||
|  | @ -156,6 +226,50 @@ groups: | |||
|         annotations: | ||||
|           summary: Host unusual disk write latency (instance {{ $labels.instance }}) | ||||
|           description: "Disk latency is growing (write operations > 100ms)\n  VALUE = {{ $value }}" | ||||
|       # Have different disk IO alerts for VMs and physical machines and for physical machines different ones for hard and other disks. | ||||
|       - alert: PhysicalHostUnusualHardDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total{device=~"s.+"}[1m]) > 0.75) * on(instance) group_left (nodename) node_uname_info{type="physical_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Physical host unusual hard disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       - alert: PhysicalHostUnusualOtherDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total{device!~"s.+"}[1m]) > 0.5) * on(instance) group_left (nodename) node_uname_info{type="physical_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Physical host unusual other (non-hard) disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       - alert: VirtualHostUnusualDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total[1m]) > 0.5) * on(instance) group_left (nodename) node_uname_info{type="virtual_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Virtual host unusual disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostRaidArrayGotInactive | ||||
|         expr: (node_md_state{state="inactive"} > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: critical | ||||
|         annotations: | ||||
|           summary: Host RAID array got inactive (instance {{ $labels.instance }}) | ||||
|           description: "RAID array {{ $labels.device }} is in a degraded state due to one or more disk failures. The number of spare drives is insufficient to fix the issue automatically.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostRaidDiskFailure | ||||
|         expr: (node_md_disks{state="failed"} > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host RAID disk failure (instance {{ $labels.instance }}) | ||||
|           description: "At least one device in RAID array on {{ $labels.instance }} failed. Array {{ $labels.md_device }} needs attention and possibly a disk swap\n  VALUE = {{ $value }}" | ||||
| 
 | ||||
|   - name: node-exporter-cpu | ||||
|     rules: | ||||
|       - alert: HostHighCpuLoad | ||||
|         expr: (sum by (instance) (avg by (mode, instance) (rate(node_cpu_seconds_total{mode!="idle"}[2m]))) > 0.8) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 10m | ||||
|  | @ -190,31 +304,6 @@ groups: | |||
|         annotations: | ||||
|           summary: Host CPU high iowait (instance {{ $labels.instance }}) | ||||
|           description: "CPU iowait > 10%. A high iowait means that you are disk or network bound.\n  VALUE = {{ $value }}" | ||||
|       # Have different disk IO alerts for VMs and physical machines and for physical machines different ones for hard and other disks. | ||||
|       - alert: PhysicalHostUnusualHardDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total{device=~"s.+"}[1m]) > 0.75) * on(instance) group_left (nodename) node_uname_info{type="physical_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Physical host unusual hard disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       - alert: PhysicalHostUnusualOtherDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total{device!~"s.+"}[1m]) > 0.5) * on(instance) group_left (nodename) node_uname_info{type="physical_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Physical host unusual other (non-hard) disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       - alert: VirtualHostUnusualDiskIo | ||||
|         expr: (rate(node_disk_io_time_seconds_total[1m]) > 0.5) * on(instance) group_left (nodename) node_uname_info{type="virtual_machine", nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Virtual host unusual disk IO (instance {{ $labels.instance }}) | ||||
|           description: "Time spent in IO is too high on {{ $labels.instance }}. Check storage for issues.\n  VALUE = {{ $value }}" | ||||
|       # # x2 context switches is an arbitrary number. | ||||
|       # # The alert threshold depends on the nature of the application. | ||||
|       # # Please read: https://github.com/samber/awesome-prometheus-alerts/issues/58 | ||||
|  | @ -226,14 +315,28 @@ groups: | |||
|       #   annotations: | ||||
|       #     summary: Host context switching high (instance {{ $labels.instance }}) | ||||
|       #     description: "Context switching is growing on the node (twice the daily average during the last 15m)\n  VALUE = {{ $value }}" | ||||
|       - alert: HostSwapIsFillingUp | ||||
|         expr: ((1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100 > 80) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
| 
 | ||||
|   - name: node-exporter-physical | ||||
|     rules: | ||||
|       - alert: HostNodeOvertemperatureAlarm | ||||
|         expr: ((node_hwmon_temp_crit_alarm_celsius == 1) or (node_hwmon_temp_alarm == 1)) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: critical | ||||
|         annotations: | ||||
|           summary: Host node overtemperature alarm (instance {{ $labels.instance }}) | ||||
|           description: "Physical node temperature alarm triggered\n  VALUE = {{ $value }}" | ||||
|       - alert: HostKernelVersionDeviations | ||||
|         expr: (count(sum(label_replace(node_uname_info, "kernel", "$1", "release", "([0-9]+.[0-9]+.[0-9]+).*")) by (kernel)) > 1) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 6h | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host swap is filling up (instance {{ $labels.instance }}) | ||||
|           description: "Swap is filling up (>80%)\n  VALUE = {{ $value }}" | ||||
|           summary: Host kernel version deviations (instance {{ $labels.instance }}) | ||||
|           description: "Different kernel versions are running\n  VALUE = {{ $value }}" | ||||
| 
 | ||||
|   - name: node-exporter-misc | ||||
|     rules: | ||||
|       - alert: HostSystemdServiceCrashed | ||||
|         expr: (node_systemd_unit_state{state="failed"} == 1) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|  | @ -250,94 +353,6 @@ groups: | |||
|         annotations: | ||||
|           summary: Host physical component too hot (instance {{ $labels.instance }}) | ||||
|           description: "Physical hardware component too hot\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNodeOvertemperatureAlarm | ||||
|         expr: ((node_hwmon_temp_crit_alarm_celsius == 1) or (node_hwmon_temp_alarm == 1)) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: critical | ||||
|         annotations: | ||||
|           summary: Host node overtemperature alarm (instance {{ $labels.instance }}) | ||||
|           description: "Physical node temperature alarm triggered\n  VALUE = {{ $value }}" | ||||
|       - alert: HostRaidArrayGotInactive | ||||
|         expr: (node_md_state{state="inactive"} > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: critical | ||||
|         annotations: | ||||
|           summary: Host RAID array got inactive (instance {{ $labels.instance }}) | ||||
|           description: "RAID array {{ $labels.device }} is in a degraded state due to one or more disk failures. The number of spare drives is insufficient to fix the issue automatically.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostRaidDiskFailure | ||||
|         expr: (node_md_disks{state="failed"} > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host RAID disk failure (instance {{ $labels.instance }}) | ||||
|           description: "At least one device in RAID array on {{ $labels.instance }} failed. Array {{ $labels.md_device }} needs attention and possibly a disk swap\n  VALUE = {{ $value }}" | ||||
|       - alert: HostKernelVersionDeviations | ||||
|         expr: (count(sum(label_replace(node_uname_info, "kernel", "$1", "release", "([0-9]+.[0-9]+.[0-9]+).*")) by (kernel)) > 1) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 6h | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host kernel version deviations (instance {{ $labels.instance }}) | ||||
|           description: "Different kernel versions are running\n  VALUE = {{ $value }}" | ||||
|       - alert: HostOomKillDetected | ||||
|         expr: (increase(node_vmstat_oom_kill[1m]) > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host OOM kill detected (instance {{ $labels.instance }}) | ||||
|           description: "OOM kill detected\n  VALUE = {{ $value }}" | ||||
|       - alert: HostEdacCorrectableErrorsDetected | ||||
|         expr: (increase(node_edac_correctable_errors_total[1m]) > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: info | ||||
|         annotations: | ||||
|           summary: Host EDAC Correctable Errors detected (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} has had {{ printf \"%.0f\" $value }} correctable memory errors reported by EDAC in the last 5 minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostEdacUncorrectableErrorsDetected | ||||
|         expr: (node_edac_uncorrectable_errors_total > 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 0m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host EDAC Uncorrectable Errors detected (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} has had {{ printf \"%.0f\" $value }} uncorrectable memory errors reported by EDAC in the last 5 minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkReceiveErrors | ||||
|         expr: (rate(node_network_receive_errs_total[2m]) / rate(node_network_receive_packets_total[2m]) > 0.01) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Receive Errors (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} receive errors in the last two minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkTransmitErrors | ||||
|         expr: (rate(node_network_transmit_errs_total[2m]) / rate(node_network_transmit_packets_total[2m]) > 0.01) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Transmit Errors (instance {{ $labels.instance }}) | ||||
|           description: "Host {{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} transmit errors in the last two minutes.\n  VALUE = {{ $value }}" | ||||
|       - alert: HostNetworkBondDegraded | ||||
|         expr: ((node_bonding_active - node_bonding_slaves) != 0) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 2m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host Network Bond Degraded (instance {{ $labels.instance }}) | ||||
|           description: "Bond \"{{ $labels.device }}\" degraded on \"{{ $labels.instance }}\".\n  VALUE = {{ $value }}" | ||||
|       - alert: HostConntrackLimit | ||||
|         expr: (node_nf_conntrack_entries / node_nf_conntrack_entries_limit > 0.8) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 5m | ||||
|         labels: | ||||
|           severity: warning | ||||
|         annotations: | ||||
|           summary: Host conntrack limit (instance {{ $labels.instance }}) | ||||
|           description: "The number of conntrack is approaching limit\n  VALUE = {{ $value }}" | ||||
|       - alert: HostClockSkew | ||||
|         expr: ((node_timex_offset_seconds > 0.05 and deriv(node_timex_offset_seconds[5m]) >= 0) or (node_timex_offset_seconds < -0.05 and deriv(node_timex_offset_seconds[5m]) <= 0)) * on(instance) group_left (nodename) node_uname_info{nodename=~".+"} | ||||
|         for: 10m | ||||
|  | @ -362,6 +377,7 @@ groups: | |||
|         annotations: | ||||
|           summary: Host requires reboot (instance {{ $labels.instance }}) | ||||
|           description: "{{ $labels.instance }} requires a reboot.\n  VALUE = {{ $value }}" | ||||
| 
 | ||||
|   - name: prometheus | ||||
|     rules: | ||||
|       - alert: PrometheusJobMissing | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue