Zabbix server & agent je selfhosted softwarový nástroj pro monitoring různých komponent IT, včetně sítí, serverů, virtuálních počítačů a cloudových služeb. Telegram je multiplatformní cloudová služba pro zasílání zpráv. Jedno z podporovaných Zabbix server notifikačních médii je i webhook pro odesílání upozornění ze Zabbix serveru, na přednastavený Telegram účet.
Obsah
Zabbix Telegram webhook
U aktualizace, zejména pokud se bude jednat o upgrade z verze 5 na verzi 6 z největší pravděpodobností neproběhne změna skriptu webhooku,který doznal značných změn. Pro odstranění původní verze skriptu je potřeba kompletní odinstalace a čistá instalace aktuální verze monitorovacího software což asi provede málokdo. Ideálni je zkopírovat novou verzi skriptu, vložit ji a uložit přímo v konfiguračním okně média – což umožňuje každé médium viz menu Administrace / Typy médií.
Nová verze skriptu
Nová verze skriptu je v odkazu který najdete v okne popisku média Telegram. Aktuální odkaz u verze 6.2.3 je zde.
Cannot read property toLowerCase of undefined
Chyba u pokusu otestovat funkčnost média „Cannot read property toLowerCase of undefined“ lze vyřešit zakomentováním řádku 81 – v textu zvýrazněno boldem.
var Telegram = { token: null, to: null, message: null, proxy: null, parse_mode: null, escapeMarkup: function (str, mode) { switch (mode) { case 'markdown': return str.replace(/([_*\[`])/g, '\\$&'); case 'markdownv2': return str.replace(/([_*\[\]()~`>#+\-=|{}.!])/g, '\\$&'); default: return str; } }, sendMessage: function () { var params = { chat_id: Telegram.to, text: Telegram.message, disable_web_page_preview: true, disable_notification: false }, data, response, request = new HttpRequest(), url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage'; if (Telegram.parse_mode !== null) { params['parse_mode'] = Telegram.parse_mode; } if (Telegram.proxy) { request.setProxy(Telegram.proxy); } request.addHeader('Content-Type: application/json'); data = JSON.stringify(params); // Remove replace() function if you want to see the exposed token in the log file. Zabbi x.log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '<TOKEN>')); Zabbi x.log(4, '[Telegram Webhook] params: ' + data); response = request.post(url, data); Zabbi x.log(4, '[Telegram Webhook] HTTP code: ' + request.getStatus()); try { response = JSON.parse(response); } catch (error) { response = null; } if (request.getStatus() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) { if (typeof response.description === 'string') { throw response.description; } else { throw 'Unknown error. Check debug log for more information.'; } } } }; try { var params = JSON.parse(value); if (typeof params.Token === 'undefined') { throw 'Incorrect value is given for parameter "Token": parameter is missing'; } Telegram.token = params.Token; if (params.HTTPProxy) { Telegram.proxy = params.HTTPProxy; } // params.ParseMode = params.ParseMode.toLowerCase(); if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) { Telegram.parse_mode = params.ParseMode; } Telegram.to = params.To; Telegram.message = params.Subject + '\n' + params.Message; if (['markdown', 'markdownv2'].indexOf(params.ParseMode) !== -1) { Telegram.message = Telegram.escapeMarkup(Telegram.message, params.ParseMode); } Telegram.sendMessage(); return 'OK'; } catch (error) { Zabbi x.log(4, '[Telegram Webhook] notification failed: ' + error); throw 'Sending failed: ' + error + '.'; }
Užitečné
Text Telegram long polling versus Webhook
Domovská stránka projektu Zabbix