通过Zabbix API 添加host

简介:

脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/python
#-*- coding:utf8 -*-
import  json,sys,argparse
from zabbix_api  import  ZabbixAPI
server =  "http://172.16.206.128/zabbix"
username =  "Admin"
password =  "zabbix"
zapi = ZabbixAPI(server=server, path= "" , log_level=0)
zapi.login(username, password)
def get_args():
     parser = argparse.ArgumentParser()
     parser.add_argument( "-H" "--host" , help= "host name" )
     parser.add_argument( "-i" "--ip" , help= "host ip" )
     parser.add_argument( "-g" "--group" , help= "group name" )
     parser.add_argument( "-p" "--proxy" , help= "proxy host name" )
     parser.add_argument( "-t" "--templates" , help= "template name" )
     # 解析所传入的参数
     args = parser.parse_args()
     
     if  not args.host:
         args.host = raw_input( 'host: ' )
     if  not args.ip:
         args.ip = raw_input( 'ip: ' )
     if  not args.templates:
         args.templates = raw_input( 'templates: ' )
     return  args
 
def get_proxy_id(proxy):
     get_proxy_id = zapi.proxy.get(
     {
         "output" "proxyid" ,
         "selectInterface" "extend" ,
         "filter" : {
              "host" : proxy
             }
     }
)
     proxy_id=get_proxy_id[0][ 'proxyid' ]
     return  proxy_id
 
def get_group_id( groups ):
     group_id = zapi.hostgroup.get(
         {
             "output" "groupid" ,
             "filter" : {
                 "name" : groups . split ( "," )
             }
         }
)
     return  group_id
 
def get_templates_id(templates):
     templates_id = zapi.template.get(
     {
         "output" "templateid" ,
         "filter" : {
             "host" :templates. split ( "," )
         }
     }
)
     return  templates_id
 
def create_host_with_proxy( hostname ,group_id,templates_id,ip,proxy_id):
     host_create = zapi.host.create(
         {
             "host" : hostname ,
             "groups" :group_id,
             "templates" :templates_id,
             "interfaces" :[
                 {
                     "type" :1,
                      "main" :1,
                      "useip" :1,
                      "ip" :ip,
                      "dns" : "" ,
                      "port" : "10050"
                 }
             ],
             "proxy_hostid" :proxy_id,
             "status" :0
     }
)
     return  "host add success!"
 
def create_host_without_proxy( hostname ,group_id,templates_id,ip):
     host_create = zapi.host.create(
         {
             "host" hostname ,
             "groups" : group_id,
             "templates" : templates_id,
             "interfaces" :[
                 {
                     "type" :1,
                     "main" :1,
                     "useip" :1,
                     "ip" :ip,
                     "dns" : "" ,
                     "port" : "10050"
                  }
             ],
             "status" :0
     }
)
     return  "host add success!"
 
if  __name__ ==  "__main__" :
     args = get_args()
     hostname  = args.host
     ip = args.ip
     group_id = get_group_id(args.group)
     templates_id = get_templates_id(args.templates)
     if  args.proxy:
         proxy_id = get_proxy_id(args.proxy)
         print create_host_with_proxy( hostname ,group_id,templates_id,ip,proxy_id)
     else :
         print create_host_without_proxy( hostname ,group_id,templates_id,ip)


脚本内容解释:

要使用本脚本,需要安装zabbix-api模块

脚本思路:

通过zabbix API添加host,需要知道以下信息:

hostname:主机名(不是可见名)

ip:主机IP

group_id:host所属组的组id

templates_id:host关联模板的模板id

proxy_id:如果是通过proxy添加主机,则需要给出proxy_id,这个是可选项,所以我写了两个函数来区分有proxy和没有proxy的情况


hostname、ip这些可以直接通过命令行传参获取到,但是group_id、templates_id、proxy_id需要通过zabbix API的方法去获取到,比如:group_id需要事先知道group name,才能通过api查询到,脚本中我对于如何获取group_id、templates_id、proxy_id都用函数去实现了,所以在命令行传参时,只需要传递group name、templates name、proxy name就可以获取到对应的id了。


如果不清楚参数是怎么获取的,请查阅argparse模块相关资料


参考资料:https://github.com/CNSRE/Zabbix-PyZabbix/blob/master/zabbix_host_add.py










本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1850578,如需转载请自行联系原作者

目录
相关文章
|
9月前
|
JSON 监控 前端开发
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
295 0
|
监控 网络协议 API
利用zabbix api批量添加数百台监控主机
利用zabbix api批量添加监控主机 在公司规模很庞大的时候,每次都手动添加监控主机将会很麻烦,我们可以利用zabbix的api去批量添加监控主机 本次我们将实现用一台主机虚拟出100台主机,并通过api的方式自动添加监控主机
678 0
利用zabbix api批量添加数百台监控主机
|
监控 API 开发工具
zabbix离线安装 zabbix api批量添加主机
zabbix离线安装 zabbix api批量添加主机
404 0
Zabbix API初步入门
Zabbix API是实现Zabbix自动化监控的主要手段之一,你可以使用Zabbix Agent的自动注册功能,也可以使用网络自动发现功能,但是这些功能各有各的缺点。如果编写脚本对你来说没有压力,我跟建议Zabbix的所有自动化功能全部使用API的方式来完成。
1098 0
Zabbix API初步入门
|
监控 Python
zabbix python add host py
没有该主机组的时候要先添加主机组:./python_zabbix_host.py -A yourname vi python_zabbix_host.py !/usr/bin/python coding:utf-8 import json import...
1033 0
|
监控 API PHP
Zabbix 二次开发API(学习笔记三十)
Zabbix API我们可以做很多,自己开发web界面、开发手机端zabbix、获取zabbix指定数据、创建zabbix监控项等等。 1. zabbix API开发库 zabbix API请求和响应都是json,并且还提供了各种语法的lib库,http://zabbix.org/wiki/Docs/api/libraries,包含php、c#、Python、Perl、go等等语言,简单看了下phpzabbixapi,使用非常方便。
1838 0

推荐镜像

更多