zabbix api lld

来源:互联网 发布:asp.net vb.net控件 编辑:程序博客网 时间:2024/05/21 09:26
cat api_discovery.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import json,os,re

def api_params(url):
        RK=re.findall('routeKey=(.+)\&api',url)
        find_route_key=''.join(RK)
        AK=re.findall('apiKey=(.+)\&par',url)
        find_api_key=''.join(AK)
        return find_route_key,find_api_key,url

def api_file_read(api_params):
    Api_file=open('/etc/zabbix/api_monitor/api_list.file')
    Api_list=[]
    for url in Api_file.readlines():
            url=url.strip('\n')
            if url != "":
            Format_file=api_params(url)
                    Api_list += [{'{#APIKEY}':Format_file[1],'{#ROUTEKEY}':Format_file[0],'{#API}':Format_file[2]}]
    return json.dumps({'data':Api_list},sort_keys=True,indent=4,separators=(',',':'))

if __name__ == '__main__':
    discovery_data=api_file_read(api_params)

    print discovery_data




#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests,sys,re


def target_api_status(url):
        try:
                rg=requests.post(url,timeout=1)
                get_requcode=rg.json()
                return get_requcode['code']
        except Exception,e:
                get_requcode='TargetAPI TimeOut'
                return get_requcode

def target_api_speed(url):
        rs=requests.get(url)
        get_reqespeed=rs.elapsed.microseconds/1000.00/1000.00
        return get_reqespeed


def api_params(url):
        find_route_key=re.findall('routeKey=(.+)\&api',url)
        find_api_key=re.findall('apiKey=(.+)\&par',url)
        return find_route_key,find_api_key,url

def find_api(Apikey,Routekey):
        Api_file=open('/etc/zabbix/api_monitor/api_list.file')
        for Api_url in Api_file.readlines():
                Api_url=Api_url.strip('\n')
                if  "apiKey="+Apikey and "routeKey="+Routekey in Api_url:
                        return Api_url

def api_monitor(url,Routekey,api_status):
        monitor_api='http://192.168.1.158:8788/api/monitor/reportRouteStatus'
        payload={'routeKey':Routekey,'connectStatus':api_status}
        try:
                post_apimonitor=requests.post(monitor_api,params=payload,timeout=0.5)
                return post_apimonitor
        except Exception,e:
                return 'MonitorAPI TimeOut'

def main():
    Arg_select = sys.argv[1]
        Apikey=sys.argv[2]
        Routekey=sys.argv[3]
        url=find_api(Apikey,Routekey)

        requ_code=target_api_status(url)
        requ_speed=target_api_speed(url)
        if requ_code == 200 and requ_speed < 5:
                api_status="0"

                if Arg_select == 'code':
                        print requ_code
                elif Arg_select == 'speed':
                        print requ_speed
        else:
                api_status="-1"
                if Arg_select == 'code':
                        print requ_code
                elif Arg_select == 'speed':
                        print requ_speed
                #api_monitor(url,Routekey,api_status)

if __name__ == '__main__':
    main()



cat userparameter_api.conf
UserParameter=api.discovery,python /etc/zabbix/api_monitor/api_discovery.py
UserParameter=api.monitor[*],python /etc/zabbix/api_monitor/api_monitor.py $1 $2 $3

0 0
原创粉丝点击