Python 操作Zabbix API 获取ERROR级别告警信息并打印

1.需求:有一个语音合成播报项目,要实时获取zabbix的ERROR级别以上告警信息,将该信息合成语音播报出去。(合成语音及播报已经完成)

2.现实:整理zabbix告警级别,将不太重要的告警放到ERROR级别以下,将重点信息设置为ERROR级别,然后通过zabbbix api获取。

 

3.简单实现:

#基础版本:包含全部信息,如果group hosts 等信息。

    #!/usr/bin/env python
    #coding:utf-8
    import json
    import urllib2
    from urllib2 import URLError
    import sys
    zabbix_addresses=['http://www.baidu.com/zabbix,Admin,Admin]
    class ZabbixTools:
        def __init__(self,address,username,password):
     
            self.address = address
            self.username = username
            self.password = password
     
            self.url = '%s/api_jsonrpc.php' % self.address
            self.header = {"Content-Type":"application/json"}
     
     
     
        def user_login(self):
            data = json.dumps({
                               "jsonrpc": "2.0",
                               "method": "user.login",
                               "params": {
                                          "user": self.username,
                                          "password": self.password
                                          },
                               "id": 0
                               })
     
            request = urllib2.Request(self.url, data)
            for key in self.header:
                request.add_header(key, self.header[key])
     
            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()
                #print response['result']
                self.authID = response['result']
                return self.authID
     
        def trigger_get(self):
            data = json.dumps({
                               "jsonrpc":"2.0",
                               "method":"trigger.get",
                               "params": {
                                          "output": [
                                                    "triggerid",
                                                    "description",
                                                    "priority"
                                                    ],
                                          "filter": {
                                                     "value": 1
                                                     },
                                          "sortfield": "priority",
                                          "sortorder": "DESC",
                                          "min_severity": 4,
                                          "skipDependent": 1,
                                          "monitored": 1,
                                          "active": 1,
                                          "expandDescription": 1,
                                          "selectHosts": ['host'],
                                          "selectGroups": ['name'],
                                          "only_true": 1
                                        },
                               "auth": self.user_login(),
                               "id":1              
            })
     
            request = urllib2.Request(self.url, data)
            for key in self.header:
                request.add_header(key, self.header[key])
     
            try:
                result = urllib2.urlopen(request)
            except URLError as e:
                print "Error as ", e
            else:
                response = json.loads(result.read())
                result.close()
                issues = response['result']
                content = ''
                if issues:
                    for line in issues:
                        content = content + "%s:%s:%s\r\n" % (line['groups'],line['hosts'],line['description'])
                 content = content + "%s\r\n" % (line['description'])
    #                    print line
                return content
     
    if __name__ == "__main__":
        for zabbix_addres in zabbix_addresses:
            address,username,password = zabbix_addres.split(',')
            z = ZabbixTools(address=address, username=username, password=password)
            content = z.trigger_get()
        print    content

 
 

 

 

 

#简洁版:仅提示trigger ,不包含group hosts 等其他信息。
#!/usr/bin/env python
#coding:utf-8
import json
import urllib2
from urllib2 import URLError
import sys
zabbix_addresses=['http://www.aliyun.com/zabbix,Admin,Admin]
class ZabbixTools:
    def __init__(self,address,username,password):

        self.address = address
        self.username = username
        self.password = password

        self.url = '%s/api_jsonrpc.php' % self.address
        self.header = {"Content-Type":"application/json"}



    def user_login(self):
        data = json.dumps({
                           "jsonrpc": "2.0",
                           "method": "user.login",
                           "params": {
                                      "user": self.username,
                                      "password": self.password
                                      },
                           "id": 0
                           })

        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])

        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()
            #print response['result']
            self.authID = response['result']
            return self.authID

    def trigger_get(self):
        data = json.dumps({
                           "jsonrpc":"2.0",
                           "method":"trigger.get",
                           "params": {
                                      "output": [
                                                "triggerid",
                                                "description",
                                                "priority"
                                                ],
                                      "filter": {
                                                 "value": 1
                                                 },
                                      "sortfield": "priority",
                                      "sortorder": "DESC",
                                      "min_severity": 4,
                                      "skipDependent": 1,
                                      "monitored": 1,
                                      "active": 1,
                                      "expandDescription": 1,
                                      "selectHosts": ['host'],
                                      "selectGroups": ['name'],
                                      "only_true": 1
                                    },
                           "auth": self.user_login(),
                           "id":1              
        })

        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])

        try:
            result = urllib2.urlopen(request)
        except URLError as e:
            print "Error as ", e
        else:
            response = json.loads(result.read())
            result.close()
            issues = response['result']
            content = ''
            if issues:
                for line in issues:
                    #content = content + "%s:%s:%s\r\n" % (line['groups'],line['hosts'],line['description'])
             content = content + "%s\r\n" % (line['description'])
#                    print line
            return content

if __name__ == "__main__":
    for zabbix_addres in zabbix_addresses:
        address,username,password = zabbix_addres.split(',')
        z = ZabbixTools(address=address, username=username, password=password)
        content = z.trigger_get()
    print    conten

你可能感兴趣的:(python基础及应用,监控系统及应用)