🚀 Zabbix 企业级实战:自定义监控取值与值映射 (Value Mapping) 配置指南

导读:
在企业日常运维中,我们经常需要监控特定业务系统的运行状态。业务脚本通常返回离散的数字状态码(如 0、1、2),但纯数字在监控大盘中不够直观。
本文将通过一个真实的企业级实战案例,演示如何编写严谨的 Zabbix 自定义监控脚本,并通过 Zabbix Web 前端的值映射 (Value Mapping) 功能,将数字状态码转换为直观的文字描述(如“业务正常”、“业务宕机”)。


🛠️ 第一阶段:被监控端 (Zabbix Agent) 配置

1. 编写业务系统状态监控脚本

我们首先在被监控端编写一个健壮的 Shell 脚本,用于读取业务状态文件并输出对应的状态码。

创建并编辑脚本:

vi /etc/zabbix/scripts/check_biz_status.sh

脚本内容(包含严格的防御性容错机制):

#!/bin/bash
set -euo pipefail

# ==================== 脚本说明 ====================
# 功能:业务系统状态监控脚本(Zabbix自定义监控)
# 状态码定义(必须严格对应):
# 0 = 业务异常(非OK/WARN/文件异常/内容非法)
# 1 = 业务正常
# 2 = 业务降级/高负载/警告
# ================================================

# 固定配置
STATUS_FILE="/tmp/biz_status.txt"

# ==================== 1. 仅允许 root 和 zabbix 用户执行 ====================
current_user=$(id -un)
if [[ "${current_user}" != "zabbix" && "${current_user}" != "root" ]]; then
    echo "错误:仅允许 zabbix 和 root 用户执行此脚本" >&2
    exit 1
fi

# ==================== 2. 文件不存在:输出错误提示并退出 ====================
if [ ! -e "${STATUS_FILE}" ]; then
    echo "错误:状态文件 ${STATUS_FILE} 不存在" >&2
    exit 1
fi

# ==================== 3. 不是普通文件(如目录/软链接):报错退出 ====================
if [ ! -f "${STATUS_FILE}" ]; then
    echo "错误:${STATUS_FILE} 不是有效普通文件" >&2
    exit 1
fi

# ==================== 4. 读取并清洗内容 ====================
# 去空格 + 转大写(严格匹配)
STATE=$(sed -n '1p' "${STATUS_FILE}" | xargs | tr '[:lower:]' '[:upper:]')

# ==================== 5. 严格状态判断 ====================
case "${STATE}" in
    OK)
        echo "1"  # 业务正常
        ;;
    WARN)
        echo "2"  # 业务降级/警告
        ;;
    *)
        echo "0"  # 业务异常
        ;;
esac

exit 0

2. 赋予脚本执行权限及属主

为了确保 Zabbix Agent 进程有权限执行该脚本,需修改属主并赋予执行权限:

chmod +x /etc/zabbix/scripts/check_biz_status.sh
chown zabbix:zabbix /etc/zabbix/scripts/check_biz_status.sh

3. 本地模拟测试脚本捕获逻辑

在配置 Zabbix Agent 之前,先在本地模拟业务状态的变化,验证脚本逻辑是否符合预期:

# 测试异常状态 (DOWN)
[root@zabbix-agent scripts]# echo "DOWN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# /etc/zabbix/scripts/check_biz_status.sh
0

# 测试正常状态 (OK)
[root@zabbix-agent scripts]# echo "OK" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# /etc/zabbix/scripts/check_biz_status.sh
1

# 测试告警状态 (WARN)
[root@zabbix-agent scripts]# echo "WARN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# /etc/zabbix/scripts/check_biz_status.sh
2

(测试通过,脚本能够精准处理不同输入并转换为数字状态码。)

4. 配置 Zabbix Agent 自定义键值 (UserParameter)

在被监控端定义 Zabbix 的监控键值映射,将键值 biz.status 与我们编写的脚本绑定。

[root@zabbix-agent scripts]# cat /etc/zabbix/zabbix_agentd.d/userparameter_biz.conf
UserParameter=biz.status,/etc/zabbix/scripts/check_biz_status.sh

5. 重启服务并使用 Zabbix 工具验证

重启 Agent 生效配置,并使用自带的 zabbix_agentd -t 工具模拟服务端进行数据抓取测试:

[root@zabbix-agent scripts]# systemctl restart zabbix-agent

# 模拟 WARN 状态抓取
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|2]

# 模拟 OK 状态抓取
[root@zabbix-agent scripts]# echo "OK" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|1]

# 再次模拟 WARN 状态抓取
[root@zabbix-agent scripts]# echo "WARN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|2]

# 模拟 DOWN 状态抓取
[root@zabbix-agent scripts]# echo "DOWN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|0]

(看到 [t|X] 证明 Zabbix Agent 已经完美注册并能够返回数据。)


🖥️ 第二阶段:服务端 (Zabbix Web) 模板与值映射配置

💡 注意事项 (Zabbix 6.0+)
从 Zabbix 6.0 开始,“值映射”不再是全局配置,而是与主机 (Host)模板 (Template) 强绑定的。最佳实践是将其写在自定义模板中。

6.1 创建自定义模板并配置“值映射”

  1. 登录 Zabbix Web 前端,导航至 配置 (Configuration) -> 模板 (Templates/Applications),点击右上角 创建模板 (Create template)
    • 模板名称:Template_Biz_Status
    • 模板群组:选择 Templates
  2. 点击顶部的 值映射 (Value mapping) 标签页,点击 添加 (Add)
    • 名称:业务状态值映射
    • 映射规则配置如下:
      • 等于 1 ➔ 映射为:业务正常 (OK)
      • 等于 2 ➔ 映射为:业务降级/高负载 (WARN)
      • 等于 0 ➔ 映射为:业务异常/宕机 (DOWN)
  3. 点击 更新/添加 保存模板配置。

image

6.2 在模板中提前创建好值映射

image

6.3 创建监控项 (Item) 关联值映射

  1. 在刚刚创建的模板中,进入 监控项 (Items) 标签页,点击 创建监控项 (Create item)
  2. 填写以下核心参数:
    • 名称:业务系统运行状态
    • 类型:Zabbix 客户端(主动式) (或被动式,取决于你的 Agent 模式)
    • 键值biz.status (必须与 UserParameter 中定义的完全一致)
    • 信息类型:数字 (无符号)
    • 更新间隔3s (按需调整)
    • 值映射:下拉选择刚才创建的 业务状态值映射
  3. 保存监控项。

image

6.4 创建2条触发器,模拟的业务指标键值为0代表业务异常,业务指标键值为2代表业务告警,并且已经将值映射好状态

image

image

6.5 创建图形

image

6.6 将创建好的监控项模板Template_Biz_Status关联给主机,这样主机就拥有了这一块完整的监控项模板和触发器

image

6.7 配置告警媒介-以qq邮箱告警为例

1.新建qq邮箱告警媒介,配置好smtp服务端口、发件人邮箱、用户名和密码,其中注意的是密码是邮箱里面的授权码

image

image

2.测试qq邮箱是否能正常接收邮件

47eda17c24b85545bc92cceb9e40af99

67e04390df823afd80e5ad906ed70595

3.配置问题 以及 问题恢复发送的邮箱消息模板

【Zabbix告警】[{HOST.NAME}] {TRIGGER.NAME}

==================================================<br>
⚠️  ZABBIX 告警通知<br>
==================================================<br>
告警主机:{HOST.NAME} ({HOST.IP})<br>
告警时间:{EVENT.DATE} {EVENT.TIME}<br>
告警级别:{TRIGGER.SEVERITY}<br>
告警状态:{TRIGGER.STATUS}<br>
告警内容:{TRIGGER.NAME}<br>
问题监控项:{ITEM.NAME}<br>
问题键值:{ITEM.KEY}<br>
当前状态值:{ITEM.LASTVALUE}<br>
触发器URL:{TRIGGER.URL}<br>
==================================================<br>
请尽快处理问题!<br>
==================================================

image

【Zabbix恢复】[{HOST.NAME}] {TRIGGER.NAME} 已恢复

==================================================<br>
✅  ZABBIX 恢复通知<br>
==================================================<br>
恢复主机:{HOST.NAME} ({HOST.IP})<br>
恢复时间:{EVENT.DATE} {EVENT.TIME}<br>
恢复内容:{TRIGGER.NAME}<br>
问题监控项:{ITEM.NAME}<br>
恢复前状态值:{ITEM.LASTVALUE}<br>
==================================================<br>
问题已自动恢复,请确认业务状态!<br>
==================================================

image

4.配置zabbix管理用户告警媒介

这里配置的是「用户报警媒介」,它的作用是:
告诉 Zabbix:告警要发给谁(收件人邮箱)
用什么方式发(你选的qq邮箱媒介)
什么时候发(你设置的时间范围)
哪些级别的告警要发(你勾选的严重性)

image

image

6.8 配置触发器动作

image

image

image

6.9 模拟正常业务发生故障的完整流程

1.模拟监控指标发生异常

[root@zabbix-agent scripts]# echo "WARN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# 
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|2]

[root@zabbix-agent scripts]# echo "DOWN" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# 
[root@zabbix-agent scripts]# 
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|0]

2.zabbix页面监控告警通知

image

3.qq邮箱查看是否已经接收到业务异常告警通知

image

image

4.模拟业务系统恢复正常

[root@zabbix-agent scripts]# echo "OK" > /tmp/biz_status.txt
[root@zabbix-agent scripts]# 
[root@zabbix-agent scripts]# zabbix_agentd -t biz.status
biz.status                                    [t|1]

zabbix界面没有告警事件

image

qq邮箱有业务恢复正常的告警通知

image

image

posted on 2026-05-16 14:46  LeeHang  阅读(22)  评论(0)    收藏  举报