Files
windows_exporter/contrib/mixin/tests/rules.test.yaml
T
Jan-Otto Kröpke ae5d0cca2a mixin: group alerts by collector area and add tier 1 alerts
The alerts of the mixin now come in one rule group per collector area
(windows-exporter, windows-cpu, windows-memory, windows-disk,
windows-network, windows-service, windows-system, windows-active-directory,
windows-time). Every alert names the collectors it reads and is generated
only when _config.collectors enables them, the same switch the dashboard
uses; enableActiveDirectory and enableTime set collectors.ad and
collectors.time. _config.alerts switches single alerts off by name, and an
unknown name fails the build.

New alerts for the default collectors: WindowsCollectorTimeout,
WindowsScrapeQueueTimeout, WindowsCPUSaturation (processor queue per core),
WindowsMemoryPagingHigh, WindowsNetworkUtilizationHigh,
WindowsNetworkInterfaceFlapping, WindowsServiceNotRunning (automatic
services without triggers), WindowsServiceCrashLooping (processes per
service in 15 minutes) and WindowsHostRebooted (info, fires once per
reboot). WindowsNetworkErrors and WindowsNetworkDiscards compare the error
and discard rates with the packet rate (networkErrorRatioThreshold and
networkDiscardRatioThreshold, in percent) instead of an absolute packet
rate. Threshold alerts set keep_firing_for from keepFiringFor (5m); the new
infoSeverity and serviceSelector knobs follow the existing ones.

New recordings: windows:cpu_queue_per_core:ratio,
windows:net_received_packets:rate and windows:net_sent_packets:rate.

Each new alert has a runbook, a README row and a unit test;
tests/alerts.test.jsonnet checks the collector gating, the alert switches
and the group layout. The runbook check renders the alerts of every
collector. contrib/mixin/AGENTS.md documents the checklist for new alerts.

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
2026-10-16 23:06:59 +00:00

155 lines
7.8 KiB
YAML

rule_files:
- ../windows_rules.yaml
evaluation_interval: 1m
fuzzy_compare: true
tests:
- name: CPU is averaged across cores and preserves target labels
interval: 1m
input_series:
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="0", mode="idle"}'
values: '0+12x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="1", mode="idle"}'
values: '0+36x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="0", mode="user"}'
values: '0+48x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="b", core="0", mode="idle"}'
values: '0+30x10'
- series: 'windows_cpu_time_seconds_total{job="other", instance="host:9182", core="0", mode="idle"}'
values: '0+6x10'
promql_expr_test:
- expr: windows:cpu_cores:count
eval_time: 10m
exp_samples:
- labels: 'windows:cpu_cores:count{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 2
- labels: 'windows:cpu_cores:count{job="windows_exporter", instance="host:9182", cluster="b"}'
value: 1
- expr: 'windows:cpu_time:ratio_rate{mode="idle"}'
eval_time: 10m
exp_samples:
- labels: 'windows:cpu_time:ratio_rate{job="windows_exporter", instance="host:9182", cluster="a", mode="idle"}'
value: 0.4
- labels: 'windows:cpu_time:ratio_rate{job="windows_exporter", instance="host:9182", cluster="b", mode="idle"}'
value: 0.5
- expr: windows:cpu_usage:ratio
eval_time: 10m
exp_samples:
- labels: 'windows:cpu_usage:ratio{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 0.6
- labels: 'windows:cpu_usage:ratio{job="windows_exporter", instance="host:9182", cluster="b"}'
value: 0.5
- name: Memory availability and disk free space are ratios, not percentages
interval: 1m
input_series:
- series: 'windows_memory_available_bytes{job="windows_exporter", instance="host:9182", cluster="a"}'
values: '25x5'
- series: 'windows_memory_physical_total_bytes{job="windows_exporter", instance="host:9182", cluster="a"}'
values: '100x5'
- series: 'windows_logical_disk_free_bytes{job="windows_exporter", instance="host:9182", cluster="a", volume="C:"}'
values: '20x5'
- series: 'windows_logical_disk_size_bytes{job="windows_exporter", instance="host:9182", cluster="a", volume="C:"}'
values: '100x5'
- series: 'windows_logical_disk_free_bytes{job="windows_exporter", instance="host:9182", volume=""}'
values: '1x5'
- series: 'windows_logical_disk_size_bytes{job="windows_exporter", instance="host:9182", volume=""}'
values: '100x5'
promql_expr_test:
- expr: windows:memory_used:bytes
eval_time: 5m
exp_samples:
- labels: 'windows:memory_used:bytes{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 75
- expr: windows:logical_disk_used:bytes
eval_time: 5m
exp_samples:
- labels: 'windows:logical_disk_used:bytes{job="windows_exporter", instance="host:9182", cluster="a", volume="C:"}'
value: 80
- expr: windows:memory_usage:ratio
eval_time: 5m
exp_samples:
- labels: 'windows:memory_usage:ratio{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 0.75
- expr: windows:logical_disk_free:ratio
eval_time: 5m
exp_samples:
- labels: 'windows:logical_disk_free:ratio{job="windows_exporter", instance="host:9182", cluster="a", volume="C:"}'
value: 0.2
- name: Disk and network rates retain device labels and handle counter resets
interval: 1m
input_series:
- series: 'windows_logical_disk_read_bytes_total{job="windows_exporter", instance="host:9182", volume="C:"}'
values: '0+600x10'
- series: 'windows_logical_disk_write_bytes_total{job="windows_exporter", instance="host:9182", volume="C:"}'
values: '0+1200x10'
- series: 'windows_net_bytes_received_total{job="windows_exporter", instance="host:9182", nic="Ethernet"}'
values: '0+600x5 600+600x4'
- series: 'windows_net_bytes_sent_total{job="windows_exporter", instance="host:9182", nic="Ethernet"}'
values: '0+1800x10'
- series: 'windows_net_bytes_sent_total{job="windows_exporter", instance="host:9182", nic=""}'
values: '0+1800x10'
promql_expr_test:
- expr: windows:logical_disk_read_bytes:rate
eval_time: 10m
exp_samples:
- labels: 'windows:logical_disk_read_bytes:rate{job="windows_exporter", instance="host:9182", volume="C:"}'
value: 10
- expr: windows:logical_disk_write_bytes:rate
eval_time: 10m
exp_samples:
- labels: 'windows:logical_disk_write_bytes:rate{job="windows_exporter", instance="host:9182", volume="C:"}'
value: 20
- expr: windows:net_received_bytes:rate
eval_time: 8m
exp_samples:
- labels: 'windows:net_received_bytes:rate{job="windows_exporter", instance="host:9182", nic="Ethernet"}'
value: 10
- expr: windows:net_sent_bytes:rate
eval_time: 10m
exp_samples:
- labels: 'windows:net_sent_bytes:rate{job="windows_exporter", instance="host:9182", nic="Ethernet"}'
value: 30
- name: Processor queue per core averages the queue and packet rates keep the nic label
interval: 1m
input_series:
- series: 'windows_system_processor_queue_length{job="windows_exporter", instance="host:9182", cluster="a"}'
values: '12x5 0x5'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="0", mode="idle"}'
values: '0+60x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="1", mode="idle"}'
values: '0+60x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="2", mode="idle"}'
values: '0+60x10'
- series: 'windows_cpu_time_seconds_total{job="windows_exporter", instance="host:9182", cluster="a", core="3", mode="idle"}'
values: '0+60x10'
- series: 'windows_system_processor_queue_length{job="windows_exporter", instance="nocpu:9182", cluster="a"}'
values: '12x10'
- series: 'windows_net_packets_received_total{job="windows_exporter", instance="host:9182", cluster="a", nic="Ethernet"}'
values: '0+600x10'
- series: 'windows_net_packets_sent_total{job="windows_exporter", instance="host:9182", cluster="a", nic="Ethernet"}'
values: '0+1200x10'
promql_expr_test:
- expr: windows:cpu_queue_per_core:ratio
eval_time: 5m
exp_samples:
- labels: 'windows:cpu_queue_per_core:ratio{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 3
- expr: windows:cpu_queue_per_core:ratio
eval_time: 10m
exp_samples:
- labels: 'windows:cpu_queue_per_core:ratio{job="windows_exporter", instance="host:9182", cluster="a"}'
value: 0
- expr: windows:net_received_packets:rate
eval_time: 10m
exp_samples:
- labels: 'windows:net_received_packets:rate{job="windows_exporter", instance="host:9182", cluster="a", nic="Ethernet"}'
value: 10
- expr: windows:net_sent_packets:rate
eval_time: 10m
exp_samples:
- labels: 'windows:net_sent_packets:rate{job="windows_exporter", instance="host:9182", cluster="a", nic="Ethernet"}'
value: 20