菜单
Grafana Cloud

Zabbix集成于Grafana OnCall

Zabbix是一个开源的监控软件工具,适用于多种IT组件,包括网络、服务器、虚拟机和云服务。Zabbix提供对网络利用率、CPU负载和磁盘空间消耗等指标的监控。

配置Zabbix集成于Grafana OnCall

此集成适用于Grafana Cloud OnCall。您必须在Grafana OnCall中拥有管理员角色才能创建集成。

  1. 集成选项卡中,点击+ 新集成以接收警报
  2. 从可用集成列表中选择Zabbix
  3. 按照如何连接窗口中的说明获取唯一的集成URL并查看下一步操作。

配置Zabbix服务器

  1. 如果您尚未设置Zabbix沙盒环境,请部署一个

    bash
     docker run --name zabbix-appliance -t \
          -p 10051:10051 \
          -p 80:80 \
          -d zabbix/zabbix-appliance:latest
  2. 建立到Zabbix服务器的SSH连接。

    bash
    docker exec -it zabbix-appliance bash
  3. grafana_oncall.sh脚本放置在Zabbix服务器配置文件(zabbix_server.conf)中指定的AlertScriptsPath目录。

    bash
    grep AlertScriptsPath /etc/zabbix/zabbix_server.conf

    注意:脚本必须由运行zabbix_server二进制文件(通常是“zabbix”)的用户在Zabbix服务器上可执行。例如,chmod +x grafana_oncall.sh

    bash
    ls -lh /usr/lib/zabbix/alertscripts/grafana_oncall.sh
    -rw-r--r--    1 root     root        1.5K Jun  6 07:52 /usr/lib/zabbix/alertscripts/grafana_oncall.sh

配置Zabbix警报

在Zabbix网页界面中,执行以下操作

  1. 在浏览器中打开localhost:80。

  2. 转到管理 > 媒体类型 > 创建媒体类型

  3. 创建以下字段的媒体类型。

    • 名称:Grafana OnCall
    • 类型:脚本
    • 脚本参数
      • {ALERT.SENDTO}
      • {ALERT.SUBJECT}
      • {ALERT.MESSAGE}

设置{ALERT.SEND_TO}值

要将警报发送到Grafana OnCall,必须在用户媒体配置中设置{ALERT.SEND_TO}值。

  1. 在Web界面中,导航到管理 > 用户并打开用户属性表单。

  2. 媒体选项卡中,点击添加并将Grafana OnCall的链接复制到发送到字段。

  3. 在最后一列点击测试,以将测试警报发送到Grafana OnCall。

  4. 在打开的测试窗口中,使用上一步骤中的唯一集成URL指定发送到OnCall。
    创建一个带有正文和可选主题的测试消息,然后点击测试

Zabbix通知的分组和自动解决

Grafana OnCall提供了Zabbix通知的分组和自动解决功能。使用以下步骤来配置分组和自动解决。

  1. 为分组区分提供标识符参数给Grafana OnCall。

  2. 将此变量附加到操作的标题中,格式为ONCALL_GROUP: ID,其中ID是Zabbix的任何。例如,{EVENT.ID}。Grafana OnCall脚本grafana_oncall.sh提取此事件并将alert_uid传递给Grafana OnCall。

  3. 要在Grafana Oncall内启用自动解决,需要在“恢复操作”中的“默认主题”字段中包含“已解决”关键字。

grafana_oncall.sh脚本

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 ONCALL_GROUP in the action subject
regex='ONCALL_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)

更多信息

有关Zabbix脚本的更多信息,请参阅通知脚本