Zabbix 调用API 批量添加主机

来自linux中国网wiki
Evan讨论 | 贡献2021年6月16日 (三) 14:08的版本 →‎see also
跳到导航 跳到搜索

pre

已有 salt Salt yum安装

可以见 批量添加 salt Salt-ssh批量自动安装被控端minion

批量添加zabbix agent

直接用cmd.run

  salt 'prod-mq03' cmd.run 'yum install  -y zabbix-agent' #systemctl  restart zabbix-agent  systemctl  enable zabbix-agent

zabbix state.sls

有空要试一下 



salt 使用state文件来配置zabbix客户端文件

salt 使用state文件来配置zabbix客户端文件

SaltStack批量安装zabbix-agent(yum安装)

SaltStack安装zabbix-agent-第九篇

SaltStack 使用pillar安装配置管理zabbix

saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

salt 使用state文件来源码安装和配置zabbix客户端文件

批量修改zabbix agent配置

Server=148.66.11.55
ServerActive=148.66.11.55
Hostname=prod-sns-mq01



sed -i '/^Hostname/ s/.*/Hostname=zabbix_hk/' /etc/zabbix/zabbix_agentd.conf

#zbx hostname
 salt 'prod-mq03' cmd.run 'hostname'
prod-mq03:
    prod-mq03


#这里可以取出 hostname 作变量 和作循环 
Server=148.66.01.05
ServerActive=148.66.01.05

myhost=`salt 'prod-mq03' cmd.run 'hostname' |sed -n '2p' |awk '{print $1}'`
salt 'prod-sns-mq02' cmd.run "sed -i '/^Hostname/ s/.*/Hostname=$myhost/'  /etc/zabbix/zabbix_agentd.conf"

#这个替换太多了 不太好写匹配  要如下添加 =  or  直接 inser 就是了 
salt 'prod-mq03' cmd.run "sed -i '/^Server=/ s/.*/Server=$Server/'  /etc/zabbix/zabbix_agentd.conf"
salt 'prod-mq03' cmd.run "sed -i '/^ServerActive=/ s/.*/ServerActive=$ServerActive/'  /etc/zabbix/zabbix_agentd.conf"


注意  ""  结果不太对的 
 salt 'prod-sns-mq02' cmd.run "hostname |sed -n '2p' |awk '{print $1}'"
prod-sns-mq02:

利用api批量添加主机

zbx_server version 4.0

get token 获得自己的token

py2

 cat aip.sh 
# -*- coding:utf-8 -*-
#py2 
import urllib2
import json
#u zbx server ip or domain 
url = 'http://myzabbix.com/api_jsonrpc.php'
header = {'Content-Type': 'application/json'}

req = json.dumps(
    {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",
            "password": "123456"
        },
        "id": 0,
    }
)

def auth():
    r = urllib2.Request(url=url, headers=header, data=req)
    response = urllib2.urlopen(r)
    token = json.loads(response.read())
    print(token)

if __name__ == '__main__':

    auth()

#token
{u'jsonrpc': u'2.0', u'result': u'1794bcbe6d818069bff5aa499a07a960', u'id': 0}

py3

#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = ''
import json
from urllib import request, parse
 
ZABBIX_URL = 'http://z.cn'
ZABBIX_USERNAME = "Admin"
ZABBIX_PASSWORD = "zabbix"
 
url = "{}/api_jsonrpc.php".format(ZABBIX_URL)
header = {"Content-Type": "application/json"}
# auth user and password
data = {
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": ZABBIX_USERNAME,
        "password": ZABBIX_PASSWORD
    },
    "id": 1,
}
# 由于API接收的是json字符串,故需要转化一下
value = json.dumps(data).encode('utf-8')
 
# 对请求进行包装
req = request.Request(url, headers=header, data=value)
 
# 验证并获取Auth ID
try:
    # 打开包装过的url
    result = request.urlopen(req)
except Exception as e:
    print("Auth Failed, Please Check Your Name And Password:", e)
else:
    response = result.read()
    # 上面获取的是bytes类型数据,故需要decode转化成字符串
    page = response.decode('utf-8')
    # 将此json字符串转化为python字典
    page = json.loads(page)
    result.close()
    print("Auth Successful. The Auth ID Is: {}".format(page.get('result')))


python3  tmp/zapi3.py
Auth Successful. The Auth ID Is: cef1be0881b355e801678036cdc8c685

Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌

zabbix api token获取

我们获取必要的相关信息 ,eg所有主机list信息

获得 groupid

cat getgroupid.sh
#获取指定groupid 
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "Zabbix servers",
                "Linux servers",
                "sns servers"
            ]
        }
    },                                         
    "auth": "1794bcbe6d818069bff5aa423a07a960",
    "id": 1
}'  http://myzabbix.com//api_jsonrpc.php | python3 -m json.tool

#这里的id一定是1

zabbix--api学习之路--get_hostgroup获取

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

templateid

#!/bin/bash
#跑在我的freebsd12
#获取指定groupid 
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "Zabbix servers",
                "Linux servers"
            ]
        }
    },                                         
    "auth": "1794bcbe6d818069bff5aa423a07a960",
    "id": 1
}'  http://148.66.11.55/zabbix/api_jsonrpc.php | python3 -m json.tool


#output
 "result": [
        {
            "groupid": "2",
            "name": "Linux servers",
            "internal": "0",
            "flags": "0"
        },
        {
            "groupid": "4",
            "name": "Zabbix servers",

hostadd

https://www.zabbix.com/documentation/4.0/manual/api/reference/host/create

批量添加版  用法  分别添加 ip and hostname 


#!/bin/bash
#注释中文导致不成功
#"host": "'prod-sns-mq02'",    #这里一般改为你要的hostname
IP=(
40.243.52
41.102.111
40.218.197
40.216.19
) 
HOSTNAME=(
prod-sns-php01
prod-sns-php02
prod-sns-mq01
prod-sns-mq03
)

myend=`expr ${#IP[@]} - 1` 

for  no in `seq 0 ${myend}`
#for  no in `seq 2 3` #这个是手工决定 数量 
do 

 curl -s -X POST -H 'Content-Type:application/json' -d '
 {
     "jsonrpc": "2.0",
     "method": "host.create",
     "params": {
         "host": "'${HOSTNAME[$no]}'",   
  
         "interfaces": [
             {
                 "type": 1,
                 "main": 1, 
                 "useip": 1, 
                 "ip": "'${IP[$no]}'", 
                 "dns": "",
                 "port": "10050" 
             }
         ],
         "groups": [
             {
                 "groupid": "2", 
                 "groupid": "16" 
             }
         ],
         "templates": [
             {
                 "templateid": "10001"
             }
         ]
      },
     "auth": "1794bcbe6d818069bff5aa4207a960", 
     "id": 1
 }' http://zbx.com/zabbix/api_jsonrpc.php | python -m json.tool
 
 done

#要添加多一个群组







#!/bin/bash
#注释中文导致不成功
#"host": "'prod-sns-mq02'",    #这里一般改为你要的hostname
IP="
121.41.103.113
"   
for node_ip in ${IP};
do
 curl -s -X POST -H 'Content-Type:application/json' -d '
 {
     "jsonrpc": "2.0",
     "method": "host.create",
     "params": {
         "host": "'prod-sns-es01'",   
  
         "interfaces": [
             {
                 "type": 1,
                 "main": 1, 
                 "useip": 1, 
                 "ip": "'${node_ip}'", 
                 "dns": "",
                 "port": "10050" 
             }
         ],
         "groups": [
             {
                 "groupid": "2", 
                 "groupid": "16" 
             }
         ],
         "templates": [
             {
                 "templateid": "10001"
             }
         ]
      },
     "auth": "1794bcbe6d818069bff5aa423a07a960", 
     "id": 1
 }' http://148.66.11.55/zabbix/api_jsonrpc.php | python -m json.tool
done

#要添加多一个群组

批量改 agent 配置

ssh 方式


IP=(
172.31.27.83
172.31.25.239
172.31.16.171
172.31.26.183
172.31.31.249
172.31.25.199
172.31.22.218
172.31.24.104
172.31.19.164
)

myend=`expr ${#IP[@]} - 1` 

for  no in `seq 0 ${myend}`
do
ssh -i  id_rsa -o "StrictHostKeyChecking no"  root@${IP[$no]} "sed -i 's!Server=148.66.11.55!Server=38.20.125.2!' /etc/zabbix/zabbix_agentd.conf && systemctl  restart zabbix-agent"


done 

进阶

写成通用的py脚本 ?

利用zabbix API(python)批量查询主机、模板、添加删除主机

通过zabbix自带api进行主机的批量添加操作信息填写成列表


zabbix高级使用五:通过zabbix API添加监控主机has used


Zabbix 调用API 批量添加主机等

zabbix api获取指定组中的主机的名字并将其修改

zabbix 添加主机 API基础

Zabbix 调用API 批量添加主机 (读取Excel)


zabbix调用api接口批量添加主机

zabbix api 数据展示

应该最终是出图

python做监控界面_Zabbix与Python不得不说的基情——用Python定制自己的zabbix界面

see also

python脚本对接zabbix API添加监控

调用ZABBIX的API获取节点主机信息小记

zabbix api的使用

通过Zabbix API 添加host

python3 + zabbix api 的使用