Toda a minha infra-estrutura é monitorizada pelo Prometheus. Mas… quem é que o monitoriza se ele for abaixo?
O Prometheus vem já de fábrica com uma regra true
que envia constantemente um alerta e que serve exactamente esse propósito: criar um Dead man’s switch. Mas só isso não chega. É também preciso o sistema que receba esses alertas periódicos e envie uma notificação caso deixem de ser enviados.
Há algumas soluções caseiras mas às tantas li algures (no reddit) a sugestão de usar o Home Assistant para esse efeito. E faz todo o sentido porque é fácil e já tem as notificações configuradas.
São só precisas 3 entidades:
timer
alert
-
automation
activada por umwebhook
A ideia base é esta:
- o
timer
tem de estar sempre a correr; - para isso acontecer, o
webhook
tem de ser chamado periodicamente pela entidade externa que queremos monitorizar. Owebhook
activa aautomation
que reinicia otimer
; - caso contrário, o
alert
envia uma notificação quando otimer
estiver parado, ou seja, quando owebhook
deixar de ser chamado. Dito de outra forma, activa o switch quando o man estiver dead.
Portanto temos:
timer:
sys_prometheus_dms:
name: Prometheus DMS
duration: 900
alert:
sys_prometheus_dms:
name: Prometheus Dead Man Switch
entity_id: timer.sys_prometheus_dms
state: "idle"
repeat: 5
notifiers:
- ios
automation:
- id: 'sys_prometheus_dns'
alias: Prometheus DMS
description: ''
trigger:
- platform: webhook
webhook_id: prometheus_dms
condition: []
action:
- service: timer.start
data: {}
target:
entity_id: timer.sys_prometheus_dms
mode: single
O servidor externo terá de fazer um POST periódico no endereço https://homeassistant.meu.dominio/api/webhook/prometheus_dms
com uma periodicidade inferior aos 900 segundos do timer
para o manter sempre a correr.
Cumprimentos,
Nuno