利用Zabbix API创建主机宏

#!/usr/bin/python
#coding:utf-8
from zabbix_api import ZabbixAPI
import json
server="http://172.16.206.130/zabbix"
username="Admin"
password="zabbix"
zapi = ZabbixAPI(server=server,path="",log_level=0)
zapi.login(username,password)
info=[{"name": "ECS0001", "ip": "172.16.206.128", "bandwidthout": "1M", "internet_ip": "", "team": "Tank", "id": "i-23zmvm8uz"},{"name
": "ECS0007","ip": "172.16.206.130", "bandwidthout": "1M", "internet_ip": "120.54.6.78", "team": "Tesla", "id": "i-23s02ihno"}]
macro_list = []
for I in info:
    visible_name = I[‘name‘]
    band = I[‘bandwidthout‘]
#    print visible_name,band
    if band != "0M":
##计算出网络带宽宏的值
         network_threshold = str(int(int(band.strip(‘M‘))*0.8*1000)) + ‘K‘
#        print network_threshold
##通过主机可见名查找hostid  
         hostinfo=zapi.host.get({"output":"extend","filter":{"name":visible_name}})
         hostid=hostinfo[0][‘hostid‘]
##通过hostid获取主机的所有宏
         host_macro_get=zapi.usermacro.get({"output":"extend","hostids":hostid})
         if len(host_macro_get) ==0:
            host_macro_create=zapi.usermacro.create({"hostid":hostid,"macro":"{$NETWORK_THRESHOLD}","value":network_threshold})
            print "host %s has no macro,but create a new macro" % visible_name
         else:
             for X in host_macro_get:
                 macro = X[‘macro‘]
                 macro_list.append(macro)
             if "{$NETWORK_THRESHOLD}" not in macro_list:
##通过hostid创建主机宏     
                 host_macro_create=zapi.usermacro.create({"hostid":hostid,"macro":"{$NETWORK_THRESHOLD}","value":network_threshold})
                 print "host $s add a macro" % visible_name
             else:
##获取主机上{$NETWORK_THRESHOLD}宏的值 
                 for Y in host_macro_get:
                    if Y[‘macro‘] == ‘{$NETWORK_THRESHOLD}‘:
                        current_network_threshold_value = Y[‘value‘]
                        macro_id = Y[‘hostmacroid‘]
                        if network_threshold == current_network_threshold_value:
                            print "The current macro value on host %s is latest" %visible_name
                        else:
##更新NETWORK_THRESHOLD宏的值
                            host_macro_update=zapi.usermacro.update({"hostmacroid":macro_id,"value":network_threshold})
                            print "macro value on host %s updated" %visible_name
    else:
         print "The host %s has no internet_ip" % visible_name

需求:对所有云主机添加公网带宽监控,但不是每一台主机都有公网IP,有公网IP的主机的带宽也不完全相同,比如有的是1M,有的是5M,带宽监控的阈值为带宽值*0.8。例如1M的带宽,监控的阈值为0.8M。(注意:经过测试,在zabbix的trigger中这是0.8M,不会发出告警,但是阈值为大于1M的小数时又可以告警,怀疑是小于1M时,zabbix自动将单位换成K导致的。后来索性在定义带宽监控阈值时将单位统一为K,并且一定要为整数。如1300K可以,但是1300.5K则不会告警。)

脚本思路:监控阈值在每台主机上去添加主机宏,不是手动添加,而是通过zabbix API为主机添加宏。

具体的过程如下:

通过CMDB接口拿到所有主机的信息,包括zabbix主机可见名和带宽信息,做判断,公网带宽为0M时,不添加主机宏。当不为0M时,先判断主机上是否存着这个宏,如果不存在则创建这个宏,如果存在,先比较该宏的值是否和由的带宽值计算出的告警阈值相等,如果相等,表示带宽没有更新过,不做处理。如果不相等,则表示带宽是调整过的,需要更新主机宏上的带宽阈值。

时间: 2024-10-08 08:04:50

利用Zabbix API创建主机宏的相关文章

利用Zabbix API 创建主机

#!/usr/bin/env python2.7 # coding=utf-8 from zabbix_api import ZabbixAPI import urllib2 import sys ###get visible_name inet_ip=sys.argv[1] url = 'http://10.47.102.185/api/ecs/?ip={0}'.format(inet_ip) response = urllib2.urlopen(url) result = response.

PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取主机信息 这种方式获取的主机信息相对是比较新的(每分钟更新一次).但因为每次都需要请求接口,所以相对比较慢,如果并发查询的主机数量比较多,就会非常慢. 开源监控系统ZABBIX的官方文档提供了丰富的API.我这里http请求是用的Guzzle 6.当然你也可以用php内置的curl函数自己写一个ht

利用zabbix api添加、删除、禁用主机

python环境配置yum -y install python-pip安装argparse模块pip install -i https://pypi.douban.com/simple/ argparse 脚本修改请修改脚本中zabbix登录地址以及zabbix管理员帐户及密码 #!/usr/bin/env python #-*- coding: utf-8 -*- import json import sys import urllib2 import argparse from urllib

16.使用zabbix api创建screen

zabbix的screen功能可以把graph聚合起来,统一进行展示, 我们的需求是把同一个主机组的同一个item聚合起来,比如一个screen显示同一个组的所有主机的内存使用率,达到类似ganglia的效果, 由于服务器较多,所以我们调用zabbix api来进行创建. 参考地址如下:谢谢各位大牛 https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host http://c

python利用zabbix API添加监控

首先说一下坑的地方就是python2和python3的模块改变问题,当然精通python的可以略过.这个在网上百度一下吧,第二个是导入xlsx文件的时候需要xlrd模块,而这个模块最好跟着我下面的方法走,那个python2 就可以用我下边的脚本了. 1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/packages/69/56/f0f52281b5175e3d9

利用zabbix api 带入 组ID 和 监控项目键值 获取所有主机的值

def  chaxun(groupid,items_value):  是自己写的,带入组ID 和 监控项目键值,返回 主机和值的结果. 做了判断,如果这个主机没有想要的监控项目,就去除掉. #!/usr/bin/env python #coding=utf-8 import urllib.request import json import re url = 'http://XXXXXXXXXXXXXXXX/api_jsonrpc.php' username = 'Admin' password

利用zabbix API进行管理

zabbix 现在之所以那么流行,个人感觉跟zabbix 强大的API有一个很大的关系,利用API可以帮我们完成很多事情: 1.获取相关组,主机信息. 2.比如有人喜欢获取历史数据重新出图. 3.添加删除主机,绑定删除模板. 4.添加删除维护周期 这里我使用pipy提供的zabbix_client模块来进行,这样就不用我们自己去写登录函数,只要在模块开始指定用户名密码即可: 1.安装zabbix_client: pip install zabbxi_client 2.API管理脚本,替换成自己用

利用Zabbix API 获取各个分组下的服务器列表以及详细信息

现在越来越多的公司选择使用开源软件Zabbix来做服务器业务监控,其高逼格的用户管理是个亮点,所以可以通过调用它的接口将权限管理应用到很多地方,比如说堡垒机权限.以下是用python简单写了个小脚本,通过定义分组名便可以得到分组下的服务器信息. #coding=utf-8 __author__ = 'Perling' from urllib import urlencode import urllib2 import json def post(post_data):     api_url =

通过Zabbix API 为主机添加监控模板

脚本内容如下: #!/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=&quo