1. 首页
  2. 运维开发
  3. Python

Python和Zabbix API实现监控主机的增删改功能

Zabbix api可以很方便的管理监控项,功能强大,非常适合二次开发。本文主要实现的功能是django资产管理的更新能够同步到Zabbix监控平台,统一平台功能,保证数据一致性。

Zabbix  API

Zabbix API中主要用到host.create,host.delete,host.update,host.get和hostinterface.update方法。下面已create为例做下简单使用说明。

{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
    "host": "Linux server",
    "interfaces": [
        {
        "type": 1,
        "main": 1,
        "useip": 1,
        "ip": "192.168.3.1",
        "dns": "",
        "port": "10050"
        }
    ],
    "groups": [
        {
        "groupid": "50"
        }
    ],
    "templates": [
        {
        "templateid": "20045"
        }
    ],
    "inventory": {
        "macaddress_a": "01234",
        "macaddress_b": "56768"
    }
    },
    "auth": "038e1d7b1735c6a5436ee9eae095879e",
    "id": 1
}

参数

jsonrpc:默认2.0,不用修改

method:指定api的方法

params:请求的参数。其中host是主机名称,即zabbix页面上显示的名字。interfaces是主机的真实信息,包括类型、ip地址和端口等。groups主机添加时加入的组,这个必须指定。templates表示添加主机时使用的zabbix模板id,可选,建议添加常用模板id号 。inventory资产管理,这个我没有添加。

auth:登陆后的sessionid号

id:操作的id号,这个具体什么作用没有深入研究。请求id是什么号,返回时显示什么号。

创建成功后返回内容如下:

{
    "jsonrpc": "2.0",
    "result": {
        "hostids": [
            "107819"
        ]
    },
    "id": 1
}

python调用

了解zabbix的api后,用python实现还是比较简单,输入参数,发起请求,返回结果。

用户登陆退出代码类似如下:

def login():
    url = settings.ZABBIX_URL+"/api_jsonrpc.php"
    data = json.dumps(
    {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
        "user": settings.ZABBIX_USERNAME,
        "password": settings.ZABBIX_PASSWORD
        },
    "id": 0
    })
    result = requestUrl(url, data)
    return result
 
def logout(sessionid):
    url = settings.ZABBIX_URL+"/api_jsonrpc.php"
    data=json.dumps(
    {
        "jsonrpc": "2.0",
        "method": "user.logout",
        "params": [],
        "id": 1,
        "auth": sessionid
    }
    )
    return requestUrl(url, data)

创建主机的代码类似如下:

def genHost(sessionid,ip,groupids):
    url = settings.ZABBIX_URL+"/api_jsonrpc.php"
    groups_list=[]
    for groupid in groupids:
        groups_list.append({"groupid":groupid})
    params_dict={
        "host": ip,
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": ip,
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": groups_list,
        "templates": [
            {
                "templateid": "10114"
            }
        ],
    }
    data=json.dumps(
    {
        "jsonrpc": "2.0",
        "method": "host.create",
        "params": params_dict,
        "auth": sessionid,
        "id" : 3
    })
    return requestUrl(url, data)

更新IP的时候写的比较麻烦,需要先分别获取hostid和hostinterfaceid,然后再分别调用host.update和hostinterfa.update方法修改。

zabbix api全部代码可以从这个地址下载:zabbixAPI.py

参考连接:

https://www.zabbix.com/documentation/2.4/manual/api/reference/host

评论列表(0条)

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code