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

摘要:
在前面的笔记中,我分享了如何批量添加Zabbixagent主机。今天,我们将实现如何基于ZabbixwebUI的API接口批量添加主机。因此,我强烈使用Zabbix web UI API来添加批处理主机,这样您就可以清除已添加的主机,方便操作和维护人员进行管理。I ZabbixapiOverview Zabbix API允许您以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。Zabbix API是一个基于Web的API,作为Web前端的一部分提供。让我们假设您希望以标准ZabbixAdmin用户身份登录。

      基于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 WebUI的API实现自动化添加主机实战案例第1张

  自行安装zabbix server,并确保服务可以Zabbix WebUI可以正常访问,如下图所示。

  博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie2020/p/12302137.html

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

二.查看主机信息

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 ~]# 

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

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

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

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

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

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

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

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

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

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 ~]# 

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

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 ~]# 

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

三.查看用户信息

1>.查看官方文档

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

2>.查看zabbix webUI的用户

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

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

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

四.查看模板信息

1>.查看官方文档

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

2>.在zabbix webUI查看模板

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

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实现自动化添加主机实战案例第13张

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

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

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

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

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

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 ~]# 

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

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

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

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 ~]# 

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

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

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

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

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

免责声明:文章转载自《基于Zabbix WebUI的API实现自动化添加主机实战案例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下的crontab定时、执行任务命令详解 oracle 自动备份总结一下内核DEBUG中的dump_stack, BUG, BUG_ON以及panic下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用python操作mysql数据库

一、pymysql的使用 1.首先在python中安装pymysql模块(CMD窗口命令下)。 pip install pymsql 安装完成后导入import pymysql 2.pyysql 连接数据库的必要参数: 主机、端口、用户名。密码、数据库 注意:pymysql不能提供创建数据库的服务,数据库要提前创建 3.连接步骤: ​ -1. 建立数据库连...

Python之 break退出循环

Python之 break退出循环 用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用break语句。 比如计算1至100的整数和,我们用while来实现: sum = 0 x = 1 while True: sum = sum + x x = x + 1 if x > 100:...

如何更优雅地切换测试、正式环境?

初学者是怎么做的? 小明一个刚入行安卓的小萌新,刚刚在测试小姐姐那里交过学费(挨过骂)了解到软件开发过程中是需要区分正式、测试环境的。但是他稍加思考就能想到测试、正式环境的区别仅仅是host不一样而已,其他的比如接口名、参数名、返回的json格式均一模一样。于是他马上找到了解决方案,平时都用测试环境的,到上线的时候再换回正式环境不就可以了?在一次开发中需要...

windows配置Python多版本共存

                    windows配置Python多版本共存                                         作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。   最近Python开发蛮火的,三年前我的一个运维朋友就告诉我说Python语言将来会很火,当时就三分钟热度,用Python写过一...

python csv文件打开错误:_csv.Error: line contains NULL byte

正常的csv文件读取如下: #coding:utf-8 importcsv csvfilename = 'demo.csv' print u'################获取某一行'with open(csvfilename, 'rb') as csvfile: reader =csv.reader(csvfile) rows =...

第15.34节 PyQt(Python+Qt)入门学习:containers容器类部件QStackedWidget堆叠窗口部件详解

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、概述 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWidget。QStackedWidget类对应部件为放在堆栈中的多个窗口部件,这些放在堆栈中的窗口部件在界面上只能看到一个窗口。 二、属性 2.1、概...