Zabbix的部署可参考Zabbix官方文档。https://www.zabbix.com/documentation/3.4/zh/manual/installation/install
Zabbix,Nagios等监控软件在运维方面越来越受青睐,因为能够准时,及时的将服务器产生的故障信息,发送给运维人员,以便运维人员能够及时的解决问题。但是近来,越来越多的公司就偏向了的zabbix阵营,当然选择这东西,因人而异。
编者在学习了Python一段时间后,发现Zabbix Api可以利用脚本的形式实现Zabbix自动监控,所以编者在兴趣驱使下,在查阅了相关的资料后,就开始使用自己的云服务器进行实验。
所以本文介绍的就是如何使用Python,Zabbix Api,钉钉机器人,来实现自动化监控。
既然是钉钉机器人,那么在开始实现的zabbix自动化监控之前,肯定是先有钉钉添加机器人才能实现。
首先,我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人:
到这里,钉钉机器人已经创建成功,在这里需要着重强调是,一定一定要将网络挂接的阿比接口保存。我们在编写脚本时,需要用到接口信息。
接下来就是编写我们的钉钉机器人脚本,需要注意的是,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找
#!/usr/bin/python
# -*- conding:utf8-*-
# Author Scong
import requests
import json
import sys
import os
url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxx" # 这里的url就是webhook的Api接口
headers = {'Content-Type': 'application/json;charset=utf-8'} # 头部信息,Zabbix官方文档写法,可以查看zabbix官方文档
def message(text): # 定义信息函数
text_info= { # 编写规则可以查看Zabbix官方文档的Zabbix Api
"msgtype": "text",
"at": {
"atMobiles": [
"132xxxxx672"
],
"isAtAll": False
},
"text": {
"content": text
}
}
print requests.post(url,json.dumps(text_info),headers=headers).content # 将返回的数据编码成 JSON 字符串
if __name__ == '__main__': # 调用message函数
text = sys.argv[1]
message(text)
如果想知道自己的脚本是否可用,可以在命令行下(针对Linux操作系统),输入“ - >〜#python dingding.py 123”,如果你在钉钉上收到了信息,则说明该脚本可用。
在上述步骤都完成后,我们进入到我们已经部署好的ZABBIX服务器上,进行一些简单的设置,等设置好之后,就可以实现自动化监控了。(若没有部署好的用户,可以参考的zabbix官方文档,文档内有详细的部署步骤,或网上查阅ZABBIX服务部署的相关文档)
如图1所示,在ZABBIX上,创建需要监控的主机:
2,创建报警媒介类型:
3,由于需要ZABBIX管理用户才有一定的执行权限,所以这里在我们需要绑定用户:
如图4所示,然后在发生警报的时候,ZABBIX需要有执行的动作,所以需要创建动作:
创建内容的默认信息附文章末,可以在文章末进行复制粘贴
好了,到这里,可以说已经完成了95%了,还有5%就是测试。由于编者使用的是阿里云的云服务器,是没有交换(交换空间)的,所以编者就修改了相对应的数值,测试在发生故障的时候,钉钉机器人是否有将故障信息发到编者的钉钉上。果然,上述在步骤无误的部署下,成功编者的实现了钉钉机器人脚本实现的zabbix自动化监控。
如图 - >钉钉机器人发送的故障信息:
如图 - >修复后,钉钉机器人发送的已修复信息:
修复后的问题,返回的信息当前状态会变成确定
附:
默认信息内容:
操作故障信息:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
报警主机:{HOST.NAME}
主机地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
报警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
报警信息:{TRIGGER.NAME}
报警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
恢复操作默认信息:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
报警主机:{HOST.NAME}
主机地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
报警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
报警信息:{TRIGGER.NAME}
报警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
}
确认操作默认信息:
服务器:{HOST.NAME}: 报警确认
{
执行人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:
"{ACK.MESSAGE}"
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}
}
本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!