zabbix-2.0.8利用组和键值快速添加筛选(api操作)

利用zabbix api快速添加筛选

功能描述: 该脚本可以利用组名和组中host中含有的key快速生成筛选
使用前提: 需要对key设置图形
适用版本: zabbix 2.0.8(实际测试),理论支持2.0~2.4系列(未验证)
操作注意: 需要将url,user,passwd,组名称,已经创建图形的key,筛选名称填入脚本,python运行即可

#!/usr/bin/env python
# coding:utf-8
‘‘‘
######################
# Function: 此脚本的功能主要是快速添加筛选
# Version : V1.0
# Writer  : graysky
# Mail    : [email protected]
# Date    : 2016-08-14
######################
‘‘‘

import json
import urllib2
import math
import sys

class api_work:
    def __init__(self, url, user, passwd):
        self.url = url
        self.user = user
        self.passwd = passwd
        self.login_authid = self.zabbix_login()

    def json_work(self, work_json):
        zabbix_header = {"Content-Type": "application/json"}
        self.work_json = work_json
        used_json = json.dumps(self.work_json)
        used_json_reques = urllib2.Request(self.url, used_json)
        for key in zabbix_header:
            used_json_reques.add_header(key, zabbix_header[key])
        try:
            used_json_result = urllib2.urlopen(used_json_reques)
        except Exception:
            print "Get failed"
        else:
            used_json_respones = json.loads(used_json_result.read())
            used_json_group = used_json_respones[‘result‘]
            used_json_result.close()
            return used_json_group

    def zabbix_login(self):
        login_json = {"jsonrpc": "2.0",
                      "method": "user.login",
                      "params": {"user": self.user, "password": self.passwd},
                      "id": 0}
        login_authid = self.json_work(login_json)
        return login_authid

    def CheckScreenExist(self,screen_name):
        screenexist_json = {"jsonrpc": "2.0",
                            "method": "screen.exists",
                            "params": {"name": screen_name},
                            "auth": self.zabbix_login(),
                            "id": 0}
        return self.json_work(screenexist_json)

    def Get_Groupinfo_by_Groupname(self,groupname):
        groupinfo_group = {}
        groupinfo_json = {"jsonrpc": "2.0",
                        "method": "hostgroup.get",
                        "params": {"output": "extend",
                                   "filter": {"name": groupname}},
                        "auth": self.zabbix_login(),
                        "id": 0}
        for groupinfo in self.json_work(groupinfo_json):
            groupinfo_group[groupinfo["groupid"]] = groupinfo["name"]
        return groupinfo_group

    def Get_Itemsinfo_by_GroupidKeyname(self,groupid,keyname):
        itemsinfo_group = {}
        itemsinfo_json = {"jsonrpc": "2.0",
                          "method": "item.get",
                          "params": {"output": "extend",
                                     "groupids": groupid,
                                     "search": {"key_": keyname},},
                          "auth": self.zabbix_login(),
                          "id": 0}
        for itemsinfo in self.json_work(itemsinfo_json):
            itemsinfo_group[itemsinfo["itemid"]] = itemsinfo["name"]
        return itemsinfo_group

    def Get_Graphid_by_itemsid(self,itemsid):
        graphid_group = {}
        graphid_json = {"jsonrpc": "2.0",
                        "method": "graphitem.get",
                        "params": {"output": "extend",
                                   "expandData": 1,
                                   "itemids": itemsid},
                        "auth": self.zabbix_login(),
                        "id": 0}
        for graphinfo in self.json_work(graphid_json):
            graphid_group[graphinfo["graphid"]] = graphinfo["key_"]
        return graphid_group

    def Create_Screen(self,screenname,linesnum):
        screen_json = {"jsonrpc": "2.0",
                       "method": "screen.create",
                       "params": {"name": screenname,
                                  "hsize": 2, "vsize": linesnum},
                       "auth": self.zabbix_login(),
                       "id": 0}
        createresponse = self.json_work(screen_json)
        return createresponse["screenids"]

    def Create_Screen_include(self,screen_id,resource_id,xnum,ynum):
        createscreeninclude_json = {"jsonrpc": "2.0",
                                    "method": "screenitem.create",
                                    "params": {"screenid": screen_id,
                                               "resourcetype": 0,
                                               "resourceid": resource_id,
                                               "width": 500,
                                               "height": 100,
                                               "rowspan": 0,
                                               "colspan": 0,
                                               "x": xnum,
                                               "y": ynum},
                                    "auth": self.login_authid,
                                    "id": 0}
        self.json_work(createscreeninclude_json)

if __name__ == "__main__":
    def getgraphid(groupname,keyname):
        graphidgroup = []
        groupid_group = api_init.Get_Groupinfo_by_Groupname(groupname)
        for groupid in groupid_group.keys():
            itemsinfo_group = api_init.Get_Itemsinfo_by_GroupidKeyname(groupid,keyname)
            for itemsid in itemsinfo_group.keys():
                for graphid in api_init.Get_Graphid_by_itemsid(itemsid).keys():
                    graphidgroup.append(graphid)
        return graphidgroup

    def createscreen(screenname,group_name,key_name):
        if not api_init.CheckScreenExist(screenname):
            graphidgroup = getgraphid(group_name,key_name)
            linenum = math.ceil(len(graphidgroup) / 2.0)
            screenid_group = api_init.Create_Screen(screenname,linenum)
            for screenid in screenid_group:
                lines = 0
                num = 0
                while lines < linenum:
                    api_init.Create_Screen_include(int(screenid), int(graphidgroup[num]), lines, 0)
                    num += 1
                    api_init.Create_Screen_include(int(screenid), int(graphidgroup[num]), lines, 1)
                    num += 1
                    lines += 1

    zabbix_url = "http://zabbixurl/api_jsonrpc.php"
    zabbix_user = "zabbixuser"
    zabbix_passwd = "zabbixpasswd"

    api_init = api_work(zabbix_url, zabbix_user, zabbix_passwd)
    keyname = ‘xxxx‘
    groupname = ‘xxxx‘
    screenname = ‘xxxxx‘

    createscreen(screenname,groupname,keyname)

由于个人编程水平有限,如果各位发现更好的方法或是含有bug请及时联系我

欢迎各位多多交流和转载,转载还请保留出处,>.<

时间: 2024-08-02 06:54:03

zabbix-2.0.8利用组和键值快速添加筛选(api操作)的相关文章

zabbix 取多台主机且相同键值的和

在我们实际工作中,会遇到三台机器做负载均衡,要取三台主机的访问量,就要将三台机器中总的访问量的值,进行相加, 在这三台机器 server1 server2 server3 中,三台机器对访问量监控项的键值要一样,这三台可以在同一个组中,可以不再挺同一个组中, 假设在同一个组中:为了便于区分,我们新创建一个agent主机, 其次我们创建监控项 信息类型要选择相应的,公式: last("主机名:键值")last("server1:key")+last("ser

【OC学习-31】利用KVC即键值编码来访问一些对象的属性,尽管这些属性是私有的

最简单的想法是我们创建一个对象,然后利用某些方法给这个对象赋值,然后再用某些方法调用这个值.当然这种描述很类似于字典的键值概念,确实今天学习的就是这样一种方法:KVC,Key-Value coding键值编码. (1)简单的KVC 创建一个Book类,在Book.h里写一个私有的实例变量name,然后再main.m里创建一个book1对象,再给这个book1对象的私有变量name赋值,然后再调用这个值.神奇的地方就在这里:这种方法根本不管这个实力变量是private还是public.呃,Book

swift基本用法-字典NSDictionary的定义,修改键值,删除/添加键值

// Playground - noun: a place where people can play import UIKit //------------------------------------------------------------------------------ // 1. 定义固定格式的字典 // dict1的所有"键值"类型一致(都是字符串) var dict1 = ["name": "mary", "a

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Core 实例练习

第1章 RDD 概念1.1 RDD 为什么会产生1.2 RDD 概述1.2.1 什么是 RDD1.2.2 RDD 的属性1.3 RDD 弹性1.4 RDD 特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 CheckPoint第2章 RDD 编程2.1 RDD 编程模型2.2 RDD 创建2.2.1 由一个已经存在的 Scala 集合创建,即集合并行化(测试用)2.2.2 由外部存储系统的数据集创建(开发用)2.3 RDD 编程2.3.1 Transformatio

有关合并某一字段键值相同的数组的改进

/** **关于参数的说明 **$key键值相同的键名 **$array代表原数组 **$start代表$array[0][$key] **$newkey代表相同键值相同的键名 **/ function combine_same_val($array,$start,$key,$newkey){ static $new; foreach($array as $k=>$v){ if($v[$key]==$start){ $new[$v[$newkey]][] = $v; unset($array[$

第六章——根据执行计划优化性能(3)——键值查找

原文:第六章--根据执行计划优化性能(3)--键值查找 前言: 本文为本系列最后一篇,介绍键值查找的相关知识. 键值查找是具有聚集索引的表上的一个书签查找,键值查找用于SQLServer查询一些非键值列的数据.使用非聚集索引的查询不会有键值查找,但是所有键值查找会伴随非聚集索引出现.这里特别提醒的是键值查找总是伴有嵌套循环关联. 准备工作: 下面将创建一个表,通过执行计划看看键值查找的不同效果.为了产生键值查找,需要两件事情: 1.  聚集索引 2.  非聚集索引 当你在非聚集索引键值上有谓词时

键-值编码扩展

键-值编码扩展 CoreAnimation 扩展了 NSKeyValueCoding 协议,因为它从属 CAAnimation 和 CALayer 类.此扩展为某些键添加默认值,扩展封装约定,为 CGPoint.CGRect.CGSize.CATransform3D添加键路径支持 键-值编码遵从容器类 CAAnimation 和 CALayer 类是遵从容器类键-值编码,也就是说可以为任意键设置值.即使键没有在 CALayer类中声明的属性,你也可以用以下的方式设置值 [theLayer set

Spark常用函数讲解--键值RDD转换

摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集RDD有两种操作算子:         Transformation(转换):Transformation属于延迟计算,当一个RDD转换成另一个RDD时并没有立即进行转换,仅仅是记住       了数据集的逻辑操作         Ation(执行):触发Spark作业的运行,真正触发转换算子的计算 本系列主要讲解Spark中常用的函数操作:   

利用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