always_on_record |
28.419s ago |
4.74ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| record: home:power_always_on:watts expr: quantile_over_time(0.01, (max without (instance, friendly_name) (ha_sensor_power_w{entity="sensor.energy_usage"}))[1d:5m]) | ok | 28.42s ago | 4.658ms | |
batteries |
20.209s ago |
35.91ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SmokeDetectorBatteryLow expr: ha_sensor_battery_percent{entity=~".*smoke.*",friendly_name!="None"} < 78 for: 1h labels: severity: warning annotations: description: It will start beeping soon summary: '{{ $labels.friendly_name }} battery low' | ok | 20.21s ago | 3.675ms | |
| alert: GenericBatteryLow expr: (label_replace(ha_sensor_battery_percent{entity!~".*smoke.*",entity!~"sensor\\..*(deadbolt|lock)_battery_level",friendly_name!="None"}, "device", "$1", "entity", "sensor\\.(.*?)_battery.*") unless on (device) label_replace(ha_entity_available{entity=~"sensor\\..*_battery_(state|cycles|health|thermal_status)"}, "device", "$1", "entity", "sensor\\.(.*?)_battery.*")) < 20 for: 1d labels: severity: warning annotations: description: '{{ $labels.entity }} is at {{ $value | humanize }}% battery' summary: '{{ $labels.friendly_name }} battery low' | ok | 20.208s ago | 9.32ms | |
| alert: FrontDeadboltBatteryLow expr: max_over_time(ha_sensor_battery_percent{entity="sensor.front_door_lock_battery_level"}[3d]) == 0 for: 2w labels: severity: warning annotations: description: The front deadbolt has reported 0% battery without a break for over two weeks summary: Front deadbolt battery low | ok | 20.2s ago | 9.38ms | |
| alert: DeadboltBatteryLow expr: ha_sensor_battery_percent{entity!="sensor.front_door_lock_battery_level",entity=~"sensor\\..*(deadbolt|lock)_battery_level",friendly_name!="None"} < 30 for: 1d labels: severity: warning annotations: description: '{{ $labels.entity }} is at {{ $value | humanize }}%; Schlage deadbolts start beeping around 25%' summary: '{{ $labels.friendly_name }} low' | ok | 20.191s ago | 3.007ms | |
| alert: BatteryDeviceUnavailable expr: label_replace(ha_entity_available{entity=~"sensor\\..*_battery(_level)?"}, "device", "$1", "entity", "sensor\\.(.*?)_battery.*") == 0 unless on (device) label_replace(ha_entity_available{entity=~"sensor\\..*_battery_(state|cycles|health|thermal_status)"}, "device", "$1", "entity", "sensor\\.(.*?)_battery.*") for: 3d labels: severity: warning annotations: description: '{{ $labels.entity }} has been unavailable for three days; dead battery, or a stale entity to delete in Home Assistant' summary: '{{ $labels.friendly_name }} unavailable' | ok | 20.189s ago | 10.31ms | |
bgp |
16.42s ago |
3.445ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: BgpSessionDown expr: max without (state) (bird_protocol_up{job="bird",proto="BGP"}) == 0 for: 35m labels: severity: critical annotations: description: bird has not had {{ $labels.name }} Established for 30 minutes; 44net routes are stale or gone. Check birdc show protocols all {{ $labels.name }} summary: BGP session {{ $labels.name }} on {{ $labels.instance }} is down | ok | 16.421s ago | 1.134ms | |
| alert: BgpPrefixNotAnnounced expr: max without (state) (bird_protocol_prefix_export_count{job="bird",proto="BGP"}) == 0 and on (name) max without (state) (bird_protocol_up{job="bird",proto="BGP"}) == 1 for: 30m labels: severity: critical annotations: description: The session is Established but exports 0 routes; check the originate static protocol and bond0.44 summary: '{{ $labels.instance }} is not announcing any prefix on BGP session {{ $labels.name }}' | ok | 16.42s ago | 801.7us | |
| alert: BgpImportLimitNear expr: max without (state) (bird_protocol_prefix_import_count{job="bird",name="ampr"}) > 4000 for: 1h labels: severity: warning annotations: description: At 5000 bird blocks further imports from AMPR; raise the import limit in /etc/bird/bird.conf summary: BGP session {{ $labels.name }} is importing {{ $value }} prefixes, near the 5000 limit | ok | 16.421s ago | 773.9us | |
| alert: BirdUnreachable expr: bird_socket_query_success{job="bird"} == 0 for: 30m labels: severity: critical annotations: description: bird is stopped or its control socket is unreachable, so BGP session alerts cannot fire summary: bird_exporter on {{ $labels.instance }} cannot query bird | ok | 16.42s ago | 642.7us | |
cats |
19.509s ago |
1.905ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: CatsNotFed expr: esphome_switch_value{id="cat_feeder"} == 0 for: 20h labels: severity: critical annotations: summary: Cats have not been fed for nearly a day, according to esphome! | ok | 19.51s ago | 1.813ms | |
chrony |
14.434s ago |
2.022ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| record: instance:chrony_clock_error_seconds:abs expr: abs(chrony_tracking_last_offset_seconds) + chrony_tracking_root_dispersion_seconds + (0.5 * chrony_tracking_root_delay_seconds) | ok | 14.435s ago | 1.914ms | |
docker |
19.281s ago |
6.466ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: DockerDown expr: node_systemd_unit_state{instance="them",name="docker.service",state="active"} == 0 for: 5m labels: severity: critical annotations: description: every container on them (grafana, frigate, immich, ...) is down with it summary: docker.service on them is not active | ok | 19.282s ago | 1.025ms | |
| alert: ContainerNotRunning expr: docker_container_running == 0 and on (instance, name) docker_container_info{restart_policy!="no"} for: 10m labels: severity: warning annotations: description: docker ps -a --filter name={{ $labels.name }}; docker logs --tail 50 {{ $labels.name }} summary: Container {{ $labels.name }} on {{ $labels.instance }} is not running | ok | 19.282s ago | 1.237ms | |
| alert: ContainerUnhealthy expr: docker_container_health_status{status="unhealthy"} == 1 for: 10m labels: severity: warning annotations: description: Its Docker healthcheck has failed for 10 minutes; see docker inspect {{ $labels.name }} (State.Health.Log) summary: Container {{ $labels.name }} on {{ $labels.instance }} is unhealthy | ok | 19.281s ago | 974.3us | |
| alert: ContainerRestarting expr: increase(docker_container_restarts[1h]) >= 3 or docker_container_restarting == 1 for: 15m labels: severity: warning annotations: description: Restarted by its restart policy repeatedly in the last hour; check docker logs {{ $labels.name }} summary: Container {{ $labels.name }} on {{ $labels.instance }} is crash-looping | ok | 19.281s ago | 2.085ms | |
| alert: DockerCollectorStale expr: time() - node_textfile_mtime_seconds{file=~".*/docker.prom"} > 900 or docker_collector_success == 0 for: 10m labels: severity: warning annotations: description: Container alerts are blind; check systemctl status prometheus-node-exporter-docker.timer summary: Docker collector on {{ $labels.instance }} is not updating | ok | 19.28s ago | 987.9us | |
envoy |
3.71s ago |
2.233ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: EnvoyDown expr: probe_success{instance="https://library.fivesevenfive.org/robots.txt",job="blackbox-http"} == 0 for: 10m labels: severity: critical annotations: summary: Envoy is down! | ok | 3.711s ago | 890us | |
| alert: EnvoyBackendDown expr: envoy_cluster_membership_healthy{job="envoy"} == 0 and envoy_cluster_membership_total{job="envoy"} > 0 for: 15m labels: severity: warning annotations: description: Envoy health checks to cluster {{ $labels.envoy_cluster_name }} have failed for 15 minutes; its site returns 503 summary: Envoy backend {{ $labels.envoy_cluster_name }} is down | ok | 3.711s ago | 1.253ms | |
filesystems |
2.623s ago |
7.839ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: BtrfsMetadataLow expr: (sum by (instance, uuid) (node_btrfs_size_bytes{block_group_type="metadata"} - node_btrfs_used_bytes{block_group_type="metadata"}) + sum by (instance, uuid) (node_btrfs_device_unused_bytes) / on (instance, uuid) (max by (instance, uuid) (node_btrfs_allocation_ratio{block_group_type="metadata"} > 0) or max by (instance, uuid) (0 * node_btrfs_size_bytes{block_group_type="metadata",mode="raid1c3"} + 3) or max by (instance, uuid) (0 * node_btrfs_size_bytes{block_group_type="metadata",mode="raid1c4"} + 4))) / 2 ^ 30 < 2 for: 1h labels: severity: warning annotations: description: Free metadata plus unallocated space; at about 0.5 GiB (the global reserve) every write fails with ENOSPC even though df shows free space. Free chunks with btrfs balance start -dusage=25, or delete snapshots summary: btrfs {{ $labels.uuid }} on {{ $labels.instance }} has {{ $value | printf "%.1f" }} GiB of metadata headroom | ok | 2.625s ago | 3.655ms | |
| alert: BtrfsDeviceErrors expr: sum by (instance, device, type) (increase(node_btrfs_device_errors_total[1h])) > 0 labels: severity: warning annotations: description: See btrfs device stats on the mount, run a scrub and check SMART for the disk; clear the counters with btrfs device stats -z once dealt with summary: btrfs device {{ $labels.device }} on {{ $labels.instance }} logged new {{ $labels.type }} errors in the last hour | ok | 2.622s ago | 2.574ms | |
| alert: FilesystemLow expr: node_filesystem_avail_bytes{fstype=~"ext4|btrfs|xfs|vfat",mountpoint!~"/mnt/snapraid/.+"} / node_filesystem_size_bytes < 0.1 for: 1h labels: severity: warning annotations: description: Under 10% free for an hour; on btrfs see also BtrfsMetadataLow, since df can show free space btrfs cannot allocate summary: '{{ $labels.mountpoint }} on {{ $labels.instance }} has {{ $value | humanizePercentage }} free' | ok | 2.62s ago | 1.523ms | |
forwarding |
21.892s ago |
2.703ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: IpForwardingDisabled expr: node_netstat_Ip_Forwarding{instance="love"} != 1 for: 2m labels: severity: critical annotations: description: The border router has stopped routing IPv4; the whole network is offline. Check sysctl net.ipv4.ip_forward summary: IPv4 forwarding is disabled on {{ $labels.instance }} | ok | 21.892s ago | 1.018ms | |
| alert: Ipv6ForwardingDisabled expr: node_ip_forwarding{family="inet6",instance="love"} == 0 for: 2m labels: severity: critical annotations: description: The border router has stopped routing IPv6. Check sysctl net.ipv6.conf.all.forwarding summary: IPv6 forwarding is disabled on {{ $labels.instance }} | ok | 21.892s ago | 561.8us | |
| alert: RouteCollectorStale expr: time() - node_textfile_mtime_seconds{file=~".*/routes.prom",instance="love"} > 1800 for: 10m labels: severity: warning annotations: description: Route, neighbour and IPv6 forwarding metrics are stale, so Ipv6ForwardingDisabled cannot fire; check prometheus-node-exporter-routes.timer summary: Routing collector on {{ $labels.instance }} has not updated for 30 minutes | ok | 21.892s ago | 834us | |
freezer |
28.221s ago |
1.577ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: FreezerHot expr: esphome_sensor_value{id="freezer_temp"} > 0 for: 1h labels: severity: critical annotations: summary: The chest freezer is above freezing! | ok | 28.221s ago | 1.488ms | |
fridgehigh |
497ms ago |
3.349ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: FridgeHot expr: (ha_sensor_temperature{entity=~".*fridge.*"} > -30) > 5 for: 3h labels: severity: critical annotations: summary: The fridge is too warm! | ok | 497ms ago | 3.254ms | |
fridgelow |
12.524s ago |
2.92ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: FridgeLow expr: (ha_sensor_temperature{entity=~".*fridge.*"} > -30) < 0 for: 12h labels: severity: critical annotations: summary: The fridge is too cold! | ok | 12.524s ago | 2.863ms | |
hosts |
8.901s ago |
3.113ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: ThemUnreachable expr: probe_success{instance="198.19.48.7",job="blackbox-ping"} == 0 for: 5m labels: severity: critical annotations: description: Home Assistant, Frigate, Grafana, Immich, the Omada controller and sundial are all unreachable summary: them (198.19.48.7) is not answering ping | ok | 8.9s ago | 2.209ms | |
hvac |
23.121s ago |
6.025ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: FurnaceBlowingColdEmail expr: (avg(deriv(ha_sensor_temperature{entity=~"sensor.(hall|living_room|office|bedroom|kids_room)_temperature"}[15m])) * on (job) max(ha_sensor_state{entity="sensor.heat_stage"})) < 0 for: 1h labels: severity: warning annotations: description: Calling for heat but it's getting colder! summary: Furnace is broken! | ok | 23.122s ago | 3.554ms | |
| alert: FurnaceBlowingColdAutomation expr: (avg(deriv(ha_sensor_temperature{entity=~"sensor.(hall|living_room|office|bedroom|kids_room)_temperature"}[10m])) * on (job) max(ha_sensor_state{entity="sensor.heat_stage"})) < 0 for: 40m labels: severity: automation annotations: description: Calling for heat but it's getting colder! summary: Furnace is broken! | ok | 23.119s ago | 2.37ms | |
hvac_filter |
49.503s ago |
4.89ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| record: hvac:filter_dp_highfan:pa expr: esphome_sensor_value{id="press_diff_pressure",job="hvac-pressure"} and on () ha_sensor_power_w{entity="sensor.furnace_watts"} > 550 | ok | 49.503s ago | 1.127ms | |
| alert: FurnaceFilterDirty expr: quantile_over_time(0.5, hvac:filter_dp_highfan:pa[1w]) < -40 and count_over_time(hvac:filter_dp_highfan:pa[1w]) >= 60 for: 1d labels: severity: warning annotations: description: 7-day median of press_diff_pressure while sensor.furnace_watts is over 550 W. Reset the ecobee filter reminder after replacing it. summary: 'Replace the furnace filter: high-fan pressure is {{ $value | printf "%.1f" }} Pa (fresh is about -33)' | ok | 49.503s ago | 3.697ms | |
ntp |
21.25s ago |
5.289ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: ChronydDown expr: chrony_up == 0 or up{job=~"chrony.*"} == 0 for: 10m labels: severity: critical annotations: description: chrony_exporter can't reach chronyd, or can't be scraped, on {{ $labels.instance }} summary: chronyd on {{ $labels.instance }} is down | ok | 21.25s ago | 2.241ms | |
| alert: NtpNotServing expr: rate(chrony_serverstats_ntp_packets_received_total[15m]) == 0 for: 15m labels: severity: critical annotations: description: No NTP requests counted for 15 minutes; check the socket bindings and firewall summary: chronyd on {{ $labels.instance }} has stopped receiving NTP packets | ok | 21.249s ago | 991.7us | |
| alert: NtpNotStratum1 expr: chrony_tracking_stratum{instance=~"us|tick|sundial"} != 1 for: 15m labels: severity: warning annotations: description: Its GPS/PPS refclock is not selected; check chronyc sources on {{ $labels.instance }} summary: chronyd on {{ $labels.instance }} is at stratum {{ $value }}, not 1 | ok | 21.248s ago | 1.881ms | |
pia |
25.738s ago |
2.923ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: PiaTunnelDown expr: node_systemd_unit_state{name="pia-tunnel.service",state="active"} == 0 for: 20m labels: severity: critical annotations: description: The PIA WireGuard tunnel (tun0) has been down for 30 minutes and pia-repair has not brought it back summary: pia-tunnel.service on {{ $labels.instance }} is not active | ok | 25.739s ago | 1.026ms | |
| alert: PiaRepairNotWorking expr: node_systemd_unit_state{name="pia-healthcheck.service",state="failed"} == 1 for: 30m labels: severity: critical annotations: description: pia-repair is running but not fixing the tunnel; see journalctl -u pia-healthcheck -u pia-repair summary: PIA health check on {{ $labels.instance }} has been failing for 30 minutes | ok | 25.739s ago | 533us | |
| alert: PiaHealthcheckNotRunning expr: time() - node_systemd_timer_last_trigger_seconds{name="pia-healthcheck.timer"} > 1800 for: 10m labels: severity: warning annotations: description: The PIA self-repair loop is not running summary: pia-healthcheck.timer on {{ $labels.instance }} has not fired for 30 minutes | ok | 25.739s ago | 486.9us | |
| alert: PiaPortForwardDown expr: node_systemd_unit_state{name="pia-portforward.service",state="active"} == 0 and on (instance) node_systemd_unit_state{name="pia-tunnel.service",state="active"} == 1 for: 30m labels: severity: warning annotations: description: The tunnel is up but the forwarded port is not being kept alive; transmission is unreachable from outside summary: pia-portforward.service on {{ $labels.instance }} is not active | ok | 25.739s ago | 740.4us | |
postgres |
29.581s ago |
997.9us |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: PostgresDown expr: pg_up == 0 for: 5m labels: severity: warning annotations: description: Home Assistant history is not being recorded. pg_isready -h 198.19.48.7; sudo journalctl -u postgresql@18-main and /var/log/postgresql/postgresql-18-main.log summary: Postgres on {{ $labels.instance }} is refusing connections | ok | 29.582s ago | 910us | |
scrape |
25.545s ago |
1.763ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: ScrapeDown expr: up == 0 for: 30m labels: severity: warning annotations: description: scrape failures for {{ $labels.instance }} via {{ $labels.job }} summary: '{{ $labels.instance }} is down' | ok | 25.546s ago | 1.643ms | |
smart |
11.877s ago |
49.89ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SmartPendingSectorsIncreased expr: (last_over_time(smartmon_current_pending_sector_raw_value[1h]) - min_over_time(smartmon_current_pending_sector_raw_value[1d])) * on (instance, disk) group_left (device_model, serial_number) smartmon_device_info > 0 for: 15m labels: severity: warning annotations: description: Unreadable sectors waiting to be rewritten or remapped (SMART 197); see the Disk health (SMART) dashboard and smartctl -a {{ $labels.disk }} summary: '{{ $labels.device_model }} {{ $labels.serial_number }} on {{ $labels.instance }} ({{ $labels.disk }}) has {{ $value | printf "%.0f" }} more pending sectors than 24h ago' | ok | 11.878s ago | 20.66ms | |
| alert: SmartReallocatedSectorsIncreased expr: (last_over_time(smartmon_reallocated_sector_ct_raw_value[1h]) - min_over_time(smartmon_reallocated_sector_ct_raw_value[1d])) * on (instance, disk) group_left (device_model, serial_number) smartmon_device_info > 0 for: 15m labels: severity: warning annotations: description: The drive remapped sectors to spares (SMART 5); see the Disk health (SMART) dashboard and smartctl -a {{ $labels.disk }} summary: '{{ $labels.device_model }} {{ $labels.serial_number }} on {{ $labels.instance }} ({{ $labels.disk }}) reallocated {{ $value | printf "%.0f" }} more sectors in 24h' | ok | 11.858s ago | 24.97ms | |
| alert: SmartFailing expr: smartmon_device_smart_healthy * on (instance, disk) group_left (device_model, serial_number) smartmon_device_info == 0 for: 15m labels: severity: critical annotations: description: The drive predicts its own failure; replace it. smartctl -H {{ $labels.disk }} summary: '{{ $labels.device_model }} {{ $labels.serial_number }} on {{ $labels.instance }} ({{ $labels.disk }}) fails its SMART self-assessment' | ok | 11.834s ago | 1.427ms | |
| alert: DiskTemperatureHigh expr: smartmon_temperature_celsius_raw_value * on (instance, disk) group_left (device_model, serial_number) smartmon_device_info > 60 for: 1h labels: severity: warning annotations: description: Above 60°C for an hour; heat causes read errors and shortens drive life. Check airflow around the USB enclosures summary: '{{ $labels.device_model }} {{ $labels.serial_number }} on {{ $labels.instance }} ({{ $labels.disk }}) is at {{ $value | printf "%.0f" }}°C' | ok | 11.833s ago | 1.035ms | |
| alert: SmartmonCollectorStale expr: time() - node_textfile_mtime_seconds{file=~".*/smartmon.prom"} > 3600 for: 10m labels: severity: warning annotations: description: Disk health alerts are blind; check systemctl status prometheus-node-exporter-smartmon.timer summary: SMART collector on {{ $labels.instance }} has not updated for an hour | ok | 11.833s ago | 1.559ms | |
snapraid |
16.447s ago |
1.123ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SnapraidSyncStale expr: time() - snapraid_sync_last_success_timestamp_seconds{instance="love"} > 5 * 86400 or absent(snapraid_sync_last_success_timestamp_seconds{instance="love"}) for: 1h labels: severity: warning annotations: description: Parity is going stale. snapraid-sync.timer runs it Mon and Fri; see systemctl list-timers snapraid-sync.timer and journalctl -u snapraid-sync summary: snapraid has not completed a run on love for 5 days | ok | 16.448s ago | 1.077ms | |
ssl |
9.86s ago |
965.5us |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SslExpiresSoon expr: envoy_server_days_until_first_cert_expiring < 14 for: 6h labels: severity: warning annotations: description: Check certbot cronjob summary: SSL certificate expiring in 2 weeks | ok | 9.861s ago | 876.2us | |
subwoofer |
18.267s ago |
1.459ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SubwoofersUnplugged expr: (esphome_sensor_value{id="subwoofer_power"} and on (node) esphome_switch_value{id="subwoofer"} == 1) < 7 for: 5m labels: severity: critical annotations: summary: Subwoofers on but idle power draw is too low! | ok | 18.268s ago | 1.363ms | |
sunpower |
4.713s ago |
14.96ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: SunpowerPanelDown expr: sunpower_pvs_inverter_ac_power_watts < 2 for: 1d labels: severity: warning annotations: description: '{{ $labels.device_type }} with id {{ $labels.device_id }} has been offline for 1 day.' summary: '{{ $labels.device_type }} offline' | ok | 4.713s ago | 14.1ms | |
| alert: SunpowerSupervisorDown expr: sunpower_pvs_device_state{device_type!="Inverter"} == 0 for: 30m labels: severity: critical annotations: description: '{{ $labels.device_type }} with id {{ $labels.device_id }} has been offline for 30 minutes' summary: '{{ $labels.device_type }} offline' | ok | 4.7s ago | 651.5us | |
systemd |
18.592s ago |
13.15ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: NetworkdDown expr: node_systemd_unit_state{instance="love",name="systemd-networkd.service",state="active"} == 0 for: 15m labels: severity: critical annotations: description: networkd manages the bond, VLANs and the 44net, PIA and HE tunnels summary: systemd-networkd on {{ $labels.instance }} is not active | ok | 18.593s ago | 1.03ms | |
| alert: SystemdUnitFailed expr: node_systemd_unit_state{instance=~"love|them",state="failed"} == 1 for: 30m labels: severity: warning annotations: description: systemctl status {{ $labels.name }} summary: '{{ $labels.name }} on {{ $labels.instance }} has been failed for 30 minutes' | ok | 18.593s ago | 12.03ms | |
them_resources |
21.124s ago |
4.229ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: ThemCpuBusy expr: 1 - avg by (instance) (rate(node_cpu_seconds_total{instance="them",mode="idle"}[10m])) > 0.9 for: 30m labels: severity: warning annotations: description: Check Frigate (driveway detects on the 2560x1440 main stream), immich and HA on them summary: them CPU is {{ $value | humanizePercentage }} busy for 30 minutes | ok | 21.125s ago | 1.589ms | |
| alert: ThemCpuPressure expr: rate(node_pressure_cpu_waiting_seconds_total{instance="them"}[10m]) > 0.5 for: 30m labels: severity: warning annotations: summary: Tasks on them are waiting for CPU {{ $value | humanizePercentage }} of the time | ok | 21.124s ago | 600.1us | |
| alert: ThemMemoryLow expr: node_memory_MemAvailable_bytes{instance="them"} / node_memory_MemTotal_bytes{instance="them"} < 0.05 for: 15m labels: severity: warning annotations: summary: them has only {{ $value | humanizePercentage }} of memory available | ok | 21.124s ago | 835.5us | |
| alert: ThemMemoryPressure expr: rate(node_pressure_memory_stalled_seconds_total{instance="them"}[10m]) > 0.1 for: 15m labels: severity: warning annotations: summary: them is stalled on memory {{ $value | humanizePercentage }} of the time (thrashing) | ok | 21.124s ago | 561.6us | |
| alert: ThemIoPressure expr: rate(node_pressure_io_stalled_seconds_total{instance="them"}[10m]) > 0.5 for: 30m labels: severity: warning annotations: description: Frigate recording, immich jobs or a failing disk; check node_disk_* for them summary: them is stalled on disk IO {{ $value | humanizePercentage }} of the time | ok | 21.124s ago | 481.8us | |
transmission |
2.53s ago |
1.035ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: TransmissionDown expr: probe_success{job="blackbox-tcp",service="transmission"} == 0 for: 30m labels: severity: warning annotations: description: TCP connect to {{ $labels.instance }} (RPC port) has failed for 20 minutes; check systemctl status transmission-daemon summary: transmission-daemon on love is not accepting connections | ok | 2.531s ago | 972.4us | |
tunnelbroker |
25.684s ago |
1.627ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: TunnelbrokerUpdateFailing expr: tunnelbroker_update_success{instance="love"} == 0 or time() - node_textfile_mtime_seconds{file=~".*/tunnelbroker.prom",instance="love"} > 1800 for: 30m labels: severity: warning annotations: description: he-ipv6 breaks if the WAN IPv4 changed and HE was not told. See journalctl -u tunnelbroker-update summary: HE tunnelbroker endpoint update is failing or not running | ok | 25.685s ago | 1.566ms | |
tunnels |
18.082s ago |
1.901ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: WireguardHandshakeStale expr: time() - max by (instance, interface) (wireguard_latest_handshake_seconds) > 900 for: 15m labels: severity: critical annotations: description: Last handshake was {{ $value | humanizeDuration }} ago; the tunnel is not passing traffic. Check wg show {{ $labels.interface }} summary: WireGuard tunnel {{ $labels.interface }} on {{ $labels.instance }} has no recent handshake | ok | 18.083s ago | 1.154ms | |
| alert: WireguardCollectorStale expr: time() - node_systemd_timer_last_trigger_seconds{name="prometheus-node-exporter-wireguard.timer"} > 1800 for: 10m labels: severity: warning annotations: description: Handshake alerts are blind until prometheus-node-exporter-wireguard.timer runs again summary: WireGuard collector on {{ $labels.instance }} has not run for 30 minutes | ok | 18.082s ago | 639.5us | |
ups |
10.548s ago |
1.621ms |
||
| Rule | State | Error | Last Evaluation | Evaluation Time |
| alert: UpsRuntimeLow expr: nut_battery_runtime_seconds < 900 for: 2m labels: severity: critical annotations: description: UPS battery low! summary: '{{ $labels.instance }} UPS has <15 minutes of battery remaining' | ok | 10.548s ago | 1.56ms | |