请选择 进入手机版 | 继续访问电脑版

IT运维管理,ITIL,ITSS,ITSM,ISO20000-ITIL先锋论坛

 找回密码
 点击获取邀请码 - 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 92|回复: 0

[Zabbix专区] Zabbix v3.1怎样使用微信报警及API

[复制链接]
来自- 湖南

参加活动:0

组织活动:12

发表于 2017-8-14 20:48:11 | 显示全部楼层 |阅读模式 来自- 湖南
  • 微信报警

配置微信企业号
  • 在组织架构中,新建二级组,并添加相关人员,注意添加人员的账号要记清楚。后期zabbix发送邮件时需要填写用户名(也可以填写@all发送给所有的人)
  • 点击"修改部门",获取ID
  • 去设置-->功能设置-->权限管理,最重要的是CorpID,Secret 两个密钥,后期脚本里会利用它俩生成一个token ,然后利用token 去发送消息

[url=][/url]配置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'}

[url=][/url]配置zabbix UI
  • 【管理】-【报警媒介类型】-【创建媒介类型】
  • 【管理】-【用户】-【admin】-【报警媒介】
  • 【配置】-【动作】-【触发器】-【创建动作】





  • API使用

API 采用JSON-RPC实现。这意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。大致工作流如下:
  • 准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。
  • 采用POST方法向 http://example.com/zabbix/api_jsonrpc.php发送此JSON对象,http://example.com/zabbix/是Zabbix前端地址 ,api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
  • 获取JSON格式响应。
  • 注:请求除了必须是POST方法之外,HTTP Header Content-Type必须为【application/jsonrequest,application/json-rpc,application/json】其中之一。

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

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')

OpsWorlder原创

本版积分规则

选择云运维时代的王牌讲师-长河老师,助你轻松入门ITIL Foundation培训课程

QQ|小黑屋|手机版|Archiver|ITIL先锋论坛五万运维人社区 ( 粤ICP备17056641号|网站地图

Baidu

GMT+8, 2018-6-22 04:09 , Processed in 0.287325 second(s), 37 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表