zabbix+python+钉钉

zabbix的告警方式越来越多,目前使用的有Email,钉钉,微信,短信等等。之前一直使用Email,考虑到及时性需要上线钉钉或者微信。整理了一下配置方式。
版本:zabbix-3.2.11
钉钉-3.4以上
钉钉在3.4以上版本提供了群机器人功能,可以聚合第三方信息到钉钉群聊,目前支持GitHub,GitLab,Trello,JIRA等机器人还支持自定义开发的机器人。
一,机器人配置
    
   
使用自定义机器人
  • 获取到Webhook地址后,用户可以使用任何方式向这个地址发起HTTP POST 请求,即可实现给该群组发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8。
  • 当前自定义机器人支持文本(text)、连接(link)、markdown(markdown)三种消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。具体的消息类型参考下一节内容。
  • 自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员,在收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)
二,配置zabbix
2.1 下载程序
目前的报警程序主流有两种,一种是go语言写的golang程序,一种是python写的py程序。
2.2 部署程序
下载程序之后,将程序上传至服务器告警目录,需要注意的是调用程序的用户以及权限。
目录:cat zabbix_server.conf|grep AlertScriptsPath=
执行如下命令:
chown zabbix.zabbix golang-zabbix-robot && chmod +x golang-zabbix-robot或者
chown zabbix.zabbix dingding.py &&chmod +x dingding.py
2.3 创建报警媒介(python)
管理--------报警媒介类型--------创建媒体类型------输入名称(随意)------类型:脚本-------------脚本参数----创建完成
                
2.4 创建报警动作
配置-----动作-----触发器------操作-----输入相关信息

   

文本信息如下 :
告警信息:
告警主机:{HOST.NAME}
主机IP:{HOST.IP}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
恢复告警信息:
告警主机:{HOST.NAME}
主机IP:{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}

2.5 为用户创建告警媒介
管理-----用户------添加-----更新


2.6 完成


python脚本:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: xxxxxxxx
import requests
import json
import sys
import os
 
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=578e3cdaa659b22f30d7334528xxxxxxxxxxxxxxxxxxxxxxxxx"群机器人webhook
 
def msg(text):
    json_text= {
     "msgtype": "text",
        "at": {
            "atMobiles": [
                "xxxxxxxxxx"写被@人的电话
            ],
            "isAtAll": False
        },
        "text": {
            "content": text
        }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
      
if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)


猜你喜欢

转载自blog.csdn.net/linux_s2018/article/details/80825099