Pular para o conteúdo

Vigiando o próprio DumbMonit

Este conteúdo não está disponível em sua língua ainda.

Quem vigia o vigia? O DumbMonit responde em duas partes:

  • um heartbeat de saída, para o que ele não consegue ver por dentro: o host fora do ar, o contêiner parado, o motor travado;
  • regras integradas sobre a própria saúde, para o que ele consegue ver: o volume de dados enchendo, o banco de métricas reiniciando em loop, sondagens travando, gravações falhando, o banco de dados crescendo de forma anormal.

Ambos ficam em Configurações → Sistema → O próprio DumbMonit, que também mostra o estado do motor neste momento.

O DumbMonit chama uma URL sua em intervalo regular (60 segundos por padrão), somente enquanto o motor está saudável:

  • o agendador está rodando (completou uma rodada nos últimos dois minutos);
  • o banco SQLite responde;
  • o VictoriaMetrics responde.

Quando um deles falha, nada é enviado. Um serviço de “dead man’s switch” espera essas chamadas e alerta você quando elas param, seja a causa o host inteiro, o contêiner ou um único componente.

  1. Crie uma verificação no serviço de sua escolha e copie a URL de ping dela:
    • Healthchecks.io (ou um Healthchecks auto-hospedado): uma verificação com período igual ao intervalo e um tempo de tolerância um pouco maior (https://hc-ping.com/<uuid>);
    • Uptime Kuma: um monitor do tipo Push (https://kuma.example.com/api/push/<token>?status=up&msg=OK&ping=);
    • Better Stack: um heartbeat (https://uptime.betterstack.com/api/v1/heartbeat/<token>);
    • qualquer serviço que aceite um GET simples e alerte quando ele deixa de chegar (Cronitor, Dead Man’s Snitch…).
  2. Em Configurações → Sistema → O próprio DumbMonit, cole a URL, escolha o intervalo (30 a 3600 segundos), ative Enviar um heartbeat e salve.
  3. Pressione Testar: uma chamada sai na hora e o resultado é mostrado. O serviço deve marcar a verificação como ativa.

A chamada é um GET com timeout de 10 segundos. Ela segue a mesma proteção dos canais de notificação: nunca é enviada à própria interface web do DumbMonit nem ao seu VictoriaMetrics.

Por padrão, um motor doente simplesmente para de chamar, e o serviço alerta quando seu tempo de tolerância passa. Ative Sinalizar falhas para chamar a URL de falha, que o serviço reporta na hora:

ServiçoURL de falha
Healthchecks.io, Better Stack/fail adicionado ao caminho: https://hc-ping.com/<uuid>/fail
Uptime Kumastatus=up substituído por status=down na query

Deixe desligado para qualquer outro serviço: uma URL desconhecida terminada em /fail provavelmente responderia 404, o que na prática parece nada ter sido enviado.

Uma URL de ping normalmente traz seu próprio token: quem a conhece pode fazer sua verificação parecer saudável. O DumbMonit a guarda criptografada com o segredo da instância, nunca a devolve pela API (só o host é mostrado) e a deixa fora dos logs e das mensagens de erro. Para trocá-la, digite a nova; para mantê-la, deixe o campo vazio. Remover a URL a esquece e desliga o heartbeat.

A configuração não faz parte do pacote de configuração criptografado: defina-a de novo ao restaurar em uma instância nova.

A cada minuto o DumbMonit grava algumas medições sobre si mesmo no VictoriaMetrics, e as regras integradas do grupo O próprio DumbMonit as leem. Elas se comportam como qualquer outra regra: mesmos canais, mesmos silêncios, mesmos limites por regra em Alertas → Regras.

RegraDispara quandoPadrão
DumbMonit data volume almost fullMenos de 10% livres no volume que contém /data15 min, aviso
DumbMonit metrics database restarting in a loopO VictoriaMetrics embutido foi reiniciado 3 vezes ou mais em 30 minutos1 min, crítico
DumbMonit scheduler stalledNenhuma rodada de agendamento há mais de dois minutos5 min, crítico
DumbMonit polls running lateMonitores continuam atrasados após cada rodada por 15 minutos15 min, aviso
DumbMonit metric writes failingLotes recusados pelo VictoriaMetrics, ou amostras descartadas, nos últimos 15 minutos5 min, aviso
DumbMonit database growing fastdumbmonit.db mais que dobrou em um dia e passa de 100 MB1 h, aviso
DumbMonit backup did not runNenhum backup local bem-sucedido há dois dias (detalhes)1 h, aviso

Essas regras precisam do VictoriaMetrics para serem avaliadas. Quando o próprio VictoriaMetrics está fora do ar de vez, ou o host inteiro está, nenhuma regra pode disparar: esse é o trabalho do heartbeat.

MétricaSignificado
dumbmonit_instance_data_free_bytesEspaço livre no volume que contém /data, para um usuário sem privilégios.
dumbmonit_instance_data_size_bytesTamanho desse volume.
dumbmonit_instance_database_bytesTamanho de dumbmonit.db e do seu write-ahead log.
dumbmonit_instance_scheduler_lag_secondsSegundos desde que o agendador completou uma rodada pela última vez (normalmente abaixo de 2).
dumbmonit_instance_scheduler_backlogMonitores ainda devendo uma sondagem após a última rodada.
dumbmonit_instance_sample_writes_failed_totalLotes que o VictoriaMetrics recusou ou não respondeu, desde que o servidor iniciou.
dumbmonit_instance_samples_dropped_totalAmostras descartadas antes de chegar ao buffer de gravação, desde que o servidor iniciou.
dumbmonit_instance_vm_restarts_totalReinícios do VictoriaMetrics embutido desde que o servidor iniciou (apenas embutido).

Elas não têm o rótulo target: os alertas que geram não ficam presos a um monitor. Para um Prometheus seu, GET /metrics expõe o mesmo tipo de números, veja Coletando do DumbMonit.

MétodoRota
GET/api/self-monitoringEstado do motor, volume de dados, tamanho do banco, configuração do heartbeat e último heartbeat.
PUT/api/self-monitoring/heartbeat{ "enabled", "interval_seconds", "send_fail", "url" }. url omitida a mantém, "" a apaga.
POST/api/self-monitoring/heartbeat/testUma chamada agora, para { "url" } ou para a URL guardada.

As duas escritas são para administradores (ou um token com o escopo write).