python調(diào)用zabbix接口

python 版本:python3
zabbix-api.py
目錄結(jié)構(gòu):


目錄結(jié)構(gòu).png

get_zabbix.py

# - * - coding: utf-8 - * -

"""Zabbix-Api Get-Data CLI. 

Usage:[]
    get_zabbix.py download_graph --host=<kn> --graphname=<kn>
    get_zabbix.py get_max_network --host=<kn> --monitor_name=<kn>
    get_zabbix.py -h | --help
    get_zabbix.py --version

Options:
    download_graph           download specific picture from zabbix.
    get_max_network          get the max traffic of network.
    --host=<kn>              input remote host ip.
    -h, --help               display this help and exit.
    --version                output version information and exit.

Example:
    get_zabbix.py download_graph   --host="xxx"  --graphname="網(wǎng)卡流量 eth0"
    get_zabbix.py get_max_network  --host="xxx"  --monitor_name="net.if.out[eth0]"

"""

from docopt import docopt
from action import module


def action_route(doc_args):
    if doc_args.get("download_graph"): 
        module.get_graph(doc_args.get("--host"), doc_args.get("--graphname"))
    elif doc_args.get("get_max_network"):
        module.Get_max_network(doc_args.get("--host"), doc_args.get("--monitor_name"))
     
    else:
        print("An unreasonable parameters")



if  __name__ == '__main__':
    args = docopt(__doc__, version='Zabbix-Api-Get CLI 1.0')
    action_route(args)

2.module.py

# - * - coding: utf-8-sig - * -
import json
import requests
import urllib
import datetime,time
import http.cookiejar
import  xlsxwriter
import os
from conf import get_value


urls = 'http://xxx/zabbix/api_jsonrpc.php'
user = get_value.get_message("user")
password = get_value.get_message("password")
gr_url = "http://xxx/zabbix/chart2.php"
login_url = 'http://xxx/zabbix/index.php'
endtime = time.time()
starttime = int(time.mktime((datetime.datetime.now() - datetime.timedelta(days = 7)).timetuple())) 
dirs = r"E:\work\xxx\%s"  %(datetime.datetime.now().strftime('%Y%m%d'))

parms = {
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
       "user": user,
       "password": password
       },
   "id": 1
}

headers = {
   'Content-Type': 'application/json'
}

login_data = urllib.parse.urlencode({
                       "name": user,
                       "password": password,
                       "autologin": 1,
                       "enter": "Sign in"}).encode(encoding='UTF8')


# 獲取token
def get_token():
   req = requests.get(urls, headers=headers, data=json.dumps(parms))
   key = req.text
   dic = json.loads(key)
   token = dic['result']
   return token


# 獲取主機的id
def get_hostid(hostnameid):
   hostid_parms = {
       "jsonrpc": "2.0",
       "method": "host.get",
       "params": {
           "output": "extend",
           "filter": {
               "host": [
                   hostnameid
               ]
           }
       },
       "auth": get_token(),
       "id": 1
   }
   hostid = requests.get(urls, headers=headers, data=json.dumps(hostid_parms))
   result = json.loads(hostid.text)['result'][0]['hostid']
   return result


def getgraphid(hostname,graphname):
   '''定義通過hostid獲取graphid的函數(shù)'''
   values = {
       "jsonrpc": "2.0",
       "method": "graph.get",
       "params": {
           "output": "name",
           "hostids": get_hostid(hostname),
           "sortfield": "name",
           "filter": {
               "name": graphname
           }
       },
       "auth": get_token(),
       "id": 10
   }
   req = requests.get(urls, headers=headers, data=json.dumps(values)).text
   result = json.loads(req)['result'][0]['graphid']
   return result                


def get_graph(hostname,graphname):
   '''download graph from zabbix api'''

   graph_args = urllib.parse.urlencode({
                       "graphid": getgraphid(hostname,graphname),
                       "width":'1200',
                       "height":'156',
                       "stime":starttime, #圖形開始時間
                       "period":'604800'}).encode(encoding='UTF8')

   cj = http.cookiejar.CookieJar()   # 設(shè)置一個cookie處理器, 它負(fù)責(zé)從服務(wù)器下載cookie到本地采够,并且在發(fā)送請求時帶上本地的cookie
   opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
   urllib.request.install_opener(opener)
   opener.open(login_url, login_data).read()
   data = opener.open(gr_url, graph_args).read()
   
   if os.path.exists(dirs):
       pass
   else:
       os.makedirs(dirs)
   with open(r"%s\%s.png" % (dirs, hostname), 'wb') as f:
       f.write(data)


def items_get(hostname, monitor_name):

   items_get_network = {
       "jsonrpc": "2.0",
       "method": "item.get",
       "params":{
           "output":"itemids",
           "hostids": get_hostid(hostname),
           "search":{
           'key_': monitor_name
           },
       },
       "auth":get_token(),
       "id":0
   }
   req = requests.get(urls, headers=headers, data=json.dumps(items_get_network)).text
   result = json.loads(req)['result'][0]['itemid']
   return result


def Get_max_network(hostname, monitor_name):
   '''獲取一周內(nèi)最大的監(jiān)控值'''
   test = {
       "jsonrpc": "2.0",
       "method": "history.get",
       "params": {
           "output": "extend",
           "history": 3,
           "itemids": items_get(hostname, monitor_name),
           "sortfield": "clock",
           "sortorder": "DESC",
           "time_from": starttime,
           "time_till": endtime
       },
       "auth": get_token(),
       "id": 0
   }

   req = requests.get(urls, headers=headers, data=json.dumps(test)).text
   result = json.loads(req)['result']
   li = []
   for i in result:
       li.append(int(i['value'])) 
   li.sort()
   return str(round(li[-1]/1000/1000,2))+" Mbps"


# get_token()

3.get_value.py

# - * - coding: utf-8-sig - * -

import configparser
def get_message(value):
    cf = configparser.ConfigParser()
    cf.read(r'E:\work\zabbix-graph\get-zabbix\conf\config.ini',encoding="utf-8-sig")
    return cf.get("info",value)

4.config.ini

[info]
user=xxx
password=xxx
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贺待,一起剝皮案震驚了整個濱河市贪惹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌湃窍,老刑警劉巖唯笙,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘤袖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門昂验,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捂敌,“玉大人,你說我怎么就攤上這事既琴≌纪瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵甫恩,是天一觀的道長逆济。 經(jīng)常有香客問我,道長磺箕,這世上最難降的妖魔是什么奖慌? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮松靡,結(jié)果婚禮上简僧,老公的妹妹穿的比我還像新娘。我一直安慰自己雕欺,他們只是感情好岛马,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阅茶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谅海。 梳的紋絲不亂的頭發(fā)上脸哀,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音扭吁,去河邊找鬼撞蜂。 笑死,一個胖子當(dāng)著我的面吹牛侥袜,可吹牛的內(nèi)容都是我干的蝌诡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枫吧,長吁一口氣:“原來是場噩夢啊……” “哼浦旱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起九杂,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颁湖,失蹤者是張志新(化名)和其女友劉穎宣蠕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甥捺,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡抢蚀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镰禾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皿曲。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吴侦,靈堂內(nèi)的尸體忽然破棺而出屋休,到底是詐尸還是另有隱情,我是刑警寧澤妈倔,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布博投,位于F島的核電站,受9級特大地震影響盯蝴,放射性物質(zhì)發(fā)生泄漏毅哗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一捧挺、第九天 我趴在偏房一處隱蔽的房頂上張望虑绵。 院中可真熱鬧,春花似錦闽烙、人聲如沸翅睛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捕发。三九已至,卻和暖如春很魂,著一層夾襖步出監(jiān)牢的瞬間扎酷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工遏匆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留法挨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓幅聘,卻偏偏與公主長得像凡纳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帝蒿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354