markdown-include is GPL licensed. Also, rewrite it as a block processor, so that it works correctly inside indented blocks. Signed-off-by: Anders Kaseorg <anders@zulip.com>
4.5 KiB
Receive Zabbix notifications in Zulip!
!!! warn ""
**Note:** This guide is for Zabbix 5.2 and above; some older Zabbix versions have a
different workflow for creating an outgoing webhook.
-
{!create-stream.md!}
-
{!create-bot-construct-url.md!}
-
Go to your Zabbix web interface, and click Administration. Click on General and then select Macros from the dropdown. Click Add and set the macro to
{$ZABBIX_URL}. Set the value as the URL to your Zabbix server likehttps://zabbix.example.comensuring there no trailing slashes. Click Update -
Go back to your Zabbix web interface, and click Administration. Click on Media Types, and click Create Media Type.
-
Set Name to a name of your choice, such as
Zulip. Set Type to Webhook. Add the following Parameters:- Add
hostnameas the first parameter with the value{HOST.NAME}. - Add
itemas the second parameter with the value{ITEM.NAME1} is {ITEM.VALUE1}. - Add
linkas the third parameter with the value{$ZABBIX_URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}. - Add
severityas the fourth parameter with the value{TRIGGER.SEVERITY}. - Add
statusas the fifth parameter with the value{TRIGGER.STATUS}. - Add
triggeras the sixth parameter with the value{TRIGGER.NAME}. - Add
zulip_endpointas the seventh parameter with the value set as the URL constructed earlier.
Check the Enabled option, and click Update.
- Add
-
Click the Pencil to edit the script and replace any existing content with the below script:
try { Zabbix.Log(4, 'zulip webhook script value='+value); var result = { 'tags': { 'endpoint': 'zulip' } }, params = JSON.parse(value), req = new CurlHttpRequest(), payload = {}, resp; req.AddHeader('Content-Type: application/json'); payload.hostname = params.hostname; payload.severity = params.severity; payload.status = params.status; payload.item = params.item; payload.trigger = params.trigger; payload.link = params.link; resp = req.Post(params.zulip_endpoint, JSON.stringify(payload)) if (req.Status() != 200) { throw 'Response code: '+req.Status(); } resp = JSON.parse(resp); result.tags.issue_id = resp.id; result.tags.issue_key = resp.key; } catch (error) { Zabbix.Log(4, 'zulip issue creation failed json : '+JSON.stringify(payload)); Zabbix.Log(4, 'zulip issue creation failed : '+error); result = {}; } return JSON.stringify(result); -
Click Apply. Click Message Templates. Click Add. Select Problem.
-
Set Subject to
{TRIGGER.STATUS}-{TRIGGER.SEVERITY}-{TRIGGER.NAME}. Set Message to the following:{ "hostname": "{HOST.NAME}", "severity": "{TRIGGER.SEVERITY}", "status": "{TRIGGER.STATUS}", "item": "{ITEM.NAME1} is {ITEM.VALUE1}", "trigger": "{TRIGGER.NAME}", "link": "{$ZABBIX_URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}" } -
Click Add. Click Update.
-
Go back to your Zabbix web interface, and click Administration. Click on Users, and select the alias of the user you would like to use to set the notification. Click Media, and click Add.
-
Set Type to Zulip or whatever you named your media type as. Set Send To to
Zulipor any text. This field needs something in, but isn't used. Tweak the severity and times when active for notifications as appropriate, and check the Enabled option. Click Add. Click Update. -
Go back to your Zabbix web interface, and click Configuration. Click Actions, and click Create Action.
-
Set Name to a name of your choice, such as
Zulip. Under New Conditions, add the conditions for triggering a notification. Check the Enabled option, and click Operations. -
Under Operations click Add, and then set Operation Type to
Send Message. Under Send to Users, click Add, and select the user you added the alert to and click Select. Under Send only to, select Zulip or the name of your media type. Click Add twice.
{!congrats.md!}
