基于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自动添加的主机,验证是否能采集到数据

 

posted @ 2020-03-01 21:34  JasonYin2020  阅读(492)  评论(0编辑  收藏  举报