Zabbix-4.0-設置釘釘報警腳本


問題:當服務器發生報錯時,有一個信息能實現自動發送到我的手機或者應用上,以達到對服務器的實時的監控與處理。郵件與短信不能滿足實時性,於是想到了釘釘的通知。

思路:在釘釘里面建一個群,群里面拉個機器人。用zabbix配置一個腳本,讓服務器監控的報警自動發送到釘釘,再由釘釘發送給自己。

參考鏈接:

python之釘釘機器人zabbix報警:https://blog.51cto.com/m51cto/2051945

小油2018zabbix釘釘報警:https://www.cnblogs.com/xiaoyou2018/p/10612628.html#commentform

釘釘開發者文檔機器人:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

一、環境准備

zabbix4.0

zabbix系統:centos7.6

腳本:python2.7

客戶端:windwos10

報警應用:釘釘

二、腳本及說明

腳本:dingding.py

 

#!/usr/bin/python
# -*- coding: utf-8 -*- 
import requests
import json
import sys
import os
import datetime
webhook = "https://oapi.dingtalk.com/robot/send?access_xxxxxxxxxxxxxxxxxx"
user=sys.argv[1]
text=sys.argv[3]
data={
        "msgtype": "text",
        "text": {
                "content":text
        },
        "at": {
                "atMobiles": [
                        user
                        ],
                        "isAtAll": True
        }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/local/zabbix/log/dingding.log"):
        f=open("/usr/local/zabbix/log/dingding.log","a+")
else:
        f=open("/usr/local/zabbix/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"發送成功"+"\n"+str(text))
        f.close()
else:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"發送失敗"+"\n"+str(text))
        f.close()

 

 

解釋:一定記住用手打,不要復制粘貼,因為linux的編碼可能復制進去用不了,耐心一點!!!

前面帶#的2行是定義,定義語言與編碼字符串

跟着5行import是python的格式用法

中間的webhook是機器人的地址,要再釘釘群里面建了機器人把地址更換進來

user很text是定義變量,里面的1跟3是后面輸出的的3個值

data是釘釘機器人的用法

atMobiles是釘釘里面發給誰的手機號,要加上

isAtAlL是開啟是否@所有人,釘釘發送給群所有人

下面的if else是定義日志的文件路徑與日志顯示的內容

 

三、釘釘建一個群,添加一個機器人,復制地址

釘釘新建一個群,點擊群右側“更多”-“群助手”-“添加自定義機器人”-“復制地址”

四、zabbix服務器配置腳本

機器人地址:`https://oapi.dingtalk.com/robot/send?access_tokenxxxxxxxxx`
1.遠程zabbix服務器,檢查安裝python(centos7.6自帶python2.x版本)

        python -V                              查看python版本(這個腳本是基於puthon2.x版本的)
        yum -y install epel-release         安裝epel源
        yum install python-pip                安裝pip工具
        pip -v                                    查看版本
        pip install requests                 安裝模塊requests


2.編寫腳本,腳本要新建在zabbix 的alertscripts目錄下              

   cd /usr/lib/zabbix/alertscripts      打開目錄
      vim dingding.py           編輯新建腳本
    
3.腳本:見上

    一定要將自己的釘釘機器人地址,替換webhook里面的地址,其他可以不變


4.日志文件創建與授權:
    chmod 777 dingding.py
    chown zabbix.zabbix dingding.py
    touch /usr/local/zabbix/logs/dingding.log
    chown zabbix.zabbix /usr/local/zabbix/logs/dingding.log

5.測試腳本

  python dingding.py user1 12345678911 測試發送釘釘            (測試中要輸入3個數據,分別是用戶,電話,跟內容)

五、zabbix管理界面添加腳本

1.登錄zabbix管理網頁,上面選擇“管理”-“報警媒介類型”-“創建報警媒介類型”(將剛才寫的dingding腳本調用起來)

 

2.單擊“管理”-“用戶”-“Admin”-“報警媒介”-添加一個剛才的報警媒介

 

3.單擊“配置”-“動作”-“創建一個動作”

設置“操作”的報警;“恢復操作”的報警;“更新”的報警的格式;

在操作里面添加發送腳本的動作,每一個都要做添加發送腳本的動作!

 

 

 

 

 

 

 

操作的報警消息內容格式:

服務器:{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}
}

六、測試

1.添加一個監控主機,並設置一個測試值,例如ping

見我的另一篇博客:https://www.cnblogs.com/subsea/p/13532579.html

2.關閉或者拔掉網線,測試客戶機,看釘釘是否通知

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM