模板学堂丨Zabbix监控告警大屏

发布于 2022年11月01日

DataEase开源数据可视化分析平台模板市场(https://dataease.io/templates/)于2022年6月正式发布。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并在优质模板的基础上轻松制作自己的仪表板。

10月上新模板

DataEase模板市场定期进行模板上新,10月共上新8个模板,涉及通讯、零售、公有云、管理运维、电子银行、云服务等主题,应用软件大屏模板新增Zabbix监控告警大屏,欢迎大家在DataEase模板市场下载使用。

10月精选模板

本月为大家推荐的精选模板是Zabbix监控告警大屏。Zabbix是一个优秀的开源项目,它基于Web界面提供分布式系统监视以及网络监视的企业级解决方案。Zabbix能够监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制,以便于系统管理员快速定位并解决存在的各种问题。

1. 大屏信息

■ 产品版本号:Zabbix基于v5.4.0版本,DataEase开源数据可视化分析平台基于v1.15版本。

■ 此次共统计15项指标,各指标项具情况体如下:

2. 大屏展示

模板应用

接下来,为大家详细讲解如何应用Zabbix监控告警大屏。

1. 使用模板创建仪表板

1.1 内置模板市场

如果您使用的DataEase为v1.13.0及以上的版本,并且DataEase可直接访问到模板市场地址(
https://dataease.io/templates/),可通过内嵌的“模块市场”在线应用模板。

为仪表板命名并选择放置的目录。

添加成功后即会自动进入到该新建仪表板的编辑界面。

1.2 在线模板市场

您也可以访问DataEase模板市场主页,找到Zabbix监控告警大屏。模板市场地址为:
https://dataease.io/templates/。如需快速检索,可进行关键字搜索或分类切换,可以快速找到想要的大屏模板。

点击“Zabbix监控告警大屏”仪表板模板进入详情界面。点击“下载”按钮后可将模板下载至本地。

进入自己的DataEase系统的“仪表板”模块中,通过下图所示以“导入模板”的方式新建仪表板,点击“上传模板”按钮,选择使用“模板市场”下载的Zabbix监控告警大屏的模板文件。

导入成功后即可看到下图所示的大屏。

2. 准备数据

当前数据为模板示例数据,需要进一步将数据来源替换为自己环境的Zabbix数据库,从而展示真实的实时数据。

2.1 新建数据源

首先新建数据源,配置Zabbix数据库的真实信息,搭建DataEase与Zabbix服务器之间的数据连接。

2.2 添加相关的数据集

分别创建我们本次演示中需要用到的各类数据集。如果需要展示一些非模板所展示的内容,也可以根据自己需要创建对应的数据集。

2.2.1 创建数据库数据集

主机组数量、主机数量、可监控主机、不可监控主机、未知监控主机等数据,直接根据数据库数据集制作。

2.2.2 创建SQL数据集,在创建时需要选择对应的类型

本次用到以下SQL语句,分别以SQL数据集类型创建好即可。

■ 告警类别数量统计数据集

数据集说明:展示的数据是通过对Zabbix中问题的告警严重性级别进行统计分析,筛选出无恢复动作、主机状态为可用、监控项可用的问题。

SELECT
    COUNT(p.severity) count,
    p.severity,
    (
        CASE p.severity
        WHEN '0' THEN
            '未定义'
        WHEN '1' THEN
            '信息'
        WHEN '2' THEN
            '警告'
        WHEN '3' THEN
            '一般严重'
        WHEN '4' THEN
            '严重'
        WHEN p.severity = '5' THEN
            '灾难'
        ELSE
            '未知'
        END
    ) severityName
FROM
    problem p
LEFT JOIN (
    SELECT
        s1.triggerid,
        (
            SELECT
                s2.itemid
            FROM
                functions s2
            WHERE
                s2.triggerid = s1.triggerid
            LIMIT 1
        ) itemid
    FROM
        functions s1
    GROUP BY
        s1.triggerid
) f ON f.triggerid = p.objectid
LEFT JOIN `items` i ON i.itemid = f.itemid
LEFT JOIN `hosts` h ON h.hostid = i.hostid
LEFT JOIN `interface` inf ON inf.hostid = h.hostid
WHERE
    ISNULL(p.r_eventid)
AND h. STATUS = 0
AND i.`status` = 0
GROUP BY
    p.severity
ORDER BY
    p.severity ASC

■ 告警详情数据集

数据集说明:展示数据是在Zabbix的问题列表中,筛选了无恢复时间、主机状态为可用、监控项可用的问题,如需筛选待处理的问题加上条件:p.acknowledged=1。

SELECT
    p.eventid,
    FROM_UNIXTIME(p.clock) time,
    p.clock,
    p. NAME pname,
    p.acknowledged,
    p.severity,
    (
        CASE p.severity
        WHEN '0' THEN
            '未定义'
        WHEN '1' THEN
            '信息'
        WHEN '2' THEN
            '警告'
        WHEN '3' THEN
            '一般严重'
        WHEN '4' THEN
            '严重'
        WHEN p.severity = '5' THEN
            '灾难'
        ELSE
            '未知'
        END
    ) severityName,
    p.objectid,
    i.`status`,
    i.key_,
    f.itemid,
    h. HOST,
    h. NAME,
    concat(inf.ip, ":", inf. PORT) ip,
    inf. PORT
FROM
    problem p
LEFT JOIN (
    SELECT
        s1.triggerid,
        (
            SELECT
                s2.itemid
            FROM
                functions s2
            WHERE
                s2.triggerid = s1.triggerid
            LIMIT 1
        ) itemid
    FROM
        functions s1
    GROUP BY
        s1.triggerid
) f ON f.triggerid = p.objectid
LEFT JOIN `items` i ON i.itemid = f.itemid
LEFT JOIN `hosts` h ON h.hostid = i.hostid
LEFT JOIN `interface` inf ON inf.hostid = h.hostid
WHERE
    ISNULL(p.r_eventid)
AND h. STATUS = 0
AND i.`status` = 0
ORDER BY
    clock DESC 

■ 告警主机组数据集

数据集说明:展示数据是Zabbix问题中出现过的主机组,如需筛选待处理的问题主机组加上条件:p.acknowledged=1。

SELECT
    count(DISTINCT h.hostid) problemNum,
    (
        SELECT
            COUNT(hg.hostid)
        FROM
            hosts_groups hg
        WHERE
            hg.groupid = hs.groupid
    ) total,
    (
        SELECT
            COUNT(hg.hostid)
        FROM
            hosts_groups hg
        WHERE
            hg.groupid = hs.groupid
    ) - count(DISTINCT h.hostid) normal,
    hs. NAME
FROM
    problem p
LEFT JOIN (
    SELECT
        s1.triggerid,
        (
            SELECT
                s2.itemid
            FROM
                functions s2
            WHERE
                s2.triggerid = s1.triggerid
            LIMIT 1
        ) itemid
    FROM
        functions s1
    GROUP BY
        s1.triggerid
) f ON f.triggerid = p.objectid
LEFT JOIN `items` i ON i.itemid = f.itemid
LEFT JOIN `hosts` h ON h.hostid = i.hostid
LEFT JOIN hosts_groups hg ON hg.hostid = h.hostid
LEFT JOIN hstgrp hs ON hs.groupid = hg.groupid
WHERE
    ISNULL(p.r_eventid)
AND h. STATUS = 0
AND i.`status` = 0
GROUP BY
    hs. NAME,
    hs.groupid
ORDER BY
    NAME

■ 问题主机数据集

数据集说明:展示数据是Zabbix问题中出现过的主机,如需筛选待处理的问题主机加上条件:p.acknowledged=1。

SELECT
    COUNT(h. NAME) count,
    h. NAME
FROM
    problem p
LEFT JOIN (
    SELECT
        s1.triggerid,
        (
            SELECT
                s2.itemid
            FROM
                functions s2
            WHERE
                s2.triggerid = s1.triggerid
            LIMIT 1
        ) itemid
    FROM
        functions s1
    GROUP BY
        s1.triggerid
) f ON f.triggerid = p.objectid
LEFT JOIN `items` i ON i.itemid = f.itemid
LEFT JOIN `hosts` h ON h.hostid = i.hostid
WHERE
    ISNULL(p.r_eventid)
AND h. STATUS = 0
AND i.`status` = 0
GROUP BY
    h. NAME
ORDER BY
    count DESC

■ 主机状态数量统计数据集

数据集说明:展示数据是主机状态的统计数据。

SELECT
    available,
    (
        CASE available
        WHEN '0' THEN
            '可用'
        WHEN '1' THEN
            '不可用'
        WHEN '2' THEN
            '未知'
        ELSE
            '未知'
        END
    ) 主机状态,
    count(available) 主机数量
FROM
    `hosts`
WHERE
    `status` = '0'
AND `flags` = '0'
GROUP BY
    `available`

3. 替换数据

重新进入已导入的仪表板中,进入编辑界面,分别对各个视图的数据集进行替换,即会展示各个视图所用到的数据集及其维度与指标字段。正常情况下,数据集字段一致,替换为自己的数据集后视图会自动匹配字段进来,无需再进行维度与指标字段的配置。

■ 注意事项:维度/指标字段提示错误

由于在模板设计阶段字段的命名可能与原数据集不同,维度或者指标会出现红色感叹号的情况。大家可以将红框指标删除,把左边的对应字段重新直接拖入原有位置即可。

4. 最终效果

完成上述步骤后,属于自己的Zabbix告警监控大屏就完成了。如果您有个性化的需求,样式和展示内容还可以根据需要进行相应调整。