zabbix批量添加主机-学习实践

作者: Shark1985 | 来源:发表于2019-03-25 07:18 被阅读2次

依据网上大神提供的解决方案进行了一次zabbix批量添加主机的实践,发现这种方式也可算是另类的“自动化”,虽然还需要手动执行,但最终还是减少了大部分工作量,提高了生产力。

方案参考:

http://blog.51cto.com/net881004/2089104

系统与环境准备

Ubuntu18.04

python2.7环境

1.安装python的xlrd包(用于支持读取excel文件)

官网下载xlrd模块

https://pypi.python.org/pypi/xlrd

#使用pypi安装模块,需先安装pypi包
apt-get install pypi
#安装xlrd
pip install xlrd

2.批量添加脚本

#来源于参考链接
#json中的相关方法对象,直接在zabbix官方网站上获取
##############################################################################################

#!/usr/local/kk-mail/app/engine/bin/python

#coding:utf-8

import json 

import urllib2 

from urllib2 import URLError 

import sys 

import xlrd

class ZabbixTools: 

    def __init__(self): 

        self.url = 'http://10.x.x.x/zabbix/api_jsonrpc.php'  #zabbix的api接口

        self.header = {"Content-Type":"application/json"} 

    def user_login(self): 

        data = json.dumps({ 

                           "jsonrpc": "2.0", 

                           "method": "user.login", 

                           "params": { 

                                      "user": "Admin",  #web登录zabbix的管理员账号或有权限账号

                                      "password": "zabbix" 

                                      }, 

                           "id": 0 

                           }) 

        request = urllib2.Request(self.url, data) 

        for key in self.header: 

            request.add_header(key, self.header[key]) 

        try: 

            result = urllib2.urlopen(request) 

        except URLError as e: 

            print "Auth Failed, please Check your name and password:", e.code 

        else: 

            response = json.loads(result.read()) 

            result.close() 

            self.authID = response['result'] 

            return self.authID 

    def host_get(self,hostName): 

        data = json.dumps({ 

                           "jsonrpc":"2.0", 

                           "method":"host.get", 

                           "params":{ 

                                     "output":["hostid","name"], 

                                     "filter":{"host":hostName} 

                                     }, 

                           "auth":self.user_login(), 

                           "id":1, 

                           }) 

        request = urllib2.Request(self.url, data) 

        for key in self.header: 

            request.add_header(key, self.header[key]) 

        try: 

            result = urllib2.urlopen(request) 

        except URLError as e: 

            if hasattr(e, 'reason'): 

                print 'We failed to reach a server.' 

                print 'Reason: ', e.reason 

            elif hasattr(e, 'code'): 

                print 'The server could not fulfill the request.' 

                print 'Error code: ', e.code 

        else: 

            response = json.loads(result.read()) 

            result.close() 

            print "Number Of %s: " % hostName, len(response['result']) 

            lens=len(response['result']) 

            if lens > 0:

                return response['result'][0]['name']

            else:

                return ""

    def hostgroup_get(self, hostgroupName): 

        data = json.dumps({ 

                           "jsonrpc":"2.0", 

                           "method":"hostgroup.get", 

                           "params":{ 

                                     "output": "extend", 

                                     "filter": { 

                                                "name": [ 

                                                         hostgroupName, 

                                                         ] 

                                                } 

                                     }, 

                           "auth":self.user_login(), 

                           "id":1, 

                           }) 

        request = urllib2.Request(self.url, data) 

        for key in self.header: 

            request.add_header(key, self.header[key]) 

        try: 

            result = urllib2.urlopen(request) 

        except URLError as e: 

            print "Error as ", e 

        else: 

            response = json.loads(result.read()) 

            result.close() 

            lens=len(response['result']) 

            if lens > 0:

                self.hostgroupID = response['result'][0]['groupid']

                return response['result'][0]['groupid']

            else:

                print "no GroupGet result"

                return ""

    def template_get(self, templateName): 

        data = json.dumps({ 

                           "jsonrpc":"2.0", 

                           "method": "template.get", 

                           "params": { 

                                      "output": "extend", 

                                      "filter": { 

                                                 "host": [ 

                                                          templateName, 

                                                          ] 

                                                 } 

                                      }, 

                           "auth":self.user_login(), 

                           "id":1, 

                           }) 

        request = urllib2.Request(self.url, data) 

        for key in self.header: 

            request.add_header(key, self.header[key]) 

        try: 

            result = urllib2.urlopen(request) 

        except URLError as e: 

            print "Error as ", e 

        else: 

            response = json.loads(result.read()) 

            result.close() 

            self.templateID = response['result'][0]['templateid'] 

            return response['result'][0]['templateid'] 

    def host_create(self, hostName,visibleName,dnsName, hostgroupName, templateName1,ip): 

        data = json.dumps({ 

                           "jsonrpc":"2.0", 

                           "method":"host.create", 

                           "params":{ 

                                     "host": hostName, 

                                     "name": visibleName, 

                                     "interfaces": [ 

                                                        { 

                                                            "type": 2, 

                                                            "main": 1, 

                                                            "useip": 0, 

                                                            "ip": ip, 

                                                            "dns": dnsName, 

                                                            "port": "161" 

                                                        } 

                                                    ], 

                                    "groups": [ 

                                                    { 

                                                        "groupid": self.hostgroup_get(hostgroupName) 

                                                    } 

                                               ], 

                                    "templates": [ 

                                                    { 

                                                        "templateid": self.template_get(templateName1)

                                                    }

                                                  ], 

                                     }, 

                           "auth": self.user_login(), 

                           "id":1                   

        }) 

        request = urllib2.Request(self.url, data) 

        for key in self.header: 

            request.add_header(key, self.header[key]) 

        try: 

            result = urllib2.urlopen(request) 

        except URLError as e: 

            print "Error as ", e 

        else: 

            response = json.loads(result.read()) 

            result.close() 

            print "host : %s is created!   id is  %s\n" % (dnsname, response['result']['hostids'][0]) 

            self.hostid = response['result']['hostids'] 

            return response['result']['hostids'] 

    def proxy_get(self, ProxyName):

        data = json.dumps({

                           "jsonrpc":"2.0",

                           "method": "proxy.get",

                           "params": {

                                      "output": "extend",

                                      "selectInterface": "extend",

                                      "filter": {

                                          "host": [ ProxyName, ]

                                      }

                                      },

                           "auth":self.user_login(),

                           "id":1,

                           })

        request = urllib2.Request(self.url, data)

        for key in self.header:

            request.add_header(key, self.header[key])

        try:

            result = urllib2.urlopen(request)

        except URLError as e:

            print "Error as ", e

        else:

            response = json.loads(result.read())

            result.close()

            self.templateID = response['result'][0]['proxyid']

            return response['result'][0]['proxyid']

if __name__ == "__main__": 

    test = ZabbixTools() 

    workbook = xlrd.open_workbook('zabbixauto.xlsx')  #读取文件名为“zabbixauto.xlsx”的表格文件

    for row in xrange(workbook.sheets()[0].nrows): #excel文件包含以下6列

        hostname=workbook.sheets()[0].cell(row,0).value

        visible=workbook.sheets()[0].cell(row,1).value

        dnsname=workbook.sheets()[0].cell(row,2).value

        hostgroup=workbook.sheets()[0].cell(row,3).value

        hosttemp=workbook.sheets()[0].cell(row,4).value

        ip=workbook.sheets()[0].cell(row,5).value

        hostgroup=hostgroup.strip()

        hostnameGet=test.host_get(hostname)

        if hostnameGet.strip()=='':

            test.host_create(hostname,visible,dnsname,hostgroup,hosttemp,ip)

        else:

            print "%s have exist! Cannot recreate !\n" % hostnameGet                                             

3.编辑excel

excel文件中的每列对应,在zabbix上创建主机时的相关设置

第一列 Host name

第二列 Visible name

第三列 dns name

第四列 hostgroup

第五列 ip
image

4.脚本执行

实际批量添加时,将excel文件和批量脚本放到同一个目录下,填写好excel后,直接执行脚本即可

root@zabbix:/home/admin# ls -l

total 11484

-rwxrwxr-x 1 admin admin   10067 Mar 11 07:32 zabbixauto-host.py

-rw-rw-r-- 1 admin admin    9696 Mar 11 07:27 zabbixauto.xlsx

5.验证

image image

相关文章

网友评论

    本文标题:zabbix批量添加主机-学习实践

    本文链接:https://www.haomeiwen.com/subject/qfumvqtx.html