Lo más importante. Integración con servicios externos (parte 2)

Seguiremos ocupándonos de los asuntos más importantes relacionados con la integración con servicios externos.


Segunda parte Integración con Zabbix


En la segunda parte de la historia sobre la integración de la materia, hablaremos sobre el envío de informes de accidentes de zabbix a la materia. Como resultado de las búsquedas en la red,
Este guión . El código está escrito en Perl, por lo que puede que necesite instalar paquetes de perlas. Antes de continuar con la descripción del código (se modifica ligeramente del original), primero, como de costumbre, realizaremos algunas configuraciones.


Más importante


Para utilizar el mecanismo de recepción de mensajes de servicios de terceros, debe agregar un registro de "enlaces" entrantes. Vamos a la configuración "Integraciones" -> "Webhooks entrantes" y agregamos la entrada:


imagen


Después, copie el enlace subrayado para pegarlo en el script.


imagen


Zabbix


En la interfaz de administración de zabbix, a través del menú "Administración" -> "Métodos de notificación", agregue un nuevo método de notificación:


imagen


Dónde en el script se deben indicar los parámetros:


  1. {ALERT.SENDTO}
  2. Enlace al webhook más importante (que se copió anteriormente)
  3. Nombre de usuario en la materia de donde provienen los mensajes
  4. Enlace al avatar (el archivo debe ser accesible a través de http)
  5. {ALERTA MENSAJE}

Luego, en la configuración del usuario, agregue un nuevo método de notificación:


imagen


Donde en el campo "Enviar a" necesita indicar el nombre del canal más importante, dónde se transmitirán los mensajes, en nuestro caso es "eso" (vale la pena señalar que se utiliza el nombre del sistema del canal). Este valor será sustituido por la macro {ALERT.SENDTO}, que aparece en los parámetros del método de notificación recién creado. {ALERT.MESSAGE}: este, de hecho, será el mensaje en sí.


El script original ha sufrido algunos cambios, esto se debe al hecho de que la versión de zabbix utilizada no está enviando el mensaje a json (tal vez esto esté configurado en alguna parte). Por lo tanto, el código tuvo que ser cambiado. El código se proporciona con comentarios y no debe causar dificultades de comprensión.
En el servidor donde está instalado Zabbix, cree el archivo /usr/lib/zabbix/alertscripts/zabbixMatterBot.pl (tengo Debian y zabbix instalados desde el repositorio oficial) con el siguiente contenido:


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

Ahora bien, esperamos que el disparador funcione o simulamos un accidente en zabbix y recibimos un mensaje


imagen


Esa es toda la integración.

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


All Articles