zabbix 通过 telegram-bot 发送告警信息

zabbix版本:4.0

系统版本:CentOS 6.8

一、添加Media Types

zabbix通常的默认告警媒介有 Email,Jabber, SMS三种 

zabbix 通过 telegram-bot 发送告警信息

这里我们添加自定义脚本来告警,点击右上角的“Create media type“,进入如下图

Name:显示的媒介名称,这里我们使用Telegram告警

Script name:告警脚本的名称。注意该脚本需要放在配置文件zabbix_server.conf所指定AlertScriptsPath目录下。

Script parameters:传递给alert.sh脚本的参数,可以有多个。由官方文档可知,默认支持的三个告警参数{ALERT.SENDTO}, {ALERT.SUBJECT} 和{ALERT.MESSAGE}。这三个宏变量的代表什么,后面我会提到。

zabbix 通过 telegram-bot 发送告警信息

二、添加Users

zabbix 通过 telegram-bot 发送告警信息

这里我们使用默认的Admin账号,你也可以根据需要创建其他用户来关联警报媒介。

这里点击 Admin用户名之后,再选择Media,点击Add。

zabbix 通过 telegram-bot 发送告警信息

弹出如下界面

Tpye : 下拉菜单选择刚才新建的Telegram

Send to :这里填的名字,就对应上面的{ALERT.SENDTO}宏变量。

其他默认。

zabbix 通过 telegram-bot 发送告警信息

三、添加Actions

要想发送警报消息到媒介,还得添加actions,这里我们针对某一个特定的触发器来添加警报消息,下拉菜单选择 Trigers,点击”Create action“。

zabbix 通过 telegram-bot 发送告警信息

然后在 Action标签下,

zabbix 通过 telegram-bot 发送告警信息

Name:设置一个方便记忆的名称

New condition:第一个下拉菜单选择Trigger,第二个默认 equals,第三项进一步选择,找到我要做测试的触发器”check port 5000 failed“。

zabbix 通过 telegram-bot 发送告警信息

然后再Operations标签下面,点击NEW添加新的Operations。

zabbix 通过 telegram-bot 发送告警信息
 

zabbix 通过 telegram-bot 发送告警信息

Send to Users: 点击add,添加Admin用户。

Send only to : 选择 Telegram。

Default Message: 可以去掉勾,进一步修改,这里我们使用默认内容。

Conditions:点击NEW,添加默认的就好。

zabbix 通过 telegram-bot 发送告警信息

最后点击Opertaion details 下面 那个add。

zabbix 通过 telegram-bot 发送告警信息

添加成功后,就多了一条Operations。

zabbix 通过 telegram-bot 发送告警信息

后面的第2和第3个操作,分别代表触发事件恢复时的动作和更新时的动作,也就是在恢复和更新时,也要发送消息的。我们平时一般就配置了第一个事件触发的动作就可以了。这里为了测试,我都配置了。

注意这里的Default Subject 和 Default message,分别对应前面的两个{ALERT.SUBJECT} 和{ALERT.MESSAGE}宏变量。

zabbix 通过 telegram-bot 发送告警信息

添加action后如上图,

此时我们回去查看警报媒介时,Telegram 的Used in actions里多个我们添加的Test Port Check。

zabbix 通过 telegram-bot 发送告警信息

web端的配置已经完成。

四、注册telegram机器人

前提条件

已经注册 Telegram 账号;
账号最好绑定一个国外手机号(非必要条件),比如 Google Voice,这样与其他用户发送消息不受限制;

注册一个机器人(Bot)

注册过程很简单,在 telegram 中添加一个“机器人之父”的账号,便是 @BotFather 这个账号:

zabbix 通过 telegram-bot 发送告警信息
  1. 打开与 @BotFather 的对话框
  2. 发送/start
  3. 发送/newbot
  4. 发送 Bot 的名字(昵称)
  5. 指定 Bot 的用户名(ID)
  6. 得到 Bot 的 token,用于标识这个 Bot (后面要用到的Token)
  7. 完成

详细见附录:机器人创建示例.

创建一个 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端口。

进入故障详情查看如下

 

zabbix 通过 telegram-bot 发送告警信息

teletram搜到的消息为,分别是故障发生和恢复时,

zabbix 通过 telegram-bot 发送告警信息

如果我们把上面警告媒介里宏变量更改为{ALERT.SENDTO},则收到的消息为

zabbix 通过 telegram-bot 发送告警信息

如果我们把上面警告媒介里宏变量更改为{ALERT.SUBJECT},则故障恢复时的消息如下

zabbix 通过 telegram-bot 发送告警信息

到此,我们的所有配置就算成功了。

七、附录:

机器人创建示例:

1.搜索到机器人@BotFather之后

zabbix 通过 telegram-bot 发送告警信息

2.你回复 /start

zabbix 通过 telegram-bot 发送告警信息

3.回复 /newbot

zabbix 通过 telegram-bot 发送告警信息

4.回复你需要的一个bot名字,如 MyTeleBot

zabbix 通过 telegram-bot 发送告警信息

5.再次确认 ,MyTeleBot

zabbix 通过 telegram-bot 发送告警信息

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-机器人发送消息/

来源:庚庚911

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月13日
下一篇 2019年7月13日

相关推荐