# vesti-alerts Specification ## Purpose TBD - created by archiving change 2026-09-13-vesti-alerts. Update Purpose after archive. ## Requirements ### Requirement: VestiWebDown Алерт на недоступность web-интерфейса VESTI (:8400, systemd-юнит). #### Scenario: web не отвечает - Given метрика `vesti_web_up{component="vesti"}` = 0 - When условие держится 2 минуты - Then алерт `VestiWebDown` переходит в Firing (severity critical) #### Scenario: web восстановился - Given метрика `vesti_web_up{component="vesti"}` = 1 - When алерт в Firing - Then алерт закрывается автоматически ### Requirement: VestiPublisherDown Алерт на недоступность publisher-сервиса VESTI (:8410, /healthz). #### Scenario: publisher не отвечает - Given метрика `vesti_publisher_health{component="vesti"}` = 0 - When условие держится 2 минуты - Then алерт `VestiPublisherDown` переходит в Firing (severity critical) #### Scenario: publisher восстановился - Given метрика `vesti_publisher_health{component="vesti"}` = 1 - When алерт в Firing - Then алерт закрывается автоматически ### Requirement: VestiPublisherContainerDown Алерт на остановку Docker-контейнера publisher. #### Scenario: контейнер publisher не в статусе Up - Given метрика `vesti_publisher_docker{component="vesti"}` = 0 - When условие держится 2 минуты - Then алерт `VestiPublisherContainerDown` переходит в Firing (severity critical) #### Scenario: контейнер publisher снова Up - Given метрика `vesti_publisher_docker{component="vesti"}` = 1 - When алерт в Firing - Then алерт закрывается автоматически ### Requirement: VestiTunnelDown Алерт на недоступность SOCKS5-туннеля Telegram (:1080). #### Scenario: туннель недоступен - Given метрика `vesti_telegram_tunnel{component="vesti"}` = 0 - When условие держится 2 минуты - Then алерт `VestiTunnelDown` переходит в Firing (severity critical) #### Scenario: туннель восстановился - Given метрика `vesti_telegram_tunnel{component="vesti"}` = 1 - When алерт в Firing - Then алерт закрывается автоматически ### Requirement: VestiDbDown Алерт на недоступность SQLite-базы vesti.db. #### Scenario: БД недоступна - Given метрика `vesti_db_ok{component="vesti"}` = 0 - When условие держится 2 минуты - Then алерт `VestiDbDown` переходит в Firing (severity critical) #### Scenario: БД восстановилась - Given метрика `vesti_db_ok{component="vesti"}` = 1 - When алерт в Firing - Then алерт закрывается автоматически ### Requirement: VestiDbStale Алерт на устаревание данных краулера (не запускался >30 минут). #### Scenario: краулер не запускался более 30 минут - Given метрика `vesti_db_last_run_ts{component="vesti"}` = T - When `time() - T` > 1800 секунд и условие держится 5 минут - Then алерт `VestiDbStale` переходит в Firing (severity warning) #### Scenario: краулер снова запустился - Given метрика `vesti_db_last_run_ts{component="vesti"}` обновлена (time() - ts < 1800) - When алерт в Firing - Then алерт закрывается автоматически