zabbix腳本報警

zabbix問端設置:

1,設置報警類型python

 

二、設置用戶及媒體類型web

 

 

 

send_to 就是zabbix輸出的$1,腳本中藥發給誰shell

 

三、設置觸發器和動做json

觸發器 test.temp_conn (本身寫一個簡單的key作測試)vim

 

四、設置觸發器,閾值爲最後一次獲取的值大於1api

 

 

五、設置動做服務器

 

 

關聯觸發器微信

 

 

 

 

 

二、服務器端配置

 
 

vim zabbix.server.conf.  修改腳本位置curl

AlertScriptsPath=/opt/svr/zabbix2.4.5/share/zabbix/alertscripts/weixin_media/bin/

 

 

設置web端的keypost

UserParameter=test.temp_conn,ls -l /tmp/test | grep  '^-' | wc -l

 

 

三、shell腳本  

zabbix 2.4中建議使用shell腳本發送信息,由於2.4中不能自定義發送信息的格式

CropID="wx5a109e09d5044152"
Secret="0fiTLHoU0SBtNcBm4huzPILDt0QxjhdsVcnNBPVw9lVCR3vGVf7wf2p4HDTiilaQ"
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

function body() {
        local int AppID=1                      #企業號中的應用id
        local UserID=$1                       #部門成員id,zabbix中定義的微信接收者
#        local PartyID=2                        #部門id,定義了範圍,組內成員均可接收到消息
        local Msg=$(echo "$@" | cut -d" " -f3-)  #過濾出zabbix傳遞的第三個參數
        printf '{\n'
        printf '\t"touser":"'"$UserID"\"",\n"
#        printf '\t"toparty":"'"$PartyID"\"",\n"
        printf '\t"msgtype":"text",\n'
        printf '\t"agentid":"'" $AppID "\"",\n"
        printf '\t"text":{\n'
        printf '\t\t"content":"'"$Msg"\""\n"
        printf '\t},\n'
        printf '\t"safe":"0"\n'
        printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

  

四、python腳本

#! /usr/bin/env python3
import requests
import json
import logging
import sys, os

print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# print(sys.path)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)

class MyLogger:
    def __init__(self, msg):
        self.logger = self.initlog()
        self.msg = msg

    def initlog(self):
        logger = logging.getLogger(__name__)
        logger.setLevel(logging.DEBUG)
        fh = logging.FileHandler(BASE_DIR + '/log/' + 'char.log')
        fh.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        fh.setFormatter(formatter)
        logger.addHandler(fh)
        return logger

    def savelog(self):
        self.logger.debug(self.msg)



class ZabbixSendMail():
    def __init__(self,sys_argv):
        self.argv = sys_argv
        self.url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        self.value = {
            'corpid':"wx5a109e09d5044152",
            'corpsecret' : "0fiTLHoU0SBtNcBm4huzPILDt0QxjhdsVcnNBPVw9lVCR3vGVf7wf2p4HDTiilaQ"
        }
        self.sendmail_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send"
        self.access_resprons = requests.get(self.url, params=self.value)
        # self.token = json.loads(self.access_resprons.text)['access_token']
        self.respons = self.access_resprons.text  #獲取返回結果
        self.log = MyLogger("action")
        self.log.savelog()


    def get_token(self):
        ret = json.loads(self.respons)
        return ret["access_token"]


    def send_mail(self):
        try:
            send_mail_url = self.sendmail_url + "?access_token=%s"% self.get_token()
            #print(send_mail_url)
            msg = "".join(self.argv[2:])
            payload = """{"touser": "%s",
                    "msgtype": "text",
                    "agentid": 1,
                    "text":{"content": "內容:%s"},"safe":0}""" % (self.argv[0], msg)
            dic_payload = eval(payload)
            # ret = requests.post(send_mail_url, data=json.dumps(payload, ensure_ascii=False))

            ret = requests.post(send_mail_url, data=json.dumps(dic_payload, ensure_ascii=False).encode('UTF-8'))
            #發送中文時就須要ensure_ascii與.encode('utf-8')這兩個參數配合才能夠不然會報錯
            log = MyLogger(ret.text)
            log.savelog()

        except Exception as e:
            # print(e)
            log = MyLogger(e)
            log.savelog()


if __name__ == "__main__":
    send = ZabbixSendMail(sys.argv[1:])
    send.send_mail()
相關文章
相關標籤/搜索