Files
upstream-zulip/zerver/webhooks/zabbix/doc.md
upstream-mirror 64898b2c79
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
2026-09-15 15:05:30 +05:00

4.4 KiB

Zulip Zabbix integration

Receive Zabbix notifications in Zulip!

!!! warn ""

**Note:** This guide is for Zabbix 5.4 and above; some older Zabbix
versions have a different workflow for creating an outgoing webhook.

{start_tabs}

  1. {!create-an-incoming-webhook.md!}

  2. {!generate-webhook-url-basic.md!}

  3. Go to Administration in your Zabbix web interface. Click on General, and select Macros from the dropdown. Click Add.

  4. Set the macro to {$ZABBIX_URL}. Set the value as the URL to your Zabbix server, e.g., https://zabbix.example.com, and ensure that there are no trailing slashes. Click Update.

  5. Go back to Administration in your Zabbix web interface. Select Media Types, and click Create Media Type.

  6. Set Name to a name of your choice, such as Zulip. Set Type to Webhook, and add the following Parameters:

    • hostname: {HOST.NAME}
    • item: {ITEM.NAME1} is {ITEM.VALUE1}
    • link: {$ZABBIX_URL}/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}
    • severity: {TRIGGER.SEVERITY}
    • status: {TRIGGER.STATUS}
    • trigger: {TRIGGER.NAME}
    • zulip_endpoint: the URL generated above
  7. Click the Pencil to edit the script, and replace any existing content with the script below. Then, check the Enabled option.

      try {
         Zabbix.Log(4, 'zulip webhook script value='+value);
    
         var result = {
            'tags': {
                  'endpoint': 'zulip'
            }
         },
         params = JSON.parse(value),
         req = new HttpRequest(),
         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.getStatus() != 200) {
            throw 'Response code: '+req.getStatus();
         }
    
         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);
    
  8. Open Message Templates from the top bar. Click Add under Message Type, and select Problem.

  9. Set Subject to {TRIGGER.STATUS}-{TRIGGER.SEVERITY}-{TRIGGER.NAME}. Set Message to the following, and click Add:

      {
         "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}"
      }
    
  10. Go back to Administration in your Zabbix web interface. Click on Users, and select the alias of the user you would like to use to set the notification. Select Media, and click Add.

  11. Set Type to the name you assigned to the media type above. Set Send To to Zulip or any text, as this field requires text, but it isn't used. Set the severity and active periods for notifications as suitable, and check the Enabled option. Click Add, and select Update.

  12. Go back to your Zabbix web interface, and click Configuration. Select Actions, and choose Create Action.

  13. 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.

  14. Under Operations, click Add, and then set Operation Type to Send Message. Under Send to Users, choose Add, and select the user you added the alert to above, and click Select. Under Send only to, select Zulip or the name of your media type. Click Add twice.

{end_tabs}

{!congrats.md!}

{!webhooks-url-specification.md!}