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管理页面验证结果