zabbix 二次开发之同步CMDB主机和模板绑定

最近在做zabbix的二次开发;发现zabbix在做自动化方便提供了强悍的支持,下面分享下CMDB和zabbix打通,把CMDB平台里面的所有机器同步到zabbix数据库,然后进行批量的模板绑定:

开发环境:

zabbix :2.4

python:flask框架.前端bootstrap,jquey:

实现思路:

一、

在CMDB表和ZAbbix主机表里面建立第三张管理的表(定义叫缓存表);利用zabbix API把数据库里面的host插入到第三张缓存表;然后通过和CMDB库里面的比较把没有在缓存表里的数据插入到缓存表,再同步到zabbix 数据库。

二、

绑定模板使用host.update 这个API,但是这个API在绑定后面的模板之后会删除已经绑定的模板,所以这里我们先遍历出前面所有的模板,然后把前面和后面的一起绑定。

缓存表的models结构:

class ZbHost(db.Model):
    __tablename__    = ‘zbhost‘
    id            = db.Column(db.Integer, primary_key=True)
    cmdb_hostid      = db.Column(db.Integer, index=True, unique = True)
    hostid         = db.Column(db.Integer, index=True, unique = True)
    host          = db.Column(db.String(50))
    ip           = db.Column(db.String(32))

获取数据:

def init_cmdb():
    #取host (在server表里)
    hosts = api_action("server.get")
    for h in hosts:
        data = {‘cmdb_hostid‘:h[‘id‘]}
        db.session.query(ZbHost).filter_by(ip=h[‘inner_ip‘]).update(data)
    db.session.commit()
    
    #更新到cache表, ip
    
def init_zabbix():
    #第一步 取出所有host,要ip,host,id
    zb_hosts =  zabbix_server.get_hosts()
    zb_hosts_interface = zabbix_server.get_interface([z[‘hostid‘] for z in zb_hosts])
#    data = []
    for h in zb_hosts:
        h[‘ip‘] = zb_hosts_interface[h[‘hostid‘]]
#       data.append(h)
    ###数据插入数据库
       db.session.add(ZbHost(**h))
    db.session.commit()

同步主机到zabbix:

@main.route("/resource/monitor/ajax/sync_host_to_zabbix", methods=[‘POST‘])
def sync_host_to_zabbix():
    #接收参数
    #hostid groupid
    if request.method == "POST":
        from app.common.zabbix import create_zabbix_host
        params = dict(request.form)
        hostids = params[‘hostids‘][0].split(‘,‘)
        ret = create_zabbix_host(hostids=params[‘hostids‘][0].split(‘,‘),groupid=params[‘groupid‘][0])
        if len(ret) == len(hostids):
            return ‘1‘
        else:
            return json.dumps(ret)
    return "500"

zabbix 界面:

到这里同步主机完成;下面的批量绑定模板:

def link_template(self, hostid, templateids):
        templates = []
        for id in templateids:
            templates.append({"templateid": id})
            print templates
            print hostid
        try:
            ret = self.zb.host.update(hostid=hostid, templates=templates)
            return ret
        except Exception as e:
            return e.message

 视图:
 
@main.route("/monitor/ajax/link_zabbix_template", methods=[‘POST‘])
def link_zabbix_template():
    from app.common.zabbix import link_template
    if request.method == "POST":
        #1、获取前端数据
        params = dict(request.form)
        #{‘hostids‘: [u‘10106‘], ‘template_ids‘: [u‘10001‘]}
        hostids = params[‘hostids‘][0].split(‘,‘)
        template_ids = params[‘template_ids‘][0].split(‘,‘)
        ret_data = link_template(hostids, template_ids)
        error = None
        for r in ret_data:
            try:
                hostids.remove(r[‘hostids‘][0])
            except Exception, e:
                error = e.message
        if not hostids:
            return "1"
        else:
            return error
    return "500"

主机绑定模板:

绑定之后:

登录zabbix查看:

到此zabbix基本的同步主机,绑定模板已经完成;zabbix提供了非常优秀的API,我们可以用来实现很多我们需要的功能;上面的步骤已经基本上完成了我们日常说需要的功能;当然还有解绑模板删除主机,添加维护周期等等;

时间: 2024-12-26 11:11:11

zabbix 二次开发之同步CMDB主机和模板绑定的相关文章

#IT明星不是梦# 自动化平台的构建与zabbix二次开发那些事

在前东家,我对于运维平台重新做了二次的改造,当然基于zabbix平台的功能也在不断的完善,相对于之前的基础架构,我们这次采用vue + element的前端架构,出图使用的是echart的方式.后端我们使用了restful的标准通信框架. 自动化架构 1.当然在讲到zabbix之前我们先看一下我们之前在老东家的时候做的相关的一些平台操作: 平台相关注解: 底层的数据主要使用CMDB来进行管理,CMDB开放APi接口给上层的发布系统.DB系统:当然各个子系统对接都是有权限审计. 数据录入统一使用脚

Zabbix二次开发_02获取数据

最近准备写一个zabbix二次页面的呈现.打算调用zabbix api接口来进行展示. 具体流程以及获取的数据. 1.  获得认证密钥 2.  获取zabbix所有的主机组 3.  获取单个组下的所有主机 4.  获取某个主机下的所有监控项 5.  获取某个监控项的历史数据 6.  获取某个监控项的最新数据 认证获取 user.login方法获取zabbix server的认证结果官方地址:https://www.zabbix.com/documentation/2.2/manual/api/r

zabbix 二次开发之调用api接口获取历史数据

前面一篇写了数据同步和模板绑定,zabbix其实能做的事还蛮多. zabbix提供了一个非常好的前端展示页面,但是我们总觉得不太好看:我们可以进一步调用他的api通过获取每一个监控项的历史数据,然后打到我们的监控平台上:主流的有rrdtool方式和highcharts方式:rrdtool略显复杂,还要学习rrdtool之类的几个聚合方式.相对而言我更喜欢highcharts的方式,出图简便,只需要提供数据和时间戳组成的json数据就够了,之前也介绍过具体:那么这里我们先拿出我们想要的数据. za

dedecms二次开发:dedetemplate.class.php 动态模板类

dedecms二次开发目录点这个:dedecms二次开发教程目录 核心类文件 include/dedetemplate.class.php 用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上会优级于旧的解析类,这个方法将在未来版本中作为通用的方式. 一.使用方法: $tpl = new DedeTemplate( 模

dedecms二次开发:dedetag.class.php 静态模板类

dedecms二次开发目录点这个:dedecms二次开发教程目录 类文件 include/dedetag.class.php 这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行) 一.模板语法 织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎

Zabbix二次开发_03api列表

基于zabbix 3.0 https://www.zabbix.com/documentation/3.0/manual/api/reference Method reference This section provides an overview of the functions provided by the Zabbix API and will help you find your way around the available classes and methods. Monito

Knockout应用开发指南 第四章:模板绑定

模板绑定The template binding 目的 template绑定通过模板将数据render到页面.模板绑定对于构建嵌套结构的页面非常方便.默认情况, Knockout用的是流行的jquery.tmpl模板引擎.使用它的话,需要在安装页面下载和引用jquery.tmpl和jQuery框架.或者你也可以集成其它的模板引擎(虽然需要了解Knockout 内部知识才行). 例子 <div data-bind='template: "personTemplate"'> &

EcShop二次开发学习方法

EcShop二次开发学习方法 (2012-03-08 11:10:08) 转载▼ 标签: 京东 公用函数库 二次开发 sql语言 数据库设计 杂谈 分类: ecshop 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的PHP开源产品.B2C方面有Ecshop,Zencart,Magento等国内外知名产品.下面我们就来简单介绍一下学习Ecshop二次开发的过程和要注意的一些东西: Ecshop二次开发必备基础: 非

最好最实用的PHP二次开发教程

◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或是软件公司.选择和 应用这些优秀的开源软件,并在此基础上进行符合业务需求的二次开发,将给企业节省信息化成本(时间成本及开发成本)的同时,更能带来技术上的保障.这就是 我们常听的:站在巨人的肩膀上,你将看的更远.所以国内