zoukankan      html  css  js  c++  java
  • python3调用zabbix api

    前言

    今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西。

    需求

    我们需要查一个文件内容如下:

    cat /ops/flume_hosts
    node1
    node2
    

    需要把这个文件里面的host添加到flume的group里面并且关联flume的template做监控,以后我们部署flume的机器只需要改这个文件,然后一执行这个命令就OK了

    部署与实施

    写了小一天,又把代码该删删该减减,做成了如下样子(用了一个requests模块,python版本是3.6):

    #!/opt/python3/bin/python3
    # -*- coding: utf-8 -*-
    # Copyright (c) 2017 - hongzhi.wang 
    '''
    Author: hongzhi.wang
    Create Date: 2017/10/16
    Modify Date: 2017/10/16
    '''
    import json
    import requests
    
    
    REQUEST_URL = "https://192.168.3.3/api_jsonrpc.php"
    FLUME_GROUP_ID = 322 
    FLUME_TEMPLATE_ID = 108
    LOGIN_INFO = {
            "user": "admin",
            "password": "admin"
        }
    FLUME_HOST_FILE = "/ops/flume_hosts"
    
    
    def zabbix_post(method, params, auth=None):
        res = requests.post(
            url=REQUEST_URL,
            json={
                "jsonrpc": "2.0",
                "method": method,
                "params": params,
                "id": 1,
                "auth": auth
            }
        )
        print(method, res.status_code)
        return json.loads(res.text)
    
    with open(FLUME_HOST_FILE) as f:
        host_list = [host.strip() for host in f]
    
    auth_key = zabbix_post(method="user.login", params=LOGIN_INFO)["result"]
    try:
        host_id_dict_list = zabbix_post(
            method="host.get",
            params={
                "output": ["hostid"],
                "filter": {
                    "host": host_list
                }
            },
            auth=auth_key,
        )["result"]
        host_id_list = [item.get("hostid") for item in host_id_dict_list]
    
        zabbix_post(
            method="hostgroup.massupdate",
            params={
                "groups": [
                    {
                        "groupid": FLUME_GROUP_ID
                    }
                ],
                "hosts": host_id_dict_list
            },
            auth=auth_key
        )
        zabbix_post(
            method="template.update",
            params={
                "templateid": FLUME_TEMPLATE_ID,
                "hosts": host_id_list
            },
            auth=auth_key
        )
    finally:
        zabbix_post(
                method="user.logout",
                params=[],
                auth=auth_key
            )
    

    总结

    这次开始遇到的问题是登录进去,就会有authkey(用postman测试的,每个接口都测试了几次,发现半个月前的authkey还能用。。。),如果不logout的话,会存很多,仔细查了一下网上的资料,这个authkey是存在数据库的sessions表里面,程序会定期清除一年前的authkey,所以如果量不大的话可以等着自动删除,这个没有去看源码确认。

  • 相关阅读:
    【重点】2020年宝山区义务教育阶段学校校区范围与招生计划(初中)
    转: 彻底理解 Spring 容器和应用上下文
    转《深入理解 Java 内存模型》读书笔记
    Mysql Update 流程摘抄
    统一支付接口设计
    支付系统 简版设计
    订单1:n支付单 设计讨论
    RocketMQ 使用情况梳理
    转 Java jar (SpringBoot Jar)转为win可执行的exe程序
    Git flow 工作流与规范
  • 原文地址:https://www.cnblogs.com/WisWang/p/7684437.html
Copyright © 2011-2022 走看看