Zabbix 调用API 批量添加主机

来自linux中国网wiki
跳到导航 跳到搜索

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 api.py
# -*- 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 数据展示

如何通过zabbix的api获取前端最近20个问题?

python 通过zabbix api来获取当前trigger(告警)并打印出信息 django bootstrap 获取zabbix告警信息并展示


应该最终是出图

Python拉取zabbix数据并使用matplotlib模块绘图

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

前端调用zabbix告警数据


python脚本采集服务器数据通过API提交到django web服务器,然后展示在页面上 原创

基于zabbix用Python写一个运维流量气象图

从无到有写一个运维APP(一) 从无到有写一个运维APP(二)

从无到有写一个运维APP(三)完结篇 推荐 原创

Python采集linux服务器数据在Django Web界面展示 原创

python脚本采集服务器数据通过API提交到django web服务器,然后展示在页面上 原创 没有采集部分呀

Django在web页面展示linux服务器的文本内容 原创


如何把zabbix里的数据展示到前端

see also

python3获取zabbix API数据

python3 调用zabbix API实现批量增加删除主机,主机各种监控项

python脚本对接zabbix API添加监控

Python调用Zabbix API实现自定义功能

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

zabbix api的使用

通过Zabbix API 添加host

python3 + zabbix api 的使用

基于Zabbix api二次封装开发_获取数据和页面展示


zabbix二次开发详细例子说明


通过http请求 zabbix api 获取监控的流量数据

运维python进行(三) 用python写一个自己zabbix的调用方法 原创