美文网首页
Python调用Zabbix Api入门实战

Python调用Zabbix Api入门实战

作者: summer_zhou | 来源:发表于2020-03-13 15:22 被阅读0次

    一、 Zabbix API认证实战

    Zabbix Api
    Zabbix具有丰富的Api功能
    可通过Api添加主机组、主机、获取监控数据等
    使用Python操作Zabbix Api

    API使用帮助文档
    (https://www.zabbix.com/documentation/3.0/manual/api)

    登录认证说明zabbix_base.py

    import json
    from urllib.request import Request,urlopen
    zabbix_url="http://192.168.67.132/zabbix/api_jsonrpc.php"
    zabbix_header = {"Content-Type":"application/json"}
    
    zabbix_user   = "Admin"
    zabbix_pass   = "xxxxxx"
    data = {
      "jsonrpc":"2.0",
      "method":"user.login",
      "params":{
        "user":zabbix_user,
        "password":zabbix_pass
      },
      "id":0  #任意
    }
    
    data = json.dumps(data).encode('utf-8')
    req = Request(zabbix_url, headers=zabbix_header, data=data)
    #print(req)  #<urllib.request.Request object at 0x000001C281BF2408>
    result = urlopen(req).read()
    print(result) #获取到的Token值
    

    登录结果说明

    #{"jsonrpc":"2.0","result":"xxx","id":0}
    #{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Login name or password is incorrect."},"id":0}
    

    请求Zabbix进行封装

    import json
    from urllib.request import Request,urlopen
    zabbix_url = "http://192.168.67.132/zabbix/api_jsonrpc.php"
    zabbix_header = {"Content-Type":"application/json"}
    
    def zabbix_api_common(data):
      data = json.dumps(data).encode('utf-8')
      req = Request(zabbix_url, headers=zabbix_header, data=data)
      # print(req)  #<urllib.request.Request object at 0x000001C281BF2408>
      result = urlopen(req).read()
      return json.loads(result)
    
    zabbix_user   = "Admin"
    zabbix_pass   = "xxxxxx"
    data = {
      "jsonrpc":"2.0",
      "method":"user.login",
      "params":{
        "user":zabbix_user,
        "password":zabbix_pass
      },
      "id":0
    }
    
    if __name__ == "__main__":
      result = zabbix_api_common(data)
      print(result["result"])
    

    对Zabbix登录进行封装

    import json
    from urllib.request import Request,urlopen
    zabbix_url = "http://192.168.67.132/zabbix/api_jsonrpc.php"
    zabbix_header = {"Content-Type":"application/json"}
    
    def zabbix_api_common(data):
      data = json.dumps(data).encode('utf-8')
      req = Request(zabbix_url, headers=zabbix_header, data=data)
      # print(req)  #<urllib.request.Request object at 0x000001C281BF2408>
      result = urlopen(req).read()
      return json.loads(result)
    
    def get_token():
        zabbix_user   = "Admin"
        zabbix_pass   = "xxxxxx"
        data = {
          "jsonrpc":"2.0",
          "method":"user.login",
          "params":{
            "user":zabbix_user,
            "password":zabbix_pass
          },
          "id":0
        }
        result = zabbix_api_common(data)
        return (result["result"])
    
    if __name__ == "__main__":
      result = get_token()
      print(result)
    

    二、Zabbix Api获取主机信息

    API参考手册:(https://www.zabbix.com/documentation/3.0/manual/api/reference/hostgroup/get)

    Zabbix Api获取主机组zabbix_group.py

    import zabbix_base
    token = zabbix_base.get_token()
    data = {
        "jsonrpc": "2.0",
        "method": "hostgroup.get",
        "params": {
            "output": "extend",
        },
        "auth": token,
        "id": 0
    }
    result = zabbix_base.zabbix_api_common(data)
    print(result)
    

    只获取组ID+组名字

    import zabbix_base
    token = zabbix_base.get_token()
    data = {
        "jsonrpc": "2.0",
        "method": "hostgroup.get",
        "params": {
            "output": ['name'],
        },
        "auth": token,
        "id": 0
    }
    result = zabbix_base.zabbix_api_common(data)
    print(result)
    for i in result['result']:
        print(i)
    

    加入过滤,官方文档

    data = {
        "jsonrpc": "2.0",
        "method": "hostgroup.get",
        "params": {
            "output": ['name'],
            "filter": {
                "name": [
                    "shijiange"
                ]
            }
        },
        "auth": token,
        "id": 0
    

    查询主机组及主机信息zabbix_group.py

    data = {
        "jsonrpc": "2.0",
        "method": "hostgroup.get",
        "params": {
            "output": ['name'],
            "selectHosts": ["host"],
        },
        "auth": token,
        "id": 0
    }
    

    三、Zabbix Api获取模板信息

    Zabbix Api获取模板信息

    import zabbix_base
    
    token = zabbix_base.get_token()
    data = {
        "jsonrpc": "2.0",
        "method": "template.get",
        "params": {
            "output": ["host"],
        },
        "auth": token,
        "id": 1
    }
    result = zabbix_base.zabbix_api_common(data)
    for i in result['result']:
        print(i)
    

    四、Zabbix Api创建监控主机

    Api添加主机组

    groupname = "shijiangeapigroup"
    data={
      "jsonrpc": "2.0",
      "method": "hostgroup.create",
      "params": {
        "name": groupname
      },
      "auth": token,
      "id": 1
    }
    

    Api添加主机,如果是Linux建议大家还是自动注册

    hostname='zabbixapihost'
    hostip = '1.1.1.1'
    groupid = 24
    templateid="10001"
    data = {
        "jsonrpc": "2.0",
        "method": "host.create",
        "params": {
            "host": hostname,
            "interfaces": [{
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": hostip,
                "dns": "",
                "port": "10050"
            }],
            "groups": [{
                "groupid": groupid
            }],
            "templates": [{
            "templateid": templateid
            }],
        },
        "auth": token,
        "id": 1
    }
    
    interfaces接口解析.png

    相关文章

      网友评论

          本文标题:Python调用Zabbix Api入门实战

          本文链接:https://www.haomeiwen.com/subject/idafshtx.html