Image: sourceBonjour, Habr! Je m'appelle Ilya Ableev, je travaille dans le service de surveillance de Badoo.
Vous pouvez conserver longtemps le système de surveillance le plus froid. Le principal outil pour répondre aux problèmes dans Badoo est Zabbix, et nous avons
partagé à plusieurs reprises
l'expérience de la personnalisation.
Hors de la boîte, vous pouvez en apprendre davantage sur les nouveaux problèmes via l'interface Web ou par courrier / SMS. Cela fonctionne bien et jusqu'à un certain point, nous étions à l'aise avec ces méthodes.
Aujourd'hui, notre système comprend plusieurs instances de serveur, des milliers d'hôtes, des centaines de milliers de vérifications et environ le même nombre de déclencheurs auxquels vous devez répondre le plus rapidement possible. Après une série d'incidents, alors que nous n'avons passé que dix minutes à trouver le problème (ce qui est complètement inacceptable), nous avons réalisé que nous avions besoin d'autres moyens de signaler les problèmes. Alors peut-être que notre réaction serait plus rapide.
La solution optimale, à notre avis, serait d'afficher des notifications importantes au-dessus de toutes les fenêtres (navigateurs, chats, consoles). Dans cet article, nous parlerons de la façon dont nous avons terminé Zabbix, en enseignant comment les envoyer directement sur le bureau.
À qui cette solution convient:
- les administrateurs de service, qui non seulement regardent le moniteur 24 heures sur 24, mais s'occupent également d'autres tâches;
- tous les autres administrateurs qui n'aiment pas afficher les feuilles PROBLÈME et OK dans la messagerie ou les SMS, mais qui souhaitent se renseigner sur les problèmes critiques en temps opportun.
Vous devrez passer du temps sur l'installation, mais je pense que si vous utilisez Zabbix et avez déjà utilisé des scripts personnalisés, ce ne sera pas difficile pour vous.
Attention! Recevoir des notifications de cette manière crée une dépendance, son utilisation à long terme donne l'impression qu'il fait partie intégrante de Zabbix.
Je vais vous dire par étapes ce que nous avons fait et comment. L'implémentation technique est assez simple:
- Zabbix envoie une alerte à un événement.
- Le script d'envoi sur le serveur envoie des données au client sur le bureau via UDP.
- Le script du destinataire reçoit la notification et déclenche l'apparition d'un message contextuel via une application supplémentaire.
Le troisième élément peut différer selon le système d'exploitation que vous utilisez et l'application que vous préférez.
Première étape: configurer Zabbix
La documentation officielle détaille
comment créer vos alertes .
Le code du projet est disponible sur GitHub:
https://github.com/ableev/ZbxDsktp .
- Mettez zbxpush.py dans AlertScriptsPath à l' avance sur le serveur Zabbix.
- Plus loin dans l'interface Web: Administration → Types de supports → Créer .

3. Nous enregistrerons à l'avance l'IP / FQDN auquel nous enverrons des alertes.
Cet article peut être amélioréPar exemple, nous l'avons fait de cette façon: il y a un serveur de surveillance principal, avec une connexion SSH, le script se souvient de l'IP de l'appelant et commence à lui envoyer des alertes. Ainsi, afin d'activer la réception de données à domicile, vous n'avez pas besoin de modifier l'action à chaque fois.
Dans l'interface Web:
Administration →
Utilisateurs →
% nom d'utilisateur% →
Média .

4. Créez une action sur les déclencheurs.
Dans l'interface Web:
Configuration →
Actions .

Format d'envoi
{TRIGGER.NSEVERITY}@@@{HOST.NAME}@@@{TRIGGER.NAME}
Le premier est le format numérique du déclencheur (4 ou 5 affecte l'icône affichée: High ou Disaster), le second est l'en-tête de notification, le troisième est le corps du message.
@@@ - pour faciliter le découpage en colonnes, car les noms des déclencheurs peuvent dire n'importe quoi (au moins avec nous :)), mais certainement pas cette combinaison.


Deuxième étape: le serveur envoie des données au client
La logique est simple: nous recevons un événement, nous le transmettons au client.
zbxpush.py
Ici, vous pouvez changer UDP en TCP. Nous avons choisi UDP pour une raison simple: Zabbix envoie toutes les notifications dans l'ordre, ce qui signifie que si votre ordinateur n'est pas disponible, en cas d'utilisation de TCP, les notifications seront envoyées avec un long délai.
Mais UDP n'est pas fiableLe lecteur, qui vient de la blague sur UDP, remarquera que dans le cas de l'envoi d'alertes sur UDP, il y a une chance de les perdre quelque part entre le serveur et le bureau. Et il aura raison. Mais le but n'est pas de délivrer un message garanti, mais d'attirer simplement et rapidement l'attention sur le tableau de bord avec des problèmes: "Hé, quelque chose s'est passé là-bas, allez voir."
N'oubliez pas de rendre le script exécutable!
Étape 3: recevoir l'événement et afficher les notifications
zbxlistenerd.py
- un script qui tournera en arrière-plan et déclenchera des notifications
settings.cfg
- fichier avec les paramètres du client
icons/5.png
,
icons/4.png
- icônes pour différentes criticités des déclencheurs
Plus loin, nos chemins divergent. La partie «client» implique un peu de créativité, car chacun crée un environnement pour lui-même.
Ce qui est nécessaire:
- Icônes correspondant à la criticité des déclencheurs;
- notifications contextuelles sonores;
- effectuer une action en cliquant sur une notification (connexion SSH, ouverture d'un lien, lancement d'un ticket sur un problème, etc.).
Notre entreprise utilise principalement Linux et Mac OS comme système d'exploitation de bureau, alors regardons quelques exemples pour eux. Si vous implémentez la même chose pour Windows, n'hésitez pas à commenter! Nous sommes heureux de compléter le message.
Linux

Permettez-moi de vous donner un exemple qui est arrivé à utiliser: notify-send dans Xfce (dans la capture d'écran ci-dessus). Pourquoi notifier-envoyer et pas le même Python en utilisant libnotify? Oui, car il se trouve dans toutes les distributions de bureau populaires (Ubuntu, Fedora, SUSE) et fonctionne avec tous les DE (au moins populaires) (Gnome, KDE, Xfce).
Astuce: si vous rencontrez des périodes d'indisponibilité massive de quelque chose (par exemple, un commutateur est tombé et que vous êtes inondé d'une montagne de déclencheurs concernant l'indisponibilité du serveur), configurez immédiatement le raccourci clavier pour terminer le processus d'envoi de notification.
Mac OS
Étant donné qu'au départ la solution a été mise en œuvre sur la base d'une application gratuite, puis nous avons essayé celle payante, il y aura deux exemples.
notifiant le terminal

Après une courte recherche, un
notificateur de terminal gratuit a été choisi.
Avantages:
- Vous pouvez définir différentes icônes pour différentes criticités;
- Vous pouvez créer des liens vers des graphiques dans Zabbix et les ouvrir en cliquant sur une notification;
- Vous pouvez implémenter l'ouverture des liens SSH: ils ont vu une notification -> cliqué -> immédiatement allé à l'hôte.
Inconvénients: aucun (en particulier après l'ajout du support des icônes).
Grogner
Pour l'activer, définissez growl_enabled = True dans settings.cfg.À une époque où le notificateur de terminal ne savait pas comment utiliser des icônes personnalisées, Growl s'en est plutôt bien sorti. Par conséquent, notre curiosité a prévalu sur notre curiosité - et nous avons essayé cette application plutôt populaire (qui, je dois le dire, peut non seulement changer d'icônes - c'est tout un centre de notification).
Avantages:
- vous avez peut-être déjà installé l'application;
- Vous pouvez choisir différentes icônes pour différentes criticité;
- tout comme dans terminal-notifier, vous pouvez configurer des actions en cliquant sur les notifications.
Moins: payé.
Si vous n’avez pas Growl, je vous recommande tout de même d’utiliser terminal-notifier.
Conclusion
Donc, à l'aide d'appareils simples ...Ce que nous avons obtenu en conséquence:
- livraison rapide des notifications aux administrateurs;
- réduction du temps de réaction aux événements (du moment où ils «ont découvert» à «réparé» ou «transmis»);
- la possibilité d'effectuer des actions semi-automatiques simples:
De plus, tout dépend de votre créativité.
Il était une fois, lorsque je travaillais dans une entreprise de fournisseur, lorsque le canal Internet est tombé de tous les haut-parleurs et écouteurs sur le lieu de travail, le son d'une sirène a été entendu. Cela a conduit le préposé (moi) dans une stupeur, n'a pas donné un rapport adéquat du problème par téléphone, mais il (moi) a essayé de résoudre ce problème dès que possible.
Personnellement, je connais déjà des cas de vissage au script du son d'un cochon d'un antivirus populaire et des orateurs d'un traducteur populaire. :)
Si vous avez du temps libre, le désir et la technologie moderne, vous pouvez le faire
Réactions rapides aux incidents!