(zabix) python创建模板 监控项关联模板、触发器关联模板

实际上从主机进入监控项界面,显示的才是真正的主机id

 

创建一个模板对应代码(可以用csv生成,用for循环)

相关参数:

# -*- coding: utf-8 -*
# -*- coding: gbk -*
'''
作者:刘恩东
时间:2019.7.27
联系:liu_endong@foxmail.com
环境:python2.7
'''

import csv
import urllib2
import json
import requests
import numpy as np

ip = 'xxx.x.xxx.xxx'      #目标主机ip
# filename = '333.csv'		#需要导入的文件
url = 'http://xxx.x.xxx.xxx/api_jsonrpc.php'                #目标主机ip
headers = {'Content-Type': 'application/json-rpc'}
username = 'Admin'                                        #zabbix登陆账户
password = 'zabbix'										#zabbix登陆密码

hostName = 'ActiveMq'                       #主机名
templateName = 'test11354135'                    #创建的模板名字  必须和已经存在的不同,这里需要一个判断函数,否则程序报错
groupName = 'Kafka'                         #主机群组名
login_user = 'test3331333313sdaa21323'                        #监控项名字 必须和已经存在的不同,这里需要一个判断函数,否则程序报错
log_user = 'vm.memory.siz41e333'       #监控项键值  必须和已经存在的不同,这里需要一个判断函数,否则程序报错
description = 'The login user is greater than 3  on {HOST.NAME}'   #触发器告警描述信息
expression =  '{Kafka:jmx["kafka.server:type=ReplicaManager,name=IsrShrinksPerSec","Count"].delta(900)}<>0 '   #触发器表达式




#获取token
def requestJson(url,values):

    data = json.dumps(values)
    req = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(req, data)
    output = json.loads(response.read())
    try:
        message = output['result']
    except:
        message = output['error']['data']
        print message
        quit()
    return output['result']

#获取auth_code
def authenticate(url, username, password):
    values = {'jsonrpc': '2.0',
              'method': 'user.login',
              'params': {
                  'user': username,
                  'password': password
              },
              'id': '0'
              }
    auth_code = requestJson(url,values)
    return auth_code  # 结果是一个token值:cc75ed2a314906a835ac0786266468ac

#获取主机id 和 interfaceid
def get_host(auth,hostname):
    values = {
                "jsonrpc": "2.0",
                "method": "host.get",
                "params": {
                    "output": ['name','hostid',],
                    "filter": {
                        "host": [hostname,]
                    },
                    "selectInterfaces": [  # 添加这个参数为了获取interfaceid的值
                        "interfaceid",
                        "ip"
                    ],
                },
                "auth": auth,
                "id": 1
            }
    output = requestJson(url, values)
    interfaceid = output[0]['interfaces'][0]['interfaceid']
    hostid = output[0]['hostid']
    return {'interfaceid': interfaceid, 'hostid': hostid}



#获取组id
def get_group(auth,group_name):
    values = {
                "jsonrpc": "2.0",
                "method": "hostgroup.get",
                "params": {
                    "output": "extend",
                    "filter": {  # 如果没有filter 默认会获取所有组信息
                        "name": [
                            group_name,
                        ]
                    }
                },
                "auth": auth,
                "id": 1
            }
    output = requestJson(url,values)
    return output[0]['groupid']


#新建模板:模板必须至少关联一个主机组
def create_template(auth,template_name,gid,host_id):
    values = {
                "jsonrpc": "2.0",
                "method": "template.create",
                "params": {
                    "host": template_name,
                    "groups": {  # 模板关联的主机组(必须要有)
                        "groupid": gid,
                    },
                    "hosts": [{"hostid": host_id}]  # 模板关联的主机
                    # "hosts": [{"hostid": "10084"},{"hostid": "10090"}]  # 模板关联的主机
                },
                "auth": auth,
                "id": 1
            }
    output = requestJson(url,values)
    return output

#1、根据模板名称检索
def get_templates_by_templatename(auth):
    values = {
                "jsonrpc": "2.0",
                "method": "template.get",
                "params": {
                    "output": ['host', 'templateid'],
                    "filter": {
                        "host": [
                            templateName,  # 要检索的模板名称
                        ]
                    }
                },
                "auth": auth,
                "id": 1
            }
    output = requestJson(url,values)
    return output


#创建监控项
def create_item(auth, item_name, item_key, hostid, interfaceid):
    values = {
                "jsonrpc": "2.0",
                "method": "item.create",
                "params": {
                    "name": item_name,
                    "key_": item_key,  # 键值必须和agent的key值相同
                    "hostid": hostid,
                    "type": 0,
                    "value_type": 3,
                    "interfaceid": interfaceid,
                    # "applications": ["609","610"],  # 监控项可以归属默写 "应用集" 这里就不关联了
                    "delay": "30s"
                },
                "auth": auth,
                "id": 1
            }
    output = requestJson(url,values)
    return output


# 创建 一个/多个 触发器
def create_trigger(auth,description,expression):
    values = {
                "jsonrpc": "2.0",
                "method": "trigger.create",
                "params": [
                    {
                        "description": description,  # 名称:告警描述信息
                        "expression": expression,  # 表达式
                        "priority": "2",  # 设置告警级别(0:未分类; 1:信息; 2:警告; 3:一般严重 ...)
                    },
                    # {   # 创建多个只需加一个字典即可
                    #     "description": "Too many processes on {HOST.NAME}",
                    #     "expression": "{Linux server:proc.num[].avg(5m)}>300",
                    # }
                ],
                "auth": auth,
                "id": 4
            }
    output = requestJson(url,values)
    return output  # 运行后就可以在对应主机的监控项页面看到刚创建的监控项了




auth = authenticate(url,username,password)
out_host = get_host(auth,hostName)
host_id = out_host['hostid']
interfaceid = out_host['interfaceid']
gid = get_group(auth,groupName)
# create_template(auth,templateName,gid,host_id)
out_template = get_templates_by_templatename(auth)
templateid = out_template[0]['templateid']
print(templateid)
print create_item(auth, login_user, log_user, templateid, interfaceid)
print create_trigger(auth,description,expression)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值