groups: - name: garage rules: - alert: GarageNodeDown expr: up{job="garage"} == 0 for: 2m labels: severity: critical annotations: summary: Garage node {{ $labels.instance }} is down - alert: GarageNoQuorum expr: (count(up{job="garage"} == 1) < 2) for: 2m labels: severity: critical annotations: summary: Garage cluster lost quorum (<2 nodes up) - alert: GarageResyncErrors expr: block_resync_errored_blocks > 0 for: 10m labels: severity: warning annotations: summary: Garage resync errors on {{ $labels.instance }} - alert: GarageNodeUnstable expr: cluster_layout_node_connected == 0 for: 5m labels: severity: warning annotations: summary: Garage RPC health of some node is down - name: tproxy rules: - alert: TProxyDown expr: up{job="tproxy"} == 0 for: 2m labels: severity: critical annotations: summary: tproxy-server (vps03) is down or unreachable - alert: TProxyBackendErrors expr: increase(tproxy_backend_dial_failures_total[5m]) > 0 for: 10m labels: severity: warning annotations: summary: tproxy-server backend dial failures (MTProxy unreachable) - name: vinograd rules: - alert: VinogradRostelecomDown expr: probe_success{job="vinograd_wan"} == 0 for: 2m labels: severity: critical annotations: summary: Vinograd WAN (Ростелеком) {{ $labels.instance }} is down or unreachable - name: vesti rules: - alert: VestiWebDown expr: vesti_web_up{component="vesti"} == 0 for: 2m labels: severity: critical annotations: summary: VESTI web (:8400, systemd) is down - alert: VestiPublisherDown expr: vesti_publisher_health{component="vesti"} == 0 for: 2m labels: severity: critical annotations: summary: VESTI publisher (:8410) health check failed - alert: VestiPublisherContainerDown expr: vesti_publisher_docker{component="vesti"} == 0 for: 2m labels: severity: critical annotations: summary: VESTI publisher Docker container is not Up - alert: VestiTunnelDown expr: vesti_telegram_tunnel{component="vesti"} == 0 for: 2m labels: severity: critical annotations: summary: VESTI Telegram SOCKS5 tunnel (:1080) is down - alert: VestiDbDown expr: vesti_db_ok{component="vesti"} == 0 for: 2m labels: severity: critical annotations: summary: VESTI SQLite database vesti.db is unavailable - alert: VestiDbStale expr: time() - vesti_db_last_run_ts{component="vesti"} > 1800 for: 5m labels: severity: warning annotations: summary: VESTI crawler did not run for more than 30 minutes