结论:Zabbix 接入 TG 报警的核心步骤
Zabbix 本身不内置 TG 通知,但可通过「自定义报警媒介脚本 + TG 机器人 API」实现。整体流程为:创建 TG 机器人并获取 Token → 获取目标聊天(用户或群组)的 Chat ID → 在 Zabbix 服务器上编写发送脚本 → 配置报警媒介类型与用户媒介 → 绑定触发器动作。下面分步说明。
第一步:创建 TG 机器人并获取 Token
在 TG 客户端中搜索 @BotFather,发送 /newbot,按提示设置机器人名称和用户名(用户名需以 bot 结尾)。创建成功后,BotFather 会返回一串 Token,格式类似 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ。请妥善保存,该 Token 是脚本调用发送消息接口的凭证。
注意事项
- Token 泄露可能导致机器人被他人控制,建议仅在 Zabbix 服务器本地保存。
- 若机器人需向群组发送消息,请先将机器人拉入群组,并授予发送消息权限。
第二步:获取 Chat ID
Chat ID 是消息接收方的唯一标识。获取方法:
- 与机器人私聊:先向机器人发送任意消息(如
/start),然后在浏览器访问https://api.telegram.org/bot<Token>/getUpdates,在返回的 JSON 中找到chat.id字段。 - 群组:将机器人拉入群组后,在群内发送一条消息,同样通过 getUpdates 获取群组 Chat ID(通常为负数,如
-1001234567890)。
注意:若机器人开启了隐私模式,群组消息可能不会出现在 getUpdates 中,需在 BotFather 中使用 /setprivacy 关闭隐私模式,或临时将机器人设为管理员。
第三步:编写 Zabbix 报警脚本
在 Zabbix 服务器的 AlertScriptsPath 目录(通常为 /usr/lib/zabbix/alertscripts)下创建脚本,例如 tg_alert.sh。脚本内容需接收三个参数:收件人(Chat ID)、主题、消息正文。以下为 Shell 示例:
#!/bin/bash
CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"
TOKEN="你的机器人Token"
URL="https://api.telegram.org/bot$TOKEN/sendMessage"
curl -s -X POST "$URL" -d chat_id="$CHAT_ID" -d text="$SUBJECT%0A$MESSAGE" -d parse_mode="HTML" >/dev/null 2>&1
保存后赋予执行权限:chmod +x tg_alert.sh。请确保 Zabbix 用户(通常为 zabbix)对该脚本有执行权限,且服务器可访问 api.telegram.org。
消息格式建议
使用 parse_mode=HTML 或 Markdown 可增强可读性。例如在消息中加粗主机名、使用换行分隔告警内容。但需注意特殊字符转义,避免消息发送失败。
第四步:配置 Zabbix 报警媒介与用户
- 登录 Zabbix 前端,进入「管理」→「报警媒介类型」→「创建媒介类型」。
- 名称填写「TG 报警」,类型选择「脚本」,脚本名称填写
tg_alert.sh。 - 添加三个参数,顺序为:
{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}。 - 进入「管理」→「用户」→ 选择接收报警的用户 →「报警媒介」→「添加」,类型选择「TG 报警」,收件人填写 Chat ID。
- 在「动作」中配置触发器条件,并在操作细节中指定发送至该用户媒介。
常见问题与排查
1. 脚本执行失败或无消息
- 检查脚本路径与权限:确保脚本位于 AlertScriptsPath 目录,且 zabbix 用户可执行。
- 手动测试脚本:
./tg_alert.sh <ChatID> "测试主题" "测试内容",观察 curl 返回。 - 检查网络:Zabbix 服务器需能访问 api.telegram.org,若被墙可考虑使用反向代理(需自建,注意合规)。
2. 消息发送成功但收不到
- 确认 Chat ID 正确,尤其是群组 ID 为负数。
- 检查机器人是否被用户屏蔽或群组限制。
- 若使用 HTML 模式,检查消息中是否包含未转义的
<或>。
3. 报警内容乱码或截断
- TG 单条消息长度限制为 4096 字符,超长内容需拆分或精简。
- Shell 脚本中注意引号与特殊字符转义,建议使用
--data-urlencode替代-d避免编码问题。
安全与合规提醒
请勿将机器人 Token 硬编码在公开仓库中;建议通过环境变量或配置文件读取。同时,TG 消息内容可能包含服务器敏感信息,请确保 Chat ID 对应的接收方可信。若企业环境有网络限制,请遵守当地法律法规与公司政策。
总结
通过自定义脚本对接 TG 机器人 API,Zabbix 可以获得低延迟、跨平台的报警推送能力。关键点在于正确获取 Chat ID、确保脚本可执行且网络可达,以及合理设计消息模板。按照上述步骤操作后,建议先发送测试报警验证链路,再逐步应用到生产环境。