Zabbix 5.0

Route alerts from Zabbix 5.0 into Squadcast

This document will help you integrate Zabbix 5.0 with Squadcast.

Zabbix 5.0 is a mature, enterprise-level platform that allows you to monitor large-scale IT environments comprising servers, networks, applications, services and cloud. Route detailed monitoring alerts from Zabbix 5.0 to the right users in Squadcast.

How to integrate Zabbix 5.0 with Squadcast

In Squadcast: Using Zabbix 5.0 as an Alert Source

(1) From the navigation bar on the left, select Services. Pick the applicable Team from the Team-picker on the top. Next, click on Alert Sources for the applicable Service

(2) Search for Zabbix 5.0 from the Alert Source drop-down and copy the Webhook URL

In Zabbix 5.0: Create a Squadcast Webhook

(1) From the sidebar in the dashboard, click on Media types present under the Administration section

(2) Copy the contents of the below XML snippet and save it in a file with .xml extension

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>5.0</version>
    
    <media_types>
        <media_type>
            <name>Squadcast</name>
            <type>WEBHOOK</type>
            <parameters>
                <parameter>
                    <name>eventid</name>
                    <value>{EVENT.ID}</value>
                </parameter>
                <parameter>
                    <name>eventname</name>
                    <value>{EVENT.NAME}</value>
                </parameter>
                <parameter>
                    <name>hostname</name>
                    <value>{HOST.NAME}</value>
                </parameter>
                <parameter>
                    <name>severity</name>
                    <value>{EVENT.NSEVERITY}</value>
                </parameter>
                <parameter>
                    <name>triggerid</name>
                    <value>{TRIGGER.ID}</value>
                </parameter>
                <parameter>
                    <name>eventack</name>
                    <value>{EVENT.ACK.STATUS}</value>
                </parameter>
                <parameter>
                    <name>eventupdate</name>
                    <value>{EVENT.UPDATE.STATUS}</value>
                </parameter>
                <parameter>
                    <name>eventvalue</name>
                    <value>{EVENT.VALUE}</value>
                </parameter>
                <parameter>
                    <name>eventdate</name>
                    <value>{EVENT.DATE}</value>
                </parameter>
                <parameter>
                    <name>event_tags</name>
                    <value>{EVENT.TAGS}</value>
                </parameter>
                <parameter>
                    <name>hostip</name>
                    <value>{HOST.IP}</value>
                </parameter>
                <parameter>
                    <name>eventtime</name>
                    <value>{EVENT.TIME}</value>
                </parameter>
                <parameter>
                    <name>triggerdesc</name>
                    <value>{TRIGGER.DESCRIPTION}</value>
                </parameter>
                <parameter>
                    <name>eventopdata</name>
                    <value>{EVENT.OPDATA}</value>
                </parameter>
                <parameter>
                    <name>zabbixurl</name>
                    <value>{$ZABBIX.URL}</value>
                </parameter>
                <parameter>
                    <name>squadcastwebhook</name>
                    <value>{ALERT.SENDTO}</value>
                </parameter>
                <!-- <parameter>
                    <name>HTTPProxy</name>
                    <value></value>
                </parameter> -->
            </parameters>
            <script>
            try {
    var params = JSON.parse(value),
        req = new CurlHttpRequest(),
        fields = {},
        resp = '';

    //this is for when you have a proxy at your end    
    if (params.HTTPProxy) {
        req.SetProxy(params.HTTPProxy)
    }

    // Validating params
    if (isNaN(parseInt(params.eventid)) || params.eventid &lt; 1) {
        throw 'incorrect value for variable &quot;eventid&quot;. The value must be a positive number.';
    }
    if (params.eventname.length &lt; 1) {
        throw 'incorrect value for variable &quot;eventname&quot;. The value must be a non-empty string.';
    }
    if (params.hostname.length &lt; 1) {
        throw 'incorrect value for variable &quot;hostname&quot;. The value must be a non-empty string.';
    }
    if (isNaN(parseInt(params.severity)) || (params.severity &lt; 0 &amp;&amp; params.severity &gt; 5)) {
        throw 'incorrect value for variable &quot;severity&quot;. The value must be a number 0..5.';
    }
    if (isNaN(parseInt(params.triggerid)) || params.triggerid &lt; 1) {
        throw 'incorrect value for variable &quot;triggerid&quot;. The value must be a positive number.';
    }
    if (params.eventack != 'Yes' &amp;&amp; params.eventack != 'No') {
        throw 'incorrect value for variable &quot;eventack&quot;. The value must be Yes or No.';
    }
    if (isNaN(parseInt(params.eventupdate)) || (params.eventupdate &lt; 0 || params.eventupdate &gt; 1)) {
        throw 'incorrect value for variable &quot;eventupdate&quot;. The value must be 0 or 1.';
    }
    if (isNaN(parseInt(params.eventvalue)) || (params.eventvalue &lt; 0 || params.eventvalue &gt; 1)) {
        throw 'incorrect value for variable &quot;eventvalue&quot;. The value must be 0 or 1.';
    }
    if (params.squadcastwebhook.length &lt; 1) {
        throw 'incorrent value for variable &quot;squadcastwebhook&quot;. The value must be a non-empty string.';
    }

    var severityMapping = [
        'Not classified',
        'Information',
        'Warning',
        'Average',
        'High',
        'Disaster'
    ];

    req.AddHeader('Content-Type: application/json');

    fields.event_id = params.eventid;
    fields.event_nseverity = severityMapping[params.severity];
    fields.event_name = params.eventname;
    fields.trigger_description = params.triggerdesc;
    fields.event_opdata = params.eventopdata;
    fields.event_date = params.eventdate;
    fields.event_time = params.eventtime;
    fields.event_tags = params.eventtags;
    fields.host_ip = params.hostip;
    fields.host_name = params.hostname;
    fields.event_url = params.zabbixurl + '/tr_events.php?triggerid=' + params.triggerid + ' &amp;eventid=' + params.eventid;

    // if event is a "trigger" event
    if ((params.eventvalue == 1) &amp;&amp; (params.eventupdate == 0))
        fields.event_action = 'trigger';
    // if event is "acknowledge" event
    else if ((params.eventvalue == 1) &amp;&amp; (params.eventupdate == 1) &amp;&amp; (params.eventack == 'Yes'))
        return 'OK';
    // if event is "resolve" event
    else if (params.eventvalue == 0)
        fields.event_action = 'resolve';
    else
        throw 'incorrect values. Update message without ack will not be sent.';

    Zabbix.Log(4, '[Squadcast Webhook] Sending request:' + JSON.stringify(fields));
    Zabbix.Log(4, '[Squadcast Webhook] Webhook URL:' + params.squadcastwebhook);
    resp = req.Post(params.squadcastwebhook, JSON.stringify(fields));
    Zabbix.Log(4, '[Squadcast Webhook] Receiving response:' + resp);

    try {
        resp = JSON.parse(resp);
    } catch (error) {
        throw 'incorrect response. Squadcast returned a non-JSON object.';
    }
    if (req.Status() > 299) {
        throw resp;
    }

    return 'OK';
} catch (error) {
    Zabbix.Log(3, '[Squadcast Webhook] Notification failed : ' + error);
    throw 'Squadcast notification failed : ' + error;
}
            </script>
        </media_type>
    </media_types>
</zabbix_export>

(3) Click on Import button in the top right corner

(4) Choose the saved .xml file from your device and click on Import

(5) Verify if Squadcast Media Type was added successfully. Click on Media Types > Search for Squadcast > click on the result

You should be able to view the Parameters and Script, similar to the screenshot below

(6) Click on Script to verify that the Script has been added

(7) Now, you can add this Media Type to any User/s you want. Click on the Users tab under the Administration section from the sidebar

(8) Select User/s you want to add Squadcast Media Type to

(9) Navigate to Media tab, click on Add to enter the following details:

  • Type: Either pick Squadcast or add a name, such as Squadcast
  • Send to: Paste the copied Zabbix 5.0 Webhook URL from Squadcast
  • When active: Specify suitable values
  • Use if severity: Select appropriate checkboxes
  • Click on Add to save the Media for the User

(10) Make sure you click on Update button in the Media page to save these details

(11) Now navigate to Actions tab under Configurations section from the sidebar

(12) Click on Create Action at the top right corner. In the Action tab, give the action a meaningful name, such as Squadcast Notifications

(13) In the same page, switch to Operations tab and configure available options as per your requirements. Finally, click on Add to save it

That’s it, Your Zabbix 5.0 integration is now good to go! Whenever an alert is fired from Zabbix 5.0, an incident for the same will be created in Squadcast.