zabbix版本:4.0
系统版本:CentOS 6.8
一、添加Media Types
zabbix通常的默认告警媒介有 Email,Jabber, SMS三种
这里我们添加自定义脚本来告警,点击右上角的“Create media type“,进入如下图
Name:显示的媒介名称,这里我们使用Telegram告警
Script name:告警脚本的名称。注意该脚本需要放在配置文件zabbix_server.conf所指定AlertScriptsPath目录下。
Script parameters:传递给alert.sh脚本的参数,可以有多个。由官方文档可知,默认支持的三个告警参数{ALERT.SENDTO}, {ALERT.SUBJECT} 和{ALERT.MESSAGE}。这三个宏变量的代表什么,后面我会提到。
二、添加Users
这里我们使用默认的Admin账 ,你也可以根据需要创建其他用户来关联警 媒介。
这里点击 Admin用户名之后,再选择Media,点击Add。
弹出如下界面
Tpye : 下拉菜单选择刚才新建的Telegram
Send to :这里填的名字,就对应上面的{ALERT.SENDTO}宏变量。
其他默认。
三、添加Actions
要想发送警 消息到媒介,还得添加actions,这里我们针对某一个特定的触发器来添加警 消息,下拉菜单选择 Trigers,点击”Create action“。
然后在 Action标签下,
Name:设置一个方便记忆的名称
New condition:第一个下拉菜单选择Trigger,第二个默认 equals,第三项进一步选择,找到我要做测试的触发器”check port 5000 failed“。
然后再Operations标签下面,点击NEW添加新的Operations。
Send to Users: 点击add,添加Admin用户。
Send only to : 选择 Telegram。
Default Message: 可以去掉勾,进一步修改,这里我们使用默认内容。
Conditions:点击NEW,添加默认的就好。
最后点击Opertaion details 下面 那个add。
添加成功后,就多了一条Operations。
后面的第2和第3个操作,分别代表触发事件恢复时的动作和更新时的动作,也就是在恢复和更新时,也要发送消息的。我们平时一般就配置了第一个事件触发的动作就可以了。这里为了测试,我都配置了。
注意这里的Default Subject 和 Default message,分别对应前面的两个{ALERT.SUBJECT} 和{ALERT.MESSAGE}宏变量。
添加action后如上图,
此时我们回去查看警 媒介时,Telegram 的Used in actions里多个我们添加的Test Port Check。
web端的配置已经完成。
四、注册telegram机器人
前提条件
已经注册 Telegram 账 ;
账 最好绑定一个国外手机 (非必要条件),比如 Google Voice,这样与其他用户发送消息不受限制;
注册一个机器人(Bot)
注册过程很简单,在 telegram 中添加一个“机器人之父”的账 ,便是 @BotFather 这个账 :
- 打开与 @BotFather 的对话框
- 发送/start
- 发送/newbot
- 发送 Bot 的名字(昵称)
- 指定 Bot 的用户名(ID)
- 得到 Bot 的 token,用于标识这个 Bot (后面要用到的Token)
- 完成
详细见附录:机器人创建示例.
创建一个 Telegram 群组/频道
一般将机器人用于在群组/频道内自动推送消息或者回答问题,需要在 Telegram 软件内创建一个群组或者频道,移动端/PC/WEB端均可操作,设定群组/频道的唯一ID,例如 @ABC。
ChatID是群组的ID,官 说使用 @ABC字符串也行,但是我实际使用不行,还得去获得整数型的ID。
通过api https://api.telegram.org/bot“你的token”/getUpdates 可以返回 群组的id。
现在我们来看看alert.sh脚本
Token:就是前面注册时得到的。
CahtID:就是群组ID。
五、原理
zabbix server在警 发生时,由于第一部分,我们在告警媒介里面只添加了{ALERT.MESSAGE},因此zabbix server 只传递告警的主体消息给alert.sh脚本,脚本在将消息发送给telegram-bot(telegram机器人),telegram-bot在发送消息到telegram的群里(一般telegram机器人只能发送给群)。
六、模拟测试
我们这里测试的触发器是监控服务器上的5000端口,所以我们人为开启和关闭5000端口。
进入故障详情查看如下
teletram搜到的消息为,分别是故障发生和恢复时,
如果我们把上面警告媒介里宏变量更改为{ALERT.SENDTO},则收到的消息为
如果我们把上面警告媒介里宏变量更改为{ALERT.SUBJECT},则故障恢复时的消息如下
到此,我们的所有配置就算成功了。
七、附录:
机器人创建示例:
1.搜索到机器人@BotFather之后
2.你回复 /start
3.回复 /newbot
4.回复你需要的一个bot名字,如 MyTeleBot
5.再次确认 ,MyTeleBot
6.接下来建立一个群,在群里添加成员 @MyTeleBot ,之后的消息就会由MyTeleBot发送在这个群里。
参考文档:
Zabbix Documentation 4.0 之 自定义警 提示
https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/media/script
使用 Telegram 机器人发送消息
http://slowread.net/blog/使用-telegram-机器人发送消息/
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!