基於markdown消息類型實現釘釘報警,讓感官更舒服

        基於釘釘方式報警,網上普遍存在的是:

         1、報警腳本中 使用釘釘提供的 "text" 文本方式填充內容,報警內容均爲黑白字體;

         2、釘釘報警彩色顯示內容,使用github上現成的二進制程序,配合xml文本,固定格式報警,程序有可能對zabbix版本有些缺陷;

        基於markdown消息類型,可以實現字體彩色顯示,並且報警格式配置更加靈活,更有利於個性化定製消息

       

        成品報警圖

        Screenshot_2018-10-05-12-36-18-332_釘釘.png    Screenshot_2018-10-05-12-36-39-306_釘釘.png


       釘釘報警各種文章配置大同小異,不再詳細介紹,只將步驟寫出,其他參考網絡文章即可,着重會寫出markdown類型配置。


       後面用到的先在此說明:

   zabbix版本:
       V3.4.6
       
   zabbix腳本路徑:
      zabbix_server.conf 文件中 AlertScriptsPath  字段配置
      
   webhook 是什麼,機器人支持的markdown語法是什麼?

           https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1



        zabbix web配置

          1、 Administrator -- media types  增加釘釘報警類型

Image 1.jpg


2、Administrator-- users  建立報警用戶

       此處使用super user , 發送對象爲 手機號


Image 2.jpg


3、 configure -- action  添加報警動作 【重點說明:markdown 內容編輯在於此

       在 【options -- default messages】中寫入markdown語法內容,用html語法可設置字體顏色,在;

       此處對應腳本中要發送的內容,內容使用zabbix內置變量即可。

    <font color=#FF0000 size=6 face="黑體">事故等級: {TRIGGER.SEVERITY} </font>        
    ##### **發生時間**:  {EVENT.DATE} {EVENT.TIME}      
    ##### **機器**: {HOST.NAME} - {HOST.IP}      
    **問題**: {TRIGGER.NAME}      
    **報警值**: {ITEM.VALUE}

        在 option details 中 send only to  選中 設置的釘釘報警 (詳細設置參考網絡文章,略)


        同理,【recovery options -- default mesages】寫入報警恢復時發送內容

    **狀態**: {TRIGGER.STATUS}        
    **機器**: {HOST.NAME} - {HOST.IP}    
    **恢復時間**: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}          
    **問題**: {TRIGGER.NAME}    
    **報警值**: {ITEM.VALUE}


        以上是頁面配置中針對markdown類型的語法實例,效果見文章開頭,根據個人喜好DIY設置即可。


        發送腳本基於網上的python腳本,自己做了一些修改 :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#  https://www.aityp.com
## mobified by benson , remove config file

import requests
import json
import sys
import os
import time
#import configparser

headers = {'Content-Type': 'application/json;charset=utf-8'}
time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


log_file = "/var/log/zabbix/zabbix_dingding.log"
api_url = "https://oapi.dingtalk.com/robot/send?access_token=bdd59ba55647c60ea9d63025c2af416fb9bd67d17e351430b0535d4ba55da2d2"


def log(info):
    #注意權限,否則寫不進去日誌
    if os.path.isfile(log_file) == False:
               f = open(log_file, 'a+')

    f = open(log_file,'a+')
    f.write(info)
    f.close()

def msg(text,user):
    json_text= {
     "msgtype": "markdown",
        "markdown": {
            "title":"zabbix monitor",
            "text": text
        },
        "at": {
            "atMobiles": [
                user
            ],
            "isAtAll": True
        }
    }

    r=requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
    code = r["errcode"]
    if code == 0:
        log(time + ":消息發送成功 返回碼:" + str(code) + "\n")
    else:
        log(time + ":消息發送失敗 返回碼:" + str(code) + "\n")
        exit(3)

if __name__ == '__main__':
    text = sys.argv[3]
    user = sys.argv[1]
    msg(text,user)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章