200字
Zabbix 实现自动化运维
2026-04-04
2026-04-04

Zabbix 实现自动化运维

Zabbix 网络发现

Zabbix 网络发现介绍

之前都是手动一台一台主机的添加到 Zabbix 中进行监控,很是繁琐,可以利用自动发现功能,自动添加被监
控的主机

当众多的服务器都已经安装了agent或者snmp后,利用自动发现功能,Zabbix server 可以自动扫描预先
配置好的ip段,自动添加主机,自动关联模板,自动加到主机组里等等。

网络发现功能更快速的部署zabbix、简化zabbix管理、并且在经常变动的环境里面也不需要花太多的精
力,毕竟网络发现也能随时发现变化。

当然网络发现也不是万能的,虽然网络发现能干很多事情,但是它无法发现网络拓扑的变化。

由于自动发现效率比较低,严重消耗Zabbix Server资源和网络带宽,大规模环境中较少使用

自动发现虽然能自动完成发现并添加主机,但仍然存在一些问题

  • 发现时间长,效率较低
  • 扫描过程中容易漏扫
  • 当IP地址不固定难以实现
  • 无法实现不同类型主机关联不同模板

官方帮助

https://www.zabbix.com/documentation/5.0/zh/manual/discovery/network_discovery

实现 Zabbix 网络发现

注意:需要事先在监控的主机上安装Agent并配置Zabbix server的地址信息

自动发现由两个步骤组成:

  • 发现discovery: Zabbix周期性地扫描在"网络发现规则"中定义的IP段,发现满足规则的主机
  • 动作action: 对这些主机完成动作,包括添加主机、添加模板、发送通知等等。

案例: 自动发现需求

发现有Zabbix agent运行的主机
每10分钟执行一次
如果主机正常运行时间超过2分钟,添加主机
将Linux主机添加到“Linux servers”组
链接模板Template OS Linux 到Linux主机
如果主机停机时间超过24小时,删除主机

创建自动发现指定需要监控的网段

配置-- 自动发现-- 创建发现规则

指定名称,IP范围和逢动发现检查等信息

可见名称为IP地址

创建添加主机的自动发现动作

系统默认内置动作,也可以修改已有的被禁用自动发现动作

启用此动作

也可以创建新的动作

操作增加三个操作: 添加主机,添加群组,添加模板

也可以添加发送消息给Admin等操作

创建删除主机的自动发现动作

主机下线,不会自动删除主机,可以创建删除主机的自动发现动作

验证自动发现的结果

一段时间后,可以观察到下面结果,自动添加两台主机并关联相应的模板

将客户端关机后,过一天后,再观察是否自动删除此主机

监测 -- 自动发现, 可以看到下面的删除的主机

Zabbix 自动注册

Zabbix 自动注册介绍

当客户端众多时,将每台主机手动添加到Zabbix,还手动添加关联模板,无疑是低效的.

但是利用网络发现实现,Zabbix Server 资源消耗又比较严重

利用Zabbix的自动注册功能,实现添加主机的自动化,可以大幅减少运维的工作量,减少Zabbix Server 的资
源消耗

此方式和自动发现不同,是由Active agent主动发起请求zabbix server将这些agent加到主机里。

注意: Agent 必须使用主动模式才支持自动注册

自动注册由于比自动发现效率更好,Zabbix Server资源消耗更少,更适合大规模及云环境IP地址不固定的
场景使用

https://www.zabbix.com/documentation/5.0/zh/manual/discovery/auto_registration

在Zabbix agent 端的配置文件修改以下项目

Server=<Zabbix Server IP>
ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件
Hostname=<agent IP>
#HostnameItem=system.hostname
HostMetadata==<key> #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能
HostMetadataItem=<监控项Item> #非必须项,监控项的值可以做为添加主机的验证标识和分类

案例: 实现 Linux 主机自动注册

修改 Zabbix Agent 的配置

范例:

[root@centos8 ~]#vim /etc/zabbix/zabbix_agentd.conf
Server=zabbix.wang.org
ServerActive=zabbix.wang.org
Hostname=web08.wang.org #指定主机名,要确保唯一,如果不指定,则Zabbix使用agent的系统主机名,Agent2不支持IP格式(否则服务无法启动),只能写主机名格式
#HostnameItem=system.hostname #指定主机名
HostMetadata=123456
#HostMetadataItem=system.uname
[root@centos8 ~]#systemctl restart zabbix-agent.service

[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k system.uname
Linux rocky8.wang.org 4.18.0-348.el8.0.2.x86_64 #1 SMP Sun Nov 14 00:51:12 UTC
2021 x86_64
[root@zabbix-server ~]#zabbix_get -s 10.0.0.8 -k system.hostname
rocky8.wang.org

在 Zabbix Server 配置动作

在配置---动作---选择自动注册动作

创建新动作

指定动作中条件的主机名的值

或者使用元数据添加

指定操作

指定操作,添加主机,添加主机到主机群组,关系相关模板

验证结果

稍过一会儿,再观察可以看到下面显示添加主机成功

稍过一会儿,再观察可以看到下面显示添加主机成功

案例: 将 Windows 主动自动注册

修改Agent 配置

重启服务

创建自动注册动作

配置--动作-- 自动创建动作 -- 创建动作

验证结果

Zabbix API 实现自动化运维

Zabbix API 介绍

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供
应用程序与开发人员基于某软件或硬件得以访问一组功能的能力,而又无需直接使用源代码,或理解内
部工作机制的细节。

Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:

  • 创建新的应用程序以使用Zabbix
  • 将Zabbix与第三方软件集成
  • 自动执行常规任务

Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着

  • 该API包含一组独立的方法
  • 客户端和API之间的请求和响应使用JSON格式进行编码

官方参考文档:

https://www.zabbix.com/documentation/6.0/zh/manual/api
https://www.zabbix.com/documentation/6.0/zh/manual/api/reference
https://www.zabbix.com/documentation/5.0/zh/manual/api
https://www.zabbix.com/documentation/4.0/zh/manual/api
https://www.zabbix.com/documentation/5.0/zh/manual/api/reference
https://www.zabbix.com/documentation/4.0/zh/manual/api/reference

Zabbix 支持各种语言的开发库

https://zabbix.org/wiki/Docs/api/libraries

Zabbix API 开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管
理数千台服务器而没有自动化是多么的困难。Zabbix API 为批量操作、第三方软件集成以及其他作用提
供可编程接口。Zabbix API 是在 1.8 版本中开始引进并且已经被广泛应用。所有的 Zabbix 移动客户端
都是基于 API,甚至原生的 WEB 前端部分也是建立在它之上。Zabbix API 中间件使得架构更加模块化也
避免直接对数据库进行操作。

API 采用 JSON-RPC 实现。这意味着调用任何函数,都需要发送 POST 请求,输入输出数据都是以 JSON
格式。

Zabbix API由许多名义上分组的独立API方法组成。每个方法执行一个特定任务。

例如,方法 host.create 隶属于 host 这个API分组 ,用于创建新主机。API分组有时被称为“类”。

大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数
据,但是某些API提供一套完全不同的一组方法。

Zabbix 常用API

user.login 							#用户登录
host.get(create|delete|update) 		#主机操作
hostgroup.get(create|delete|update) #主机组操作
item.get(create|delete|update) 		#监控项目操作
history.get 						#历史数据查询
event.get 							#事件查询
trigger.get 						#触发器查询

API 使用案例

注意:API路径和Web服务器相关

#如果是基于Nginx
http://${ZABBIX_SERVER}/api_jsonrpc.php
#如果是基于Apache
http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.ph

获取 Token

在访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。这可以使用user.login方法来完成。

假设以Zabbix的Admin用户登录。那么JSON请求将是这样的:

[root@zabbix-server ~]#cat zabbix-api-token.sh
#!/bin/bash

ZABBIX_SERVER=zabbix.wang.org

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '

{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php

[root@zabbix-server ~]#yum -y install jq
[root@zabbix-server ~]#./zabbix-api-token.sh | jq
{
    "jsonrpc": "2.0",
    "result": "6e936114704269310d372a19c409e93d", #此为获取的Token
    "id": 1
}

[root@zabbix-server ~]#yum -y install python3
[root@zabbix-server ~]#./zabbix-api-token.sh | python3 -m json.tool
{
    "jsonrpc": "2.0",
    "result": "6e936114704269310d372a19c409e93d", #此为获取的Token
    "id": 1
}

使用以上令牌获取所有主机列表

[root@zabbix-server ~]#cat zabbix-api-gethostlist.sh
#!/bin/bash
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
	"output": [ "host" ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
	"jsonrpc": "2.0",
	"result": [
        {
            "hostid": "10084",
            "host": "Zabbix server"
        },
        {
            "hostid": "10270",
            "host": "10.0.0.105"
        },
        {
            "hostid": "10272",
            "host": "10.0.0.106"
        }
    ],
    "id": 1
}

使用以上令牌获取所有主机信息

[root@zabbix-server ~]#cat zabbix-api-gethostinfo.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
    "output": [ "hostid", "host" ],
    "selectInterfaces": [ "interfaceid", "ip" ]
    },
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#chmod +x zabbix-api-gethostinfo.sh
[root@zabbix-server ~]#./zabbix-api-gethostinfo.sh
{
    "jsonrpc": "2.0",
    "result": [
    {
        "hostid": "10084",
        "host": "Zabbix server",
        "interfaces": [
            {
                "interfaceid": "1",
                "ip": "127.0.0.1"
            }
          ]
        },
        {
            "hostid": "10270",
            "host": "10.0.0.105",
            "interfaces": [
       			 {
                        "interfaceid": "2",
                        "ip": "10.0.0.105"
        		}
        	]
        },
        {
        "hostid": "10272",
        "host": "10.0.0.106",
        "interfaces": [
        {
        "interfaceid": "3",
        "ip": "10.0.0.106"
        }
        ]
        }
    ],
    "id": 1
}

获取指定主机信息

[root@zabbix-server ~]#cat ./zabbix-api-gethost.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.105

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
    "filter": {
    	"host": [ "'$HOST'" ]
    }
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool


[root@zabbix-server ~]#./zabbix-api-gethost.sh
{
    "jsonrpc": "2.0",
    "result": [
        {
            "hostid": "10270",
            "proxy_hostid": "0",
            "host": "10.0.0.105",
            "status": "0",
            "disable_until": "0",
            "error": "",
            "available": "1",
            "errors_from": "0",
            "lastaccess": "0",
            "ipmi_authtype": "-1",
            "ipmi_privilege": "2",
            "ipmi_username": "",
            "ipmi_password": "",
            "ipmi_disable_until": "0",
            "ipmi_available": "0",
            "snmp_disable_until": "0",
            "snmp_available": "0",
            "maintenanceid": "0",
            "maintenance_status": "0",
            "maintenance_type": "0",
            "maintenance_from": "0",
            "ipmi_errors_from": "0",
            "snmp_errors_from": "0",
            "ipmi_error": "",
            "snmp_error": "",
            "jmx_disable_until": "0",
            "jmx_available": "0",
            "jmx_errors_from": "0",
            "jmx_error": "",
            "name": "10.0.0.105-wang-web5",
            "flags": "0",
            "templateid": "0",
            "description": "",
            "tls_connect": "1",
            "tls_accept": "1",
            "tls_issuer": "",
            "tls_subject": "",
            "tls_psk_identity": "",
            "tls_psk": "",
            "proxy_address": "",
            "auto_compress": "1"
        }
    ],
    "id": 1
}

获取所有用户信息

[root@zabbix-server ~]#cat ./zabbix-api-getusers.sh
#!/bin/bash
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.get",
"params": {
	"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-getusers.sh
{
"jsonrpc": "2.0",
"result": [
{
"userid": "1",
"alias": "Admin",
"name": "Zabbix",
"surname": "Administrator",
"url": "",
"autologin": "1",
"autologout": "0",
"lang": "zh_CN",
"refresh": "30s",
"type": "3",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
},
{
"userid": "2",
"alias": "guest",
"name": "",
"surname": "",
"url": "",
"autologin": "0",
"autologout": "15m",
"lang": "en_GB",
"refresh": "30s",
"type": "1",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
},
{
"userid": "3",
"alias": "wangxiaochun",
"name": "xiaochun",
"surname": "wang",
"url": "",
"autologin": "0",
"autologout": "0",
"lang": "zh_CN",
"refresh": "30s",
"type": "2",
"theme": "default",
"attempt_failed": "0",
"attempt_ip": "",
"attempt_clock": "0",
"rows_per_page": "50"
}
],
"id": 1
}

获取所有模板

[root@zabbix-server ~]#cat ./zabbix-api-gettemplates.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
	"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-gettemplates.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "Template OS Linux",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux",
"flags": "0",
"templateid": "10001",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template App Zabbix Server",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template App Zabbix Server",
"flags": "0",
"templateid": "10047",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template App Zabbix Proxy",
"status": "3",
.....

获取指定的模板

[root@zabbix-server ~]#cat zabbix-api-gettemplate.sh
#!/bin/bash
ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
    "output": "extend",
    "filter": {
    "host": [ "Template OS Linux SNMP", "Template OS Linux by Zabbix agent" ] #指定模板名称
    }
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-gettemplate.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "Template OS Linux",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux",
"flags": "0",
"templateid": "10001",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
},
{
"proxy_hostid": "0",
"host": "Template OS Linux SNMPv2",
"status": "3",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "Template OS Linux SNMPv2",
"flags": "0",
"templateid": "10248",
"description": "Template OS Linux version: 0.15",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "",
"auto_compress": "1"
}
],
"id": 1
}

更新指定主机

[root@zabbix-server ~]#cat zabbix-api-disablehost.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": "10272", #指定要禁用的主机ID
"status": 1 #0表示启用,1表示禁用
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

删除指定主机

[root@zabbix-server ~]#cat zabbix-api-delhost.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": ["10272"], #指定要删除的主机ID
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-delhost.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10272"
]
},
"id": 1
}
#验证是否删除
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
}
],
"id": 1
}

添加一台和批量添加多台新主机

API添加主机前,需要预先知道要添加的主机IP、此主机预先安装并配置好zabbix agent、预先知道要关联
的模板ID/组ID等信息,然后同API提交请求添加

参考链接

https://www.zabbix.com/documentation/5.0/zh/manual/api/reference/hostinterface/object#host-interface

范例

[root@zabbix-server ~]#cat ./zabbix-api-addhost.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.106

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
    "host": "'web-api-$HOST'", #创建主机名称
    "name": "'web-api-$HOST'", #可见的名称
    "interfaces": [
        {
        "type": 1, #类型为1表示agent,2是SNMP,3是IPMI,4是JMX
        "main": 1, #主要接口
        "useip": 1, #0是使用DNS,1是使用IP地址
        "ip": "'$HOST'", #添加的zabbix agent的IP地址
        "dns": "",
        "port": "10050" #agent使用的端口
        }
    ],
    "groups": [
        {
        "groupid": "2" #添加到的组的ID
        }
    ],
    "templates": [
        {
        "templateid": "10001" #关联的模板的ID
        }
    ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-addhost.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10273"
]
},
"id": 1
}
[root@zabbix-server ~]#./zabbix-api-gethostlist.sh
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server"
},
{
"hostid": "10270",
"host": "10.0.0.105"
},
{
"hostid": "10273",
"host": "10.0.0.106"
}
],
"id": 1
}

Zabbix WEB管理页面验证结果

范例: 批量添加主机

[root@zabbix-server ~]#cat ./zabbix-api-addhosts.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
NET=10.0.0

for HOST in $NET.{200..210};do

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
    "host": "'$HOST'",
    "name": "'web-$HOST'",
    "interfaces": [
        {
        "type": 1,
        "main": 1,
        "useip": 1,
        "ip": "'$HOST'",
        "dns": "",
        "port": "10050"
        }
    ],
    "groups": [
        {
        "groupid": "2"
        }
    ],
    "templates": [
        {
        "templateid": "10001"
        }
    ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php
done
[root@zabbix-server ~]#bash ./zabbix-api-addhosts.sh

查看代理proxy主机

[root@zabbix-server ~]#cat ./zabbix-api-getproxy.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "proxy.get",
"params": {
			"output": "extend"
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool

[root@zabbix-server ~]#./zabbix-api-getproxy.sh
{
"jsonrpc": "2.0",
"result": [
{
"proxy_hostid": "0",
"host": "10.0.0.101",
"status": "5",
"disable_until": "0",
"error": "",
"available": "0",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "",
"flags": "0",
"templateid": "0",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": "",
"proxy_address": "10.0.0.101",
"auto_compress": "1",
"proxyid": "10276"
}
],
"id": 1
}

添加指定代理的主机

[root@zabbix-server ~]#cat zabbix-api-addhost_proxy.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.107
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
    "host": "'web-api-$HOST'",
    "name": "'web-api-$HOST'",
    "proxy_hostid": "10276", #指定代理的ID
    "interfaces": [
        {
        "type": 1,
        "main": 1,
        "useip": 1,
        "ip": "'$HOST'",
        "dns": "",
        "port": "10050"
        }
    ],
    "groups": [
        {
        "groupid": "2"
        }
    ],
    "templates": [
        {
        "templateid": "10001"
        }
    ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
[root@zabbix-server ~]#./zabbix-api-addhost_proxy.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10277"
]
},
"id": 1
}

批量添加指定代理的主机

[root@zabbix-server ~]#cat ./zabbix-api-addhosts_proxy.sh
#!/bin/bash

ZABBIX_SERVER=10.0.0.100
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')

IPLIST="
10.0.0.1
10.0.0.3
10.0.0.5
"

for i in $IPLIST ;do
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
    "host": "'${i}'",
    "name": "'web-proxy-api-${i}'",
    "proxy_hostid": "10276",
    "interfaces": [
        {
        "type": 1,
        "main": 1,
        "useip": 1,
        "ip": "'${i}'",
        "dns": "",
        "port": "10050"
        }
    ],
    "groups": [
        {
        "groupid": "2"
        }
    ],
    "templates": [
        {
        "templateid": "10001"
        }
    ]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
done

[root@zabbix-server ~]#./zabbix-api-addhosts_proxy.sh
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10279"
]
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10280"
]
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"hostids": [
"10281"
]
},
"id": 1
}

Zabbix WEB管理页面验证结果

评论