Como eu ensinei o Zabbix a manter um olho no meu nó e relatar problemas

Olá Habr!

Atualmente, estou trabalhando em um projeto de messenger blockchain com uma equipe de meus colegas. Quem se importa - veja os links no perfil ou pergunte nos comentários.

O desenvolvimento de blockchain é um campo novo e desconhecido, então às vezes você precisa usar ferramentas muito fora do padrão. Onde está o microscópio e as unhas! Por isso, decidi manter este blog para contar vários casos interessantes da prática. A postagem de hoje é sobre como eu configuro notificações instantâneas sobre o estado do meu nó; nesse caso, posso recuperá-lo rapidamente.



O plano que eu segui


A tarefa que me propus foi a seguinte: sempre que um nó trava ou para de funcionar, devo receber notificações instantâneas sobre ele. Mas vivemos em uma era progressiva e estamos acostumados a receber todas as informações importantes instantaneamente, certo?

Decidi que, para realizar essa tarefa, fixarei o Zabbix no Slack (temos uma ferramenta de projeto em funcionamento). O Zabbix, consequentemente, monitorará o nó e enviará mensagens de erro para mim no PM do Slack.

Implementação: passo a passo


Etapa 1: Zabbix


Obviamente, o Zabbix não possui ferramentas de monitoramento pré-configuradas padrão para o nosso nó. Portanto, o primeiro desejo era determinar a disponibilidade da porta do nó usando a chave net.tcp.listen[port].

Mas existe um "mas": acontece que o nó está ativo, ouve na porta, mas não funciona corretamente. E aqui me deparei com o fato de que você precisa determinar o principal sinal de desempenho de um nó.

O que Noda deve fazer? Certo, cresça. Aqui o crescimento será o principal sinal. Portanto, decidi usar a chave system.run[command, mode] .

Juntamente com curl -s http://127.0.0.1:36666/api/blocks/getHeight .

Como resultado, recebemos uma string no formato JSON do formulário

 {"success":true,"nodeTimestamp":XXXXXXX,"height":XXXXXXX} 

O pacote jq (https://stedolan.imtqy.com/jq/) ajudou a resolver o problema de análise JSON. Uma simples transferência de resultados via pipe curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height {6666 / api / blocks / getHeight curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height , e em vez da altura esperada, recebemos uma resposta contendo informações sobre o comando curl .



As informações redundantes precisavam ser removidas e, em seguida, um assistente veio - a -s , também conhecida como -silent . Como resultado, usando a chave system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] do Zabbix system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height] , obtemos a altura do nó da vista desejada e conveniente para o monitoramento XXXXXXXXX.



Também foi necessário um gatilho para configurar o alerta planejado. O plano era o seguinte: compare os valores anteriores e anteriores, e para que o gatilho funcione se o crescimento for menor que um.

{ADAMANT Node Monitoring:system.run[curl -s http://127.0.0.1:36666/api/blocks/getHeight | jq .height].change()}<1

Etapa 2. Zabbix para Slack




A próxima tarefa é notificar o gatilho no Slack. Como base, peguei o material https://github.com/ericoc/zabbix-slack-alertscript .

As instruções são claras, mas o uso de emoticons para distinguir entre Gravidade não é sério. O realce de cores é muito mais interessante. Após o processamento do script, isso permanece:

  url='********************************' username='Server' to="$1" subject="$2" recoversub='^RECOVER(Y|ED)?$' if [[ "$subject" == 'Warning' ]]; then color='#EBFF00' elif [ "$subject" == 'Not classified' ]; then color='#D8E3FF' elif [ "$subject" == 'Information' ]; then color='#0049FF' elif [ "$subject" == 'Average' ]; then color='#FFC200' elif [ "$subject" == 'High' ]; then color='#FF5500' elif [ "$subject" == 'Disaster' ]; then color='#FF0000' else color='#00FF06' fi message="${subject} \n $3" payload="payload={\"attachments\": [{\"color\": \"${color}\", \"text\": \"${message}\"}]}" curl -m 5 --data-urlencode "${payload}" $url 

Conclusões


Como moral, algumas palavras, por que o monitoramento conveniente é tão importante. Quanto mais rápido você aprender sobre a situação, mais rápido a corrigirá e menos pronunciadas serão as consequências. Como se costuma dizer, não se considera que o tempo gasto tenha diminuído. E no Slack, entre outras coisas, há bate-papos em grupo, para que a equipe possa se conectar para corrigir o problema e coordenar ações. A propósito, nosso projeto possui código-fonte aberto e respeitamos muito outros projetos de código-fonte aberto. Meu experimento mostrou mais uma vez que o código aberto é bom.

Source: https://habr.com/ru/post/pt440216/


All Articles