Le plus important. Intégration avec des services externes (partie 2)

Nous continuerons de traiter la plus grande partie de l'intégration avec les services externes.


Deuxième partie Intégration avec Zabbix


Dans la deuxième partie de l'histoire de l'intégration de mattermost, nous parlerons de l'envoi de rapports d'accident de zabbix à mattermost. À la suite de recherches sur le net,
ce script . Le code est écrit en Perl, vous devrez donc peut-être installer des packages de perles. Avant de passer à la description du code (il est légèrement modifié par rapport à l'original), d'abord, comme d'habitude, nous allons faire quelques réglages.


Mattermost


Pour utiliser le mécanisme de réception des messages de services tiers, vous devez ajouter un enregistrement des "hooks" entrants. Nous allons dans les paramètres "Intégrations" -> "Webhooks entrants" et ajoutons l'entrée:


image


Ensuite, copiez le lien souligné à coller dans le script.


image


Zabbix


Dans l'interface de gestion de zabbix, via le menu "Administration" -> "Méthodes de notification", ajoutez une nouvelle méthode de notification:


image


Où dans le script les paramètres doivent être indiqués:


  1. {ALERT.SENDTO}
  2. Lien vers le webhook le plus important (qui a été copié précédemment)
  3. Nom d'utilisateur le plus important d'où proviendront les messages
  4. Lien vers l'avatar (le fichier doit être accessible via http)
  5. {ALERT.MESSAGE}

Ensuite, dans les paramètres utilisateur, ajoutez une nouvelle méthode de notification:


image


Dans le champ "Envoyer à", vous devez indiquer le nom du canal dans la plupart des cas où les messages seront diffusés, dans notre cas, c'est "il" (il convient de noter que le nom système du canal est utilisé). Cette valeur sera remplacée par la macro {ALERT.SENDTO}, qui apparaît dans les paramètres de la méthode de notification nouvellement créée. {ALERT.MESSAGE} - ce sera en fait le message lui-même.


Le script d'origine a subi quelques modifications, cela est dû au fait que la version de zabbix utilisée n'envoie pas le message à json (peut-être est-ce configuré quelque part). Par conséquent, le code a dû être modifié. Le code est fourni avec des commentaires et ne devrait pas poser de problèmes de compréhension.
Sur le serveur où Zabbix est installé, créez le fichier /usr/lib/zabbix/alertscripts/zabbixMatterBot.pl (j'ai Debian et zabbix installés à partir du référentiel officiel) avec le contenu suivant:


#!/usr/bin/perl # https://github.com/drewbeer/zabbix-mattermost-alertscript DrewBeer # passes data in and curls it out via json to mattermost webhooks as attachments. # you can use this as you wish, free as in beer, life is that way. # minify your json before you set it in zabbix, it will make your life easier use warnings; use strict; use JSON; use Data::Dumper; #   , /tmp/zabbix-mattermost.log my $debug = 0; my $logFH; my $zabbixData = (); # debug log the incoming data if ($debug) { open($logFH, '>>', '/var/log/zabbix/zabbix-mattermost.log'); my $dump = Dumper(@ARGV); print $logFH "args:\n$dump\n"; } #    zabbix #  -  ,   mattermost,  , #   ,   my ($channel, $hook, $botName, $iconUrl, $body) = @ARGV; $zabbixData = $body; #   my $payload; $payload = processInternal($zabbixData); #  if ($debug) { print $logFH "final payload: $payload\n"; } #   if ($payload) { sendPayload($payload); } exit; #    #  curl sub sendPayload { my($payload) = @_; my $cmd = qq( curl -s -i -X POST --data-urlencode '$payload' $hook > /dev/null); if ($debug) { $cmd = qq( curl -i -X POST --data-urlencode '$payload' $hook ); } my $cmdOutput = `$cmd`; # final debug if ($debug) { print $logFH "curl:\n$cmd \n$cmdOutput\n"; } } #    zabbix #   json- sub processInternal { my $data = shift; my $attach = (); #    $attach->{'channel'} = $channel; $attach->{'username'} = $botName; $attach->{'icon_url'} = $iconUrl; $attach->{'response_type'} = 'comment'; $attach->{'text'} = $data; if ($debug) { my $body = Dumper $attach; print $logFH "object:\n$body\n"; } my $jsonBody = encode_json $attach; #    my $jsonPayload = qq(payload=$jsonBody); #    return $jsonPayload; } 

Maintenant, soit nous attendons que le déclencheur fonctionne, soit nous simulons un accident dans zabbix et nous obtenons un message


image


C'est toute l'intégration.

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


All Articles