Comment j'ai appris à Zabbix à garder un œil sur mon nœud et à signaler les problèmes

Bonjour, Habr!

Je travaille actuellement sur un projet de messagerie blockchain avec une équipe de mes collègues. Peu importe - voir les liens dans le profil ou demander dans les commentaires.

Le développement de la blockchain est un domaine nouveau et inconnu, vous devez donc parfois utiliser des outils très non standard. Où est le microscope et les ongles! J'ai donc décidé de garder ce blog afin de raconter divers cas intéressants de la pratique. La publication d'aujourd'hui porte sur la façon dont je configure des notifications instantanées sur l'état de mon nœud, auquel cas je peux rapidement le réactiver.



Le plan que j'ai suivi


La tâche que je me suis fixée était la suivante: chaque fois qu'un nœud se bloque ou cesse de fonctionner, je devrais recevoir des notifications instantanées à ce sujet. Mais nous vivons à un âge progressif et sommes habitués à recevoir instantanément toutes les informations importantes, non?

J'ai décidé que pour accomplir cette tâche, je fixerai Zabbix à Slack (nous avons un outil de projet fonctionnel). En conséquence, Zabbix surveillera le nœud et m'enverra des messages d'erreur dans le MP de Slack.

Mise en œuvre: étape par étape


Étape 1: Zabbix


Bien sûr, Zabbix ne dispose pas d'outils de surveillance préconfigurés standard pour notre nœud. Par conséquent, le premier souhait était de déterminer la disponibilité du port de noeud à l'aide de la clé net.tcp.listen[port].

Mais il y a un «mais»: il arrive que le nœud soit actif, il écoute sur le port, mais il ne fonctionne pas correctement. Et là, j'étais confronté au fait que vous devez déterminer le signe principal des performances d'un nœud.

Que devrait faire Noda? Bien, grandis. Ici, la croissance sera le signe principal. Par conséquent, j'ai décidé d'utiliser la clé system.run[command, mode] .

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

En conséquence, nous avons reçu une chaîne au format JSON du formulaire

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

Le package jq (https://stedolan.imtqy.com/jq/) a aidé à résoudre le problème d'analyse JSON. Un simple transfert de résultat via la curl http://127.0.0.1:36666/api/blocks/getHeight | jq .height tuyau 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 , et au lieu de la hauteur tant attendue, nous avons reçu une réponse contenant des informations sur la commande curl .



Les informations redondantes devaient être supprimées, puis un assistant est venu - le -s , alias -silent . Par conséquent, en utilisant la clé 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] nous obtenons la hauteur du nœud de la vue souhaitée et pratique pour la surveillance XXXXXXXXX.



Un déclencheur était également requis pour configurer l'alerte planifiée. Le plan était le suivant: comparer la dernière valeur et les valeurs précédentes, et pour que le déclencheur fonctionne si la croissance est inférieure à un.

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

Étape 2. Zabbix à Slack




La tâche suivante consiste à notifier le déclencheur dans Slack. Comme base, j'ai pris le matériel https://github.com/ericoc/zabbix-slack-alertscript .

Les instructions sont claires, mais l'utilisation d'émoticônes pour distinguer la gravité n'est pas grave. La mise en évidence des couleurs est beaucoup plus intéressante. Après avoir traité le script, cela reste:

  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 

Conclusions


En morale, quelques mots, pourquoi une surveillance pratique est si importante. Plus vite vous en apprendrez sur la situation, plus vite vous la corrigerez et moins les conséquences seront prononcées. Comme on dit, le temps passé n'est pas considéré comme tombé. Et dans Slack, entre autres, il y a des discussions de groupe, afin que l'équipe puisse se connecter pour résoudre le problème et coordonner les actions. Soit dit en passant, notre projet a du code open source, et nous sommes très respectueux des autres projets open source. Mon expérience a une fois de plus montré que l'open source est bon.

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


All Articles