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.