VPS测评 VPS推荐 VPS优惠
Linux运维

zabbix自动化运维,使用API批量添加主机

通过API可以使用命令行或者脚本直接对host主机进行增删改查,不需要在web端手动操作,实现自动化运维。

使用方法参考zabbix的官方文档

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


API使用基础

用curl命令直接获取token

#http 是zabbix server的IP地址
#user 和 password 是登录zabbix web端的账号密码
#token 如果失效可以重新获取

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "xiaoqinwa"
},
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool

用python3脚本获取token

编辑token1.py

#!/usr/bin/env python3
#Author: frogvps.com
#centos7 用python3的方法
#安装epel yum install epel-release -y
#安装python3 yum - y install python3
#安装pip yum -y install python3-pip
#软链接 ln -s /usr/bin/pip3.6 /usr/bin/pip
#安装requests pip install requests

import requests
import json
url = 'http://175.24.227.179/zabbix/api_jsonrpc.php'
post_data = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "xiaoqinwa"
},
"id": 1
}
post_header = {'Content-Type': 'application/json'}
ret = requests.post(url, data=json.dumps(post_data), headers=post_header)
zabbix_ret = json.loads(ret.text)
if not zabbix_ret.__contains__('result'):
  print ('login error')
else:
  print (zabbix_ret.get('result')) 

注:下面所有json数据中的auth后面内容替换成你获取到的token

查看指定主机信息

#host 就是zabbix agent配置文件里的hostname

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"filter": {
"host": [
"154.17.29.27",
"frog-proxy"
]
}
},
"auth": "67335cf7fec3c6f871dcc63b97916ff3",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool

获取所有主机列表

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["host"]
},
"auth": "67335cf7fec3c6f871dcc63b97916ff3",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool

获取所有用户

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"output": "extend"
},
"auth": "67335cf7fec3c6f871dcc63b97916ff3",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool

获取单个模板信息

#host 写模板名称

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"host": [
"Template OS Linux by Zabbix agent active"
]
}
},
"auth": "67335cf7fec3c6f871dcc63b97916ff3",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python -m json.tool

通过API添加主机,没有设置proxy

#API添加主机为预先知道要添加的主机IP、预先安装并配置好zabbix agent、预先知道要关联的模板ID/组ID等信息,然后同API提交请求添加
#host 自定义添加后的agent的名称,必须和agent配置文件里的hostname一致
#type 类型为1表示agent,2是SNMP,3是IMPI,4是JMX
#useip #0是使用DNS,1是使用IP地址
#ip 添加的zabbix agent的IP地址
#port agent端口
#groupid 添加到的组的ID
#templateid 关联的模板的ID

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "API Add Host Test", 
"interfaces": [
{
"type": 1, 
"main": 1, 
"useip": 1, 
"ip": "146.56.143.177", 
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "18" 
}
],
"templates": [
{
"templateid": "10284"
}
]
},
"auth": "47c9c7bccc24003ad16899c88ae9696c",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool
去web端验证是否添加成功

通过API添加主机-zabbix proxy模式

#proxy_hostid zabbix proxy的ID

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "API Add Host Test", 
"proxy_hostid": "10441",
"interfaces": [
{
"type": 1, 
"main": 1, 
"useip": 1, 
"ip": "146.56.143.177", 
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "18" 
}
],
"templates": [
{
"templateid": "10284"
}
]
},
"auth": "47c9c7bccc24003ad16899c88ae9696c",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool

如何查看模板ID/组ID/主机ID

例如zabbix5.0的图形界面,在web端点击设施——模板——找到并点击你想要的模板名称,比如Template OS Linux by Zabbix agent active。点进去,在浏览器的地址栏上方可以看到 “templateid=10284” ,这个值就是模板ID。其他的ID获取方法类似,我就不多说明了。


zabbix API批量添加主机

在原先的curl命令基础上加一个for循环,可以通过shell脚本的方法批量添加多台主机,四五百台服务器只需要几分钟就能自动添加,节省了运维的时间。

参考脚本 addhost.sh

#!/bin/bash
#AUTHOR: 小青蛙 frogvps.com
#把所有要添加的主机地址赋值给IP变量
#注意,curl提交json数据中如果引用shell变量要使用单引号

IP="
146.56.143.177
152.70.233.16
"
for i in ${IP};do
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
      "host": "'${i}'", 
      "proxy_hostid": "10441",
      "interfaces": [
         {
            "type": 1, 
            "main": 1, 
            "useip": 1, 
            "ip": "146.56.143.177", 
            "dns": "",
            "port": "10050"
         }
       ],
"groups": [
   {
  "groupid": "18" 
   }
],
"templates": [
  {
"templateid": "10284"
  }
]
},
"auth": "47c9c7bccc24003ad16899c88ae9696c",
"id": 1
}' http://175.24.227.179/zabbix/api_jsonrpc.php | python3 -m json.tool
done
未经允许不得转载:青蛙主机 » zabbix自动化运维,使用API批量添加主机

VPS相关常用工具

PING测试工具自用毛子接码站