天天看點

zabbix自動截圖留檔_python版

1 背景  

    每個DB Server都有zabbix監控,除了異常情況的報警資訊外,也會在日檢、周檢、月檢等工作中用到zabbix的監控資料,對zabbix監控資料會做兩種處理:1 資料分析(環比分析、最大值、最小值及平均值分析);2 主要檢測項目折線圖留檔(為啥需要留檔呢,因為zabbix監控過多伺服器,監控資料僅保留半年到1年間)。

    關于 資料分析類的,已嵌入 日檢郵件報告跟 月度報告 中,而 zabbix 監控圖留檔 一直沒實作自動化,每個月都是人工取截圖。剛好最近遇到 國慶db報告跟9月資料庫報告,需要各種截圖留檔,然後觸發了寫個小腳本來自動下載下傳 zabbix的監控圖。

    如果轉載,請注明博文來源: www.cnblogs.com/xinysu/   ,版權歸 部落格園 蘇家小蘿蔔 所有。望各位支援!

2 寫個小腳本

2.1 擷取圖檔url

    首先打開日常的zabbix監控圖頁面,點選 F12,然後點選

zabbix自動截圖留檔_python版

,這個時候選中頁面中的折線圖,就可以看到 對應的HTML代碼,最後點選對應的html代碼右鍵 copy下圖檔的連結位址,即可知道 zabbix的監控圖 的url。

zabbix自動截圖留檔_python版

    根據擷取的url如下:

    http://company.moniter.com/chart.php?period=2592000&stime=20170901000000&itemids%5B0%5D=32571&type=0&updateProfile=1&profileIdx=web.item.graph&profileIdx2=32571&width=1778&sid=341eb79599119b85&screenid=&curtime=1508809467171

    這裡邊有幾個參數說明下

  • stime 是監控的開始時間按照 '%Y%m%d%H%M%S' 的時間格式
  • period 是監控圖的時長,從 stime開始要展示 多少秒 的監控資料
  • itemid[0] 是 監控項目在zabbix 資料庫的 itemid 号
    • 這個如何查呢?首先根據 host表格,找到監控伺服器的hostid,然後根據 items表格找到對應的監控id
    • select i.hostid,itemid,i.name,key_,i.description from items i join hosts h on i.hostid=h.hostid where h.name = 'hostname';
  • curtime這裡可以不填寫,但是注意 stime 加上 period秒數後,不要超過目前查詢時間即可
  • width 為圖檔的長度

    根據需要,僅保留4個參數,這裡注意 stime 加上 period秒數後,不要超過目前查詢時間 ,簡化後的url如下(把zabbix部署的域名或者網址IP替換掉 company.moniter.com):

    http://company.moniter.com/chart.php?period=2592000&stime=20170901000000&itemids[0]=32571&width=1778

2.2 腳步及測試

    小腳本實作的功能是:根據批量的itemid,自動下載下傳圖檔到本地目錄,并且重命名圖檔名稱。

    代碼實作如下:

1 # -*- coding: utf-8 -*-
 2 __author__ = 'xinysu'
 3 __date__ = '2017/10/12 14:38'
 4 import sys
 5 import datetime
 6 import http.cookiejar, urllib.request, urllib
 7 from lxml import etree
 8 import requests
 9 class ZabbixChart(object):
10     def __init__(self, name, password):
11         url="http://company.monitor.com/index.php";
12         self.url = url
13         self.name = name
14         self.password = password
15         cookiejar = http.cookiejar.CookieJar()
16         urlOpener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar))
17         values = {"name": self.name, 'password': self.password, 'autologin': 1, "enter": 'Sign in'}
18         data = urllib.parse.urlencode(values).encode(encoding='UTF8')
19         request = urllib.request.Request(url, data)
20         try:
21             urlOpener.open(request, timeout=10)
22             self.urlOpener = urlOpener
23         except urllib.request.HTTPError as e:
24             print(e)
25     def download_chart(self, image_dir,itemids,stime,etime):
26         # 此url是擷取圖檔是的,請注意餅圖的URL 和此URL不一樣,請仔細觀察!
27         url="http://company.monitor.com/chart.php";
28         # 折線圖的大小
30         url_par={}
31         url_par={"width":1778, "height":300,"itemids":itemids}
32         # 開始日期、結束日期從str轉換為datetime
33         stime = datetime.datetime.strptime(stime, "%Y-%m-%d")
34         etime=datetime.datetime.strptime(etime, "%Y-%m-%d")
35         # 計算period
36         diff_sec = etime - stime
37         period = diff_sec.days*24*3600 + diff_sec.seconds
38         url_par["period"] = period
39         # stime轉換str
40         stime = stime.strftime('%Y%m%d%H%M%S')
41         url_par["stime"] = stime
42         key = url_par.keys()
43         data = urllib.parse.urlencode(url_par).encode(encoding='UTF8')
44         request = urllib.request.Request(url, data)
45         url = self.urlOpener.open(request)
46         image = url.read()
47         html = requests.get('http://company.monitor.com/history.php?action=showgraph&itemids[]={}'.format(itemids)).text
48         page = etree.HTML(html)
49         hostname_itemname = page.xpath('//div[@class="header-title"]/h1/text()')[0].split(':')
50         hostname = hostname_itemname[0]
51         hostname_itemname.pop(0)
52         itemname = '_'.join(hostname_itemname).replace('/','_')
53         imagename = "{}\{}_{}_{}_({}).png".format(image_dir,hostname,stime,etime.strftime('%Y%m%d%H%M%S'),itemname)
54         f = open(imagename, 'wb')
55         f.write(image)
56       

    根據寫好的類,輸入zabbix的登入帳号、監控圖的起始跟結束時間、本地存放圖檔目錄、itemid的list,運作後如下:

1 # 登陸URL
 2 username = "xinysu"
 3 password = "passwd"
 4 
 5 # 圖檔的參數,該字典至少傳入graphid
 6 stime = "2017-09-01"
 7 etime = "2017-10-01"
 8 
 9 # 用于圖檔存放的目錄
10 image_dir = "E:\\03 WORK\\03 work_sql\\201709"
11 
12 #運作
13 b = ZabbixChart(username, password)
14 item_list =(35295,35328,38080,37992,38102,38014,35059,35022,42765,35024,35028,35035,35036,35044,35045,35046,35047,38248,36369,36370,36371,36372)
15 for i in item_list:
17     itemids = i
18     b.download_chart(image_dir,itemids,stime,etime)      

      随便輸入的itemid 測試下載下傳,實際需要根據監控需要過濾itemid,下載下傳後在檔案夾中顯示如下:

zabbix自動截圖留檔_python版
zabbix自動截圖留檔_python版

如果轉載,請注明博文來源: www.cnblogs.com/xinysu/ ,版權歸 部落格園 蘇家小蘿蔔 所有。望各位支援!

繼續閱讀