# Zabbix 5.0

[<mark style="color:blue;">Zabbix 5.0</mark>](https://www.zabbix.com/whats_new_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. Navigate to **Services** -> **Service Overview** -> select or search for your Service. Expand the accordion -> In the Alert Sources section, click **Add**.

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-4fbd74e7ca0b30173c47a1d58ed6a0804a0465aa%2FAlert_Sources.png?alt=media\&token=aaca6610-9d18-4dd4-9cf5-320042f326f1)

2\. Select **Zabbix 5.0.** Copy the displayed **Webhook URL** to [configure](#in-zabbix-5.0-create-a-squadcast-webhook) it within **Zabbix 5.0.** Finish by clicking **Add Alert Source** -> **Done.**

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-d3f534fd4bdde293ab241f627faf43e362b7afaf%2FZabbix%205.0.png?alt=media)

{% hint style="warning" %}
**Important:**

When an alert source turns Active, it’ll show up under Configured Alert Sources, you can either generate a test alert from the integration or wait for a real-time alert to be generated by the Alert Source. An Alert Source is active if there is a recorded incident via that Alert Source for the Service.
{% endhint %}

#### In Zabbix 5.0: Create a Squadcast Webhook

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-392fed9732e2ff014f4ee76a0d5a4436de8592d8%2Fzabbix-5_2.png?alt=media\&token=9d76bf59-d1c9-418b-8e29-3dc002169e73)

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

```xml
<?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>
```

{% hint style="info" %}
**Note**

If you use a proxy at your end:

* Uncomment lines 74 through 77 and add your proxy URL inside the value tag and you are good to go.
  {% endhint %}

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-4fafeecac86465958b7bd4a6810679bf8454d798%2Fzabbix-5_3.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-7a996f091a1b084d715fdb9f32e43245182b952e%2Fzabbix-5_4.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-0bedf0d0d7c51e7934a47bffed2b1e975c3cb3a8%2Fzabbix-5_5.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-ce3c7db9db3c18199dd9fd683d358090e2b7b1bb%2Fzabbix-5_6.png?alt=media)

{% hint style="info" %}
**Note**

HTTPProxy parameter and value will be listed here if you uncommented the same in the script previously.
{% endhint %}

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-7a2b6aa2329b3860e04bfccea1911978ee4d7c93%2Fzabbix-5_7.png?alt=media)

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-012723f1c2f9ea16493af25d49f4c935162e882a%2Fzabbix-5_8.png?alt=media)

**(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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-469749bcbcd170fcc12597a2138a34341a2794ea%2Fzabbix-5_9.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-801087893bbdc1f73b6cc4f0ab6a6dde01c8e8ae%2Fzabbix-5_10.png?alt=media)

**(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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-c48c1aac147c79ce8dfa86a2ce095e38c3d75517%2Fzabbix-5_11.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-e7a133cbdf6b127e7e15443d979f6cb06067b2e8%2Fzabbix-5_12.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-be0cfd7e71141c6c8ffbaf2c0d6aaab9d4738d61%2Fzabbix-5_13.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-19a3babb26b8e9d686ee7c295daf3d00ff7d1caa%2Fzabbix-5_14.png?alt=media)

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

![](https://1574591692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8TaWz01jmUJl58p4ZVel%2Fuploads%2Fgit-blob-5822870bcbf7d13c2493f2a1910137a1e2cfbed2%2Fzabbix-5_15.png?alt=media)

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.

{% hint style="info" %}
**FAQ:**

Q: If an alert gets resolved in Zabbix 5.0, does Zabbix 5.0 send auto-resolve signals to Squadcast?

A: Yes, Zabbix 5.0 sends alert auto-resolve signals to Squadcast, thus supporting the auto-resolution of incidents in Squadcast.
{% endhint %}

*Have any other questions?* [*Ask the community*](https://community.squadcast.com/view/home)*.*
