zabbix釘釘報警

不太聪明的大鹅發表於2024-06-06

1.釘釘報警原理流程

和微信報警類似,傳送指定的資料到釘釘官方提供的API介面,釘釘會將報警資訊,傳送到指定的釘釘群聊,提醒所有的群成員檢視,實現告警通知。

具體操作流程
建立釘釘群聊
建立自定義機器人
建立報警關鍵詞
生成webhook認證資訊
開發報警指令碼
填寫zabbix-UI介面的配置
測試釘釘報警通知

2.建立群聊機器人

1.建立群聊自定義機器人

2.設定機器人資訊

3.記錄webhook地址

4.測試webhook地址

# 提交json類的資料,發給釘釘的API
[root@m-61 /tmp]#curl 'https://oapi.dingtalk.com/robot/send?access_token=4763e2451402cce519d7599369cd545e28288b80eb6c4b58bed03a548a03d857' \
> -H 'Content-Type: application/json' \
> -d '{"msgtype": "text","text": {"content": "zabbix 報警測試,來自於www.yuchaoit.cn"}}'

# 拿到了結果
{"errcode":0,"errmsg":"ok"}


4.1 支援更多功能引數,如圈某人看訊息

# 參考釘釘機器人API的文件,支援哪些引數,參考用法如下
https://open.dingtalk.com/document/robots/custom-robot-access
# shell發請求 ,注意json資料格式,以及zabbix觸發關鍵字


# 圈人語法,基於手機號
curl 'https://oapi.dingtalk.com/robot/send?access_token=4763e2451402cce519d7599369cd545e28288b80eb6c4b58bed03a548a03d857' \
-H 'Content-Type: application/json' \
-d  '{"at":{"atMobiles":["15210858004"],"isAtAll":false},"text":{"content":"於超老師正在測試zabbix釘釘報警機器人!!"},"msgtype":"text"}'


# 圈人語法2,基於UserIds,員工ID,但是需要管理員檢視,使用者自己不好嘗試了

釘釘指令碼,python版

該指令碼是python3,你的目標機器,是否支援python3

yum install python3 python3-devel  python3-pip -y

pip3 install requests
python語法比較優雅,你拿到程式碼,只需要修改什麼就行?修改你的webhook,web鉤子,釘釘機器人的API地址,該成你自己的即可


#!/usr/bin/python3
# coding: utf-8
# about zabbix python script

import requests,json,sys,os,datetime

# 釘釘機器人API
webhook_url='https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72' 

# 給指令碼引數手機號引數1
user_phone=sys.argv[1]

# 引數2,訊息正文
text=sys.argv[2] + "\n\n" + sys.argv[3]

# 構造json資料體
data={
    "msgtype":"text",
    "text":{
        "content":text
    },
    "at":{
        "atMobiles":[user_phone],
        "isAtAll":False
    }
}

# 請求頭,表明請求型別是json
headers={"Content-Type":"application/json"}

# 發HTTP請求,POST方式,傳入資料與請求頭
response=requests.post(url=webhook_url,data=json.dumps(data),headers=headers)
print(response.content)

# 日誌目錄生成
if os.path.exists("/tmp/dingding.log"):
    with open("/tmp/dingding.log","a+") as f:
        print("該檔案以存在,追加寫入中")
        if response.json().get("errcode")==0:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "傳送成功" + "\n" + str(text) )
        else:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "傳送失敗" + "\n" + str(text) )
else:
    with open("/tmp/dingding.log","w+") as f:
        print("該日誌檔案不存在,建立且寫入中")
        if response.json().get("errcode")==0:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "傳送成功" + "\n" + str(text) )
        else:
            f.write("\n" + str(datetime.datetime.now()) + "    " + str(user_phone) + "    " + "傳送失敗" + "\n" + str(text) )

測指令碼,需要給指令碼傳入幾個引數

python3 dingding.py 15210858004 "來自於linux0224的釘釘訊息" "keyword:zabbix 老六門,看懂了嗎"

釘釘指令碼 bash版本

#!/bin/bash
# about zabbix bash script
# Author: www.yuchaoit.cn


#webhook 地址 webhook=''
#接受者的手機號,由 zabbix 傳入 
user=$1
#報警郵件標題,由 zabbix 傳入 
title=$2
#報警郵件內容,由 zabbix 傳入
message=$3

# 構造語句執行傳送動作
# bash就是用curl 構造json資料發出去而已,注意引號的細節就好
# 透過API返回的資料,來確認是否傳送正確

curl -s -H "Content-Type: application/json" -X POST "https://oapi.dingtalk.com/robot/send?access_token=d747bcf366308f7148ef714fa7e2673a5063607dd661d5706671833ac4283c72" -d '{"msgtype":"text","text":{"content":"'"${title}\n\n${message}\n\nzabbix報警啦!!!火燒屁股啦!!!老六們!!!"'"},"at":{"atMobiles":["'"${user}"'"],"isAtAll":false}}' 


#將報警資訊寫入日誌檔案
echo -e "\n 報警時間:$(date +%F-%H:%M)\n 報警標題:${title}\n 報警內容:${message}" >> /tmp/ding_bash.log

注意指令碼存放的目錄(服務端)以及許可權問題

/usr/lib/zabbix/alertscripts
chown -R zabbix.zabbix ./* chmod +x ./執行的檔名

zabbix-UI頁面配置釘釘報警

指令碼調通後,就可以去zabbix的UI頁面配置引數,提供報警

思路依然是
建立報警媒介型別
↓
建立媒體型別
↓
釘釘報警建立
↓
使用者選擇報警媒介方式

1建立媒體型別

2使用者選擇報警媒介(釘釘)

坑記錄,最後一步zabbix呼叫python發報警,別忘記關鍵字

Author: www.yuchaoit.cn
keyword: zabbix
告警主機:{HOSTNAME1} {HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}  


-------
Author: www.yuchaoit.cn
keyword: zabbix
告警主機:{HOSTNAME1} {HOST.IP}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}




相關文章