Zabbix v3.0微信报警及API使用

Posted DevOps

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zabbix v3.0微信报警及API使用相关的知识,希望对你有一定的参考价值。

  • 微信报警

配置微信企业号

  1. 在组织架构中,新建二级组,并添加相关人员,注意添加人员的账号要记清楚。后期zabbix发送邮件时需要填写用户名(也可以填写@all发送给所有的人)

  2. 点击"修改部门",获取ID

  3. 去设置-->功能设置-->权限管理,最重要的是CorpID,Secret 两个密钥,后期脚本里会利用它俩生成一个token ,然后利用token 去发送消息

配置zabbix-server

将weixin.py放到/usr/local/zabbix/alertscripts/目录下

$ vim /usr/local/zabbix/alertscripts/weixin.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-


import urllib,urllib2,json

import sys

reload(sys)

sys.setdefaultencoding( "utf-8" )



class WeChat(object):

    __token_id = ''

    # init attribute

    def __init__(self,url):

        self.__url = url.rstrip('/')

        self.__corpid = ''    #微信企业号-设置-权限管理可查看

        self.__secret = ''    #微信企业号-设置-权限管理可查看 


    # Get TokenID

    def authID(self):

        params = {'corpid':self.__corpid, 'corpsecret':self.__secret}

        data = urllib.urlencode(params)

        content = self.getToken(data)

        try:

            self.__token_id = content['access_token']

            # print content['access_token']

        except KeyError:

            raise KeyError


    # Establish a connection

    def getToken(self,data,url_prefix='/'):

        url = self.__url + url_prefix + 'gettoken?'

        try:

            response = urllib2.Request(url + data)

        except KeyError:

            raise KeyError

        result = urllib2.urlopen(response)

        content = json.loads(result.read())

        return content


    # Get sendmessage url

    def postData(self,data,url_prefix='/'):

        url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id

        request = urllib2.Request(url,data)

        try:

            result = urllib2.urlopen(request)

        except urllib2.HTTPError as e:

            if hasattr(e,'reason'):

                print 'reason',e.reason

            elif hasattr(e,'code'):

                print 'code',e.code

            return 0

        else:

            content = json.loads(result.read())

            result.close()

        return content


    # send message

    def sendMessage(self,touser,message):

        self.authID()

        data = json.dumps({

                'touser':"@all",

                'toparty':"@all",

                'totag': "test",

                'msgtype':"text",

                'agentid':"2",

                'text':{

                        'content':message

                },

                'safe':"0"

        },ensure_ascii=False)

        response = self.postData(data)

        print response



if __name__ == '__main__':

        a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')

        a.sendMessage(sys.argv[1],sys.argv[3])


$ chmod +x /usr/local/zabbix/alertscripts/weixin.py

$ chown zabbix:zabbix /usr/local/zabbix/alertscripts/weixin.py

$ python zabbix test test  //$1联系人 $2主题  $3正文

{u'errcode': 0, u'errmsg': u'ok'}


配置zabbix UI

  1. 【管理】-【报警媒介类型】-【创建媒介类型】 


  2. 【管理】-【用户】-【admin】-【报警媒介】 

    Zabbix v3.0微信报警及API使用

  3. 【配置】-【动作】-【触发器】-【创建动作】 
    Zabbix v3.0微信报警及API使用
    Zabbix v3.0微信报警及API使用


  • API使用

API 采用JSON-RPC实现。这意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。大致工作流如下:

  • 准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。

  • 获取JSON格式响应。

  • 注:请求除了必须是POST方法之外,HTTP Header Content-Type必须为【application/jsonrequest,application/json-rpc,application/json】其中之一。

可以采用脚本或者任何"手动"支持JSON RPC的工具来使用API。而首先需要了解的就是如何验证和如何使用验证ID来获取想要的信息。后面的演示会以Python脚本和基于Curl的例子来呈现API的基本使用。

Zabbix v3.0微信报警及API使用


CLI Example:


$ vim zbx_addhost.py

#!/usr/bin/env python2.7

#coding=utf-8


import json

import urllib2

import sys

reload(sys)

sys.setdefaultencoding( "utf-8" )



# based url and required header

url = "http://10.0.0.1:8027/api_jsonrpc.php"

header = {"Content-Type": "application/json"}



def zbxauth():

    # auth user and password

    data = json.dumps(

    {

        "jsonrpc": "2.0",

        "method": "user.login",

        "params": {

                   "user": "admin",

                   "password": "123456"

        },

        "id": 0

    })

    # create request object

    request = urllib2.Request(url,data)

    for key in header:

        request.add_header(key,header[key])

    # auth and get authid

    try:

        result = urllib2.urlopen(request)

    except URLError as e:

        print "Auth Failed, Please Check Your Name And Password:",e.code

    else:

        response = json.loads(result.read())

        result.close()

       # return "Auth Successful. The Auth ID Is:",response['result']

        return response['result']



def add_host(ip):

    authid = zbxauth()

    # request json

    data = json.dumps(

    {

        "jsonrpc":"2.0",

        "method":"host.create",

        "params":{

        "host": ip,

        "interfaces": [

            {

                "type": 1,

                "main": 1,

                "useip": 1,

                "ip": ip,

                "dns": "",

                "port": "10050"

            }

        ],

        "groups": [{"groupid": 8}],

        "templates": [{"templateid":10108}],

        },

        "auth":"{0}".format(authid), # the auth id is what auth script returns, remeber it is string

        "id":0,

    })

    # create request object

    request = urllib2.Request(url,data)

    for key in header:

        request.add_header(key,header[key])

    # add host

    try:

        result = urllib2.urlopen(request)

    except URLError as e: 

        print "Error as ", e 

    else:

        response = json.loads(result.read()) 

        print response

        result.close() 

        reutrn "Add host: {0} is ok.".format(ip) 



print add_host('8.8.8.8')





欢迎关注运维自研堂订阅号,运维自研堂是一个技术分享平台,主要是运维自动化开发:linux、python、django、saltstack、tornado、bootstrap、redis、golang、docker、etcd等经验分享。





牛人并不可怕,可怕的是牛人比我们还努力!




以上是关于Zabbix v3.0微信报警及API使用的主要内容,如果未能解决你的问题,请参考以下文章

zabbix报警信息聚合并及企业微信接收

配置Zabbix3.4及4.0版本通过企业微信报警(全网最详细)

Zabbix微信报警脚本及写触发记录

zabbix 微信报警设置

Zabbix监控客户端及实现邮件微信报警

zabbix实现微信报警以提升发送速度