• 基于Zabbix WebUI的API实现自动化添加主机实战案例


          基于Zabbix WebUI的API实现自动化添加主机实战案例

                                   作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

      在之前的笔记里我分享了如何批量添加zabbix agent主机,今天我们就实现如何基于zabbix webUI的API接口实现批量添加主机。有的小伙伴在生成环境中喜欢使用自动发现,我并不推荐大家使用自动发现功能,虽然配置起来挺简单的但的确是很消耗zabbix server服务器的性能,而且批量添加的主机你很难规划添加进来的主机是干嘛的,很不方便管理。

      因此我强烈使用zabbix webUI的API实现批量主机的添加,这样你可以清除的知道添加进来的主机,方便运维人员进行管理。接下来我们来一起看如何使用API吧。

    一.zabbix api概述

      Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
        创建新的应用程序以使用Zabbix;
        将Zabbix与第三方软件集成;
        自动执行常规任务。
    
      Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON
    -RPC 2.0协议,这意味着两件事:     该API包含一组独立的方法;     客户端和API之间的请求和响应使用JSON格式进行编码。   博主推荐阅读:     https://www.zabbix.com/documentation/4.0/zh/manual/api     https://www.jsonrpc.org/specification     https://www.json.org/json-en.html

      自行安装zabbix server,并确保服务可以Zabbix WebUI可以正常访问,如下图所示。
    
      博主推荐阅读:
        https://www.cnblogs.com/yinzhengjie2020/p/12302137.html

    二.查看主机信息

    1>.官方文档

      博主推荐阅读:
        https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host

    2>.先验证(在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。)

    [root@zabbix201.yinzhengjie.org.cn ~]# curl -s X POST -H 'Content-Type:application/json' -d '
    {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",
            "password": "yinzhengjie"
        },
        "id": 1
    }' http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php | python -m json.tool
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": "ccabb74e005547096dc587791e23d952"
    }
    [root@zabbix201.yinzhengjie.org.cn ~]# 

    3>.zabbix webUI端添加主机监控

    4>.使用API获取多个主机信息

    curl -s X POST -H 'Content-Type:application/json' -d '
    {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "filter": {
                "host": [
                    "Zabbix server",
                    "dbus03.yinzhengjie.org.cn"
                ]
            }
        },
        "auth": "ccabb74e005547096dc587791e23d952",
        "id": 1
    }' http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php | python -m json.tool

    5>.查看"dbus03.yinzhengjie.org.cn"的主机名称

    6>.获取"dbus03.yinzhengjie.org.cn"的主机信息

    curl -s X POST -H 'Content-Type:application/json' -d '
    {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "filter": {
                "host": [
                    "dbus03.yinzhengjie.org.cn"
                ]
            }
        },
        "auth": "ccabb74e005547096dc587791e23d952",
        "id": 1
    }' http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php | python -m json.tool

    7>.将获取token的操作封装成shell脚本

    [root@zabbix201.yinzhengjie.org.cn ~]# cat token.sh
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-27
    #FileName:        sysinfo.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    URL="http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php"
    
    POST_HEADER="Content-Type:application/json"
    
    result=`curl -s -X POST -H ${POST_HEADER} -d '
     {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",
        "password": "yinzhengjie"
        },
        "id": 1
    }' ${URL}`
    
    echo $result | python -m json.tool | grep result | awk '{print $2}'
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# sh token.sh
    "ce118ca31eab3ed8af5b4174019e53fa"
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# 

    8>.将获取token封装成python脚本

    [root@zabbix201.yinzhengjie.org.cn ~]# cat token.py 
    #!/usr/bin/env python
    #_*_coding:utf-8_*_
    #@author :yinzhengjie
    #blog:http://www.cnblogs.com/yinzhengjie
    #EMAIL:y1053419035@qq.com
    
    import requests
    import json
    
    #指定zabbix的URL
    url = 'http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php'
    
    #指定API的json格式协议
    post_data = {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",
            "password": "yinzhengjie"
        },
        "id": 1
    }
    
    #封装POST方法的header信息
    post_header = {'Content-Type': 'application/json'}
    
    #使用requests模块将上面的信息进行序列化封装并发送请求,将结果保存到ret对象中
    ret = requests.post(url, data=json.dumps(post_data), headers=post_header)
    
    #使用json进行反序列化操作,将ret对象中的数据进行反序列化取出数据。
    zabbix_ret = json.loads(ret.text)
    
    #如果返回的数据没有"result"就报错,否则就打印返回的结果
    if not zabbix_ret.has_key('result'):
        print 'login error'
    else:
        print zabbix_ret.get('result')
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# apt -y install python-pip
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# pip install requests
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# python token.py
    7b9fd0aa23ad1e351b47f5605a978348
    [root@zabbix201.yinzhengjie.org.cn ~]# 

    三.查看用户信息

    1>.查看官方文档

      博主推荐阅读:
        https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/user

    2>.查看zabbix webUI的用户

    3>.使用API获取现已有用户信息

    curl -s X POST -H 'Content-Type:application/json' -d '
    {
        "jsonrpc": "2.0",
        "method": "user.get",
        "params": {
            "output": "extend"
        },
        "auth": "ccabb74e005547096dc587791e23d952",
        "id": 1
    }' http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php | python -m json.tool

    四.查看模板信息

    1>.查看官方文档

      博主推荐阅读:
        https://www.zabbix.com/documentation/4.0/manual/api/reference/template

    2>.在zabbix webUI查看模板

    3>.使用zabbix API获取模板

    curl -s X POST -H 'Content-Type:application/json' -d '
    {
        "jsonrpc": "2.0",
        "method": "template.get",
        "params": {
            "output": "extend",
            "filter": {
                "host": [
                    "Template OS Linux"
                ]
            }
        },
        "auth": "ccabb74e005547096dc587791e23d952",
        "id": 1
    }' http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php | python -m json.tool

    五.基于zabbix webUI的API实现自动化添加主机

    1>.查看主机群组的id编号

    2>.查看模板的id编号(生产环境建议大家自定义一个模板,然后可以基于这个自定义模板链接多个模板,我们在zabix api指定模板时只需要指定咱们自定义的模板id即可)

    3>.修改zabbix agent的主机名

    [root@dbus03.yinzhengjie.org.cn ~]# grep ^Hostname /etc/zabbix/zabbix_agentd.conf 
    Hostname=172.200.1.3
    [root@dbus03.yinzhengjie.org.cn ~]# 

     

    4>.查看zabbix WebUI的主机界面

    5>.编写zabbix webUI的API脚本,实现批量添加zabbix webUI的主机管理 

    [root@zabbix201.yinzhengjie.org.cn ~]# python token.py                 #生成token,下面的脚本要和咱们生成的token信息一致哟~
    f694fd866141e2ce7fd6e0db9e617c1e
    [root@zabbix201.yinzhengjie.org.cn ~]# 
    [root@zabbix201.yinzhengjie.org.cn ~]# cat zabbix_add_host.sh 
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-27
    #FileName:        sysinfo.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    #填写主机的IP地址,如果有多台主机可以添加多个,如果主机较多,可以写在配置文件进行读取
    IP="
    172.200.1.1
    172.200.1.2
    172.200.1.3
    "    
    
    #指定zabbix server的API地址
    URL="http://zabbix201.yinzhengjie.org.cn/zabbix/api_jsonrpc.php"
    
    #指定POST方法的头部信息,主要声明提交的是JSON格式的数据
    POST_HEADER="Content-Type:application/json"
    
    #接下里就是批量添加主机的操作了
    for node_ip in ${IP};do
        curl -s -X POST -H ${POST_HEADER} -d '
        {
            "jsonrpc": "2.0",
        "method": "host.create",
        "params": 
            {
                "host": "'${node_ip}'", 
                    "name": "DBus_'${node_ip}'",
                "interfaces": [
                    {
                            "type": 1,
                        "main": 1,
                        "useip": 1, 
                        "ip": "'${node_ip}'", 
                        "dns": "",
                        "port": "10050"
                        }
                ],
                "groups": [
                    {
                            "groupid": "15"
                    }
                    ],
            "templates": [
                    {
                            "templateid": "10001"
                    }
                ]
                },
        "auth": "f694fd866141e2ce7fd6e0db9e617c1e",
        "id": 1
        }' ${URL} | python -m json.tool
    done
    [root@zabbix201.yinzhengjie.org.cn ~]# 


    温馨提示:
      上述API参数说明可参考官方文档:
        https://www.zabbix.com/documentation/4.0/manual/api/reference/host/object

    6>.批量添加脚本

    [root@zabbix201.yinzhengjie.org.cn ~]# bash zabbix_add_host.sh 
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "hostids": [
                "10278"
            ]
        }
    }
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "hostids": [
                "10279"
            ]
        }
    }
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "hostids": [
                "10280"
            ]
        }
    }
    [root@zabbix201.yinzhengjie.org.cn ~]# 

    7>.再次查看zabbix WebUI的主机界面

    8>.查看使用API自动添加的主机,验证是否能采集到数据

  • 相关阅读:
    原来这样就可以开发出一个百万量级的Android相机
    微信读书这样排版,看过的人都很难忘!
    AI小白快上车!这是发往高薪职位的车!
    短视频APP是如何开启你的美好生活的?
    自从我这样撸代码以后,公司网页的浏览量提高了107%!
    如果想成为一名顶尖的前端,这份书单你一定要收藏!
    老板今天问我为什么公司的数据库这么烂,我是这样回答的......
    MapReduce Notes
    HDFS Architecture Notes
    BloomFilter
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12392251.html
Copyright © 2020-2023  润新知