一:下載發送程序
zabbix 釘釘報警機器人 - 向釘釘羣聊中發送報警消息 (go語言寫的腳本,可用 -h查看選項)
測試:
./golang-zabbix-robot-64 -webhook='https://oapi.dingtalk.com/roboxxxxxxxx'
此時你的機器人會發送一個來自於千思網的消息,此時說明golong可用。
接下來就要區分你的zabbix的版本了,以下分別是3.0 3.2 2.4的配置方式
二:zabbix3.0 配置
1、部署程序
將go腳本拷貝至服務端警告目錄AlertScriptspath下,添加執行權限。
2、創建報警媒介
3、添加用戶或組,加入報警媒介
4、創建動作,創建觸發發送條件
三:zabbix3.2 配置
3.2和3.0配置大致一樣,只是有部分會發生消息送不到的情況,嘗試將上述xml格式的換行去掉後重新測試。
附錄:
報警信息 <?xml version="1.0" encoding="UTF-8" ?> <root> <from>{HOSTNAME1}</from> <time>{EVENT.DATE} {EVENT.TIME}</time> <level>{TRIGGER.SEVERITY}</level> <name>{TRIGGER.NAME}</name> <key>{TRIGGER.KEY1}</key> <value>{ITEM.VALUE}</value> <now>{ITEM.LASTVALUE}</now> <id>{EVENT.ID}</id> <ip>{HOST.IP}</ip> <url>這裏是點擊報警消息可以訪問的鏈接地址</url> <age>{EVENT.AGE}</age> <status>{EVENT.STATUS}</status> <acknowledgement> {EVENT.ACK.STATUS} </acknowledgement> <acknowledgementhistory> {EVENT.ACK.HISTORY}</acknowledgementhistory> </root> | 恢復信息 <?xml version="1.0" encoding="UTF-8" ?> <root> <from>{HOSTNAME1}</from> <time>{EVENT.DATE} {EVENT.TIME}</time> <level>{TRIGGER.SEVERITY}</level> <name>{TRIGGER.NAME}</name> <key>{TRIGGER.KEY1}</key> <value>{ITEM.VALUE}</value> <now>{ITEM.LASTVALUE}</now> <id>{EVENT.ID}</id> <ip>{HOST.IP}</ip> <color>FF4A934A</color> <url>這裏的url會替換報警媒介的url</url> <age>{EVENT.AGE}</age> <recoveryTime>{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}</recoveryTime> <status>{EVENT.RECOVERY.STATUS}</status> </root> |
四:zabbix 2.4 配置
相對於3版本,2.4 雖經典但是卻有點跟不上時代了,公司爲了保持穩定,也不敢貿然升級,所以只能對 2.4進行相應的配置了。
1、部署程序
同樣在警告目錄AlertScriptspath下,添加腳本 zabbix-dingding.sh
#!/bin/bash
webhook="https://oapi.dingtalk.com/robot/send?access_token=xxx"
/zabbix/share/zabbix/alertscripts/golang-zabbix-robot-64 -webhook=$webhook -msg="$3"
2、創建報警媒介
3、創建用戶或組,加入報警媒介,同上
4、創建動作,創建觸發發送條件,採用3.2格式,不換行
-----------------------------------------------------------------------------------------
附加:通用機器人
有時我們會用自定義的監控腳本,去監控服務狀態,或者某個程序等等,怎麼對接到釘釘呢?
#!/usr/bin/env python #coding=utf-8 import urllib import urllib2 import json import re f = open('xxxxxxxxxx','r') #取文件的內容發送 your_data = f.read() f.close() #print your_data headers = {'Content-Type': 'application/json'} test_data = { 'msgtype':"text", "text":{ 'content':"%s" % your_data }, "at":{ "atMobiles":[ # "you iphone" ], "isAtAll":"false" } } #requrl = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxx" req = urllib2.Request(url = requrl,headers = headers,data = json.dumps(test_data)) response = urllib2.urlopen(req) |