Das Wichtigste. Integration mit externen Diensten (Teil 2)

Wir werden uns weiterhin mit den wichtigsten Fragen der Integration mit externen Diensten befassen.


Teil Zwei Integration mit Zabbix


Im zweiten Teil der Geschichte über die Integration von mattermost werden wir über das Senden von Unfallberichten von zabbix an mattermost sprechen. Als Ergebnis von Suchanfragen im Internet,
dieses Skript . Der Code ist in Perl geschrieben, daher müssen Sie möglicherweise Pearl-Pakete installieren. Bevor wir mit der Beschreibung des Codes fortfahren (er ist geringfügig gegenüber der ursprünglichen geändert), nehmen wir zunächst wie üblich einige Einstellungen vor.


Das Wichtigste


Um den Mechanismus zum Empfangen von Nachrichten von Diensten von Drittanbietern zu verwenden, müssen Sie eine Aufzeichnung eingehender "Hooks" hinzufügen. Wir gehen zu den Einstellungen "Integrationen" -> "Eingehende Webhooks" und fügen den Eintrag hinzu:


Bild


Kopieren Sie anschließend den unterstrichenen Link, um ihn in das Skript einzufügen.


Bild


Zabbix


Fügen Sie in der zabbix-Verwaltungsoberfläche über das Menü "Administration" -> "Benachrichtigungsmethoden" eine neue Benachrichtigungsmethode hinzu:


Bild


Wo im Skript sollten Parameter angegeben werden:


  1. {ALERT.SENDTO}
  2. Link zum wichtigsten Webhook (der zuvor kopiert wurde)
  3. Benutzername, von dem aus die Nachrichten kommen
  4. Link zum Avatar (Datei muss über http zugänglich sein)
  5. {ALERT.MESSAGE}

Fügen Sie dann in den Benutzereinstellungen eine neue Benachrichtigungsmethode hinzu:


Bild


Wenn Sie im Feld "Senden an" den Namen des Kanals angeben müssen, in dem die Nachrichten gestreamt werden, in unserem Fall "es" (es ist zu beachten, dass der Systemname des Kanals verwendet wird). Dieser Wert ersetzt das Makro {ALERT.SENDTO}, das in den Parametern der neu erstellten Benachrichtigungsmethode angezeigt wird. {ALERT.MESSAGE} - Dies ist in der Tat die Nachricht selbst.


Das ursprüngliche Skript hat einige Änderungen erfahren. Dies liegt an der Tatsache, dass die verwendete Version von zabbix die Nachricht nicht an json sendet (möglicherweise ist dies irgendwo konfiguriert). Daher musste der Code geändert werden. Der Code enthält Kommentare und sollte keine Verständnisschwierigkeiten verursachen.
Erstellen Sie auf dem Server, auf dem Zabbix installiert ist, die Datei /usr/lib/zabbix/alertscripts/zabbixMatterBot.pl (ich habe Debian und zabbix aus dem offiziellen Repository installiert) mit den folgenden Inhalten:


#!/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; } 

Jetzt warten wir entweder darauf, dass der Auslöser funktioniert, oder wir simulieren einen Unfall in zabbix und erhalten eine Nachricht


Bild


Das ist die ganze Integration.

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


All Articles