أكثر أهمية. التكامل مع الخدمات الخارجية (الجزء 2)

سوف نستمر في التعامل مع الأمر الأكثر أهمية فيما يتعلق بالتكامل مع الخدمات الخارجية.


الجزء الثاني التكامل مع Zabbix


في الجزء الثاني من القصة حول تكامل المادة ، سنتحدث عن إرسال تقارير الحوادث من zabbix إلى المسألة. نتيجة لعمليات البحث على الشبكة ،
هذا السيناريو . الرمز مكتوب باللغة Perl ، لذلك قد تحتاج إلى تثبيت حزم اللؤلؤ. قبل المتابعة إلى وصف الكود (يتم تغييره قليلاً مقارنة بالرمز الأصلي) ، أولاً ، كالمعتاد ، سنقوم بعمل بعض الإعدادات.


أكثر أهمية


لاستخدام آلية تلقي الرسائل من خدمات الجهات الخارجية ، تحتاج إلى إضافة سجل من "السنانير" الواردة. نذهب إلى إعدادات "تكامل" -> "Webhooks الواردة" وإضافة الإدخال:


الصورة


بعد ذلك ، انسخ الرابط المسطر للصقه في البرنامج النصي.


الصورة


Zabbix


في واجهة إدارة zabbix ، من خلال قائمة "الإدارة" -> "طرق الإخطار" ، أضف طريقة إعلام جديدة:


الصورة


حيث يجب الإشارة إلى معلمات البرنامج النصي:


  1. {ALERT.SENDTO}
  2. رابط إلى webhook الأكثر أهمية (الذي تم نسخه مسبقًا)
  3. اسم المستخدم في المادة التي ستصدر منها الرسائل
  4. رابط الصورة الرمزية (يجب أن يكون الملف متاحًا عبر http)
  5. {ALERT.MESSAGE}

ثم ، في إعدادات المستخدم ، أضف طريقة إعلام جديدة:


الصورة


عندما تحتاج في حقل "إرسال إلى" إلى الإشارة إلى اسم القناة في أقصى درجة ، حيث سيتم بث الرسائل ، في حالتنا "هي" (تجدر الإشارة إلى استخدام اسم نظام القناة). سيتم استبدال هذه القيمة بالماكرو {ALERT.SENDTO} ، الذي يظهر في معلمات طريقة الإعلام التي تم إنشاؤها حديثًا. {ALERT.MESSAGE} - هذه ، في الواقع ، ستكون الرسالة نفسها.


لقد مر البرنامج النصي الأصلي ببعض التغييرات ، ويرجع ذلك إلى حقيقة أن إصدار zabbix المستخدم لا يرسل الرسالة إلى json (ربما تم تكوين هذا في مكان ما). لذلك ، كان يجب تغيير الرمز. يتم توفير رمز مع تعليقات ويجب أن لا يسبب صعوبات في فهم.
على الخادم حيث تم تثبيت Zabbix ، قم بإنشاء الملف /usr/lib/zabbix/alertscripts/zabbixMatterBot.pl (لديّ تثبيت دبيان و zabbix من المستودع الرسمي) بالمحتويات التالية:


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

الآن إما ننتظر المشغل للعمل ، أو نحاكي وقوع حادث في zabbix ونصلك رسالة


الصورة


هذا هو كل التكامل.

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


All Articles