---
title: "Zabbix integration for Grafana IRM | Grafana Cloud documentation"
description: "Configure Zabbix integration for Grafana IRM to receive infrastructure monitoring alerts"
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# Zabbix integration for Grafana IRM

Zabbix is an open-source monitoring software tool for diverse IT components, including networks, servers, virtual machines, and cloud services. Zabbix provides monitoring for metrics such as network utilization, CPU load, and disk space consumption.

## Configure Zabbix integration for Grafana IRM

1. In Grafana IRM, navigate to **IRM &gt; Integrations &gt; Monitoring Systems**
2. Click **+ New integration**
3. Select **Zabbix** from the list of available integrations
4. Enter a name and description for the integration, click **Create**
5. A new page will open with the integration details. Copy the **IRM Integration URL** from **HTTP Endpoint** section

## Configure the Zabbix server

1. Deploy a Zabbix playground if you don’t have one set up:
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
    docker run --name zabbix-appliance -t \
         -p 10051:10051 \
         -p 80:80 \
         -d zabbix/zabbix-appliance:latest
   ```
2. Establish an ssh connection to a Zabbix server.
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   docker exec -it zabbix-appliance bash
   ```
3. Place the [grafana\_irm.sh](#grafana_irmsh-script) script in the `AlertScriptsPath` directory specified within the Zabbix server configuration file (zabbix\_server.conf).
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
   ```
   
   > Note
   > 
   > The script must be executable by the user running the zabbix\_server binary (usually “zabbix”) on the Zabbix server. For example, `chmod +x grafana_irm.sh`
   
   Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```bash
   ls -lh /usr/lib/zabbix/alertscripts/grafana_irm.sh
   -rw-r--r--    1 root     root        1.5K Jun  6 07:52 /usr/lib/zabbix/alertscripts/grafana_irm.sh
   ```

## Configure Zabbix alerts

Within Zabbix web interface, do the following:

1. In a browser, open localhost:80
2. Navigate to **Adminitstration &gt; Media Types &gt; Create Media Type**
3. Create a Media Type with the following fields
   
   - Name: Grafana IRM
   - Type: script
   - Script parameters:
     
     - {ALERT.SENDTO}
     - {ALERT.SUBJECT}
     - {ALERT.MESSAGE}

### Set the {ALERT.SEND\_TO} value

To send alerts to Grafana IRM, the {ALERT.SEND\_TO} value must be set in the [user media configuration](https://www.zabbix.com/documentation/3.4/manual/config/notifications/media/script#user_media).

1. In the web UI, navigate to **Administration &gt; Users** and open the **user properties** form
2. In the **Media** tab, click **Add** and copy the link from Grafana IRM in the `Send to` field
3. Click **Test** in the last column to send a test alert to Grafana IRM
4. Specify **Send to** IRM using the unique integration URL from the above step in the testing window that opens
5. Create a test message with a body and optional subject and click **Test**

## Grouping and auto-resolve of Zabbix notifications

Grafana IRM provides grouping and auto-resolve of Zabbix notifications. Use the following procedure to configure grouping and auto-resolve.

1. Provide a parameter as an identifier for group differentiation to Grafana IRM
2. Append that variable to the subject of the action as `IRM_GROUP: ID`, where `ID` is any of the Zabbix [macros](https://www.zabbix.com/documentation/4.2/manual/appendix/macros/supported_by_location) For example, `{EVENT.ID}`. The Grafana IRM script [grafana\_irm.sh](#grafana_irmsh-script) extracts this event and passes the `alert_uid` to Grafana IRM
3. To enable auto-resolve within Grafana IRM, the “Resolved” keyword is required in the **Default subject** field in **Recovered operations**

## grafana\_irm.sh script

Bash ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```bash
#!/bin/bash
# This is the modification of original ericos's shell script.

# Get the url ($1), subject ($2), and message ($3)
url="$1"
subject="${2//$'\r\n'/'\n'}"
message="${3//$'\r\n'/'\n'}"

# Alert state depending on the subject indicating whether it is a trigger going in to problem state or recovering
recoversub='^RECOVER(Y|ED)?$|^OK$|^Resolved.*'

if [[ "$subject" =~ $recoversub ]]; then
    state='ok'
else
    state='alerting'
fi

payload='{
    "title": "'${subject}'",
    "state": "'${state}'",
    "message": "'${message}'"
}'

# Alert group identifier from the subject of action. Grouping will not work without IRM_GROUP in the action subject
regex='IRM_GROUP: ([a-zA-Z0-9_\"]*)'
if [[ "$subject" =~ $regex ]]; then
    alert_uid=${BASH_REMATCH[1]}
    payload='{
        "alert_uid": "'${alert_uid}'",
        "title": "'${subject}'",
        "state": "'${state}'",
        "message": "'${message}'"
    }'
fi

return=$(curl $url -d "${payload}" -H "Content-Type: application/json" -X POST)
```

## Related topics

- [Grafana IRM integrations overview](/docs/grafana-cloud/alerting-and-irm/irm/integrations/alert-sources)
- [Alert escalation and routing](/docs/grafana-cloud/alerting-and-irm/irm/escalation-and-routing)
- [Zabbix documentation](https://www.zabbix.com/documentation/current/)
