概要
老樣子先來(lái)個(gè)概要,因?yàn)楣疽恢倍甲邮褂闷髽I(yè)微信菜循,前兩天剛剛將所有zabbix的告警信息接到微信上,總感覺還差那么一點(diǎn)申尤,就想著就高等級(jí)的告警加上一個(gè)性能監(jiān)控圖债朵,這樣只看告警信息大概就清楚問(wèn)題了,不用在登錄到zabbix再去查找信息瀑凝,就因?yàn)檫@個(gè)想法讓我掉坑里呆了一整天序芦,驀然回首還是自己太菜啊,下面先貼出來(lái)使用Python登錄zabbix并且獲取到對(duì)應(yīng)告警項(xiàng)監(jiān)控圖的代碼粤咪,之后完整代碼會(huì)貼到github中谚中,鏈接放到簡(jiǎn)書上~
實(shí)現(xiàn)抓取
以下幾點(diǎn)基礎(chǔ):
1、告警信息的發(fā)送message里寥枝,可以發(fā)送zabbix的宏變量Item ID信息
2宪塔、根據(jù)Item ID,可以直接使用特殊URL攜帶Item ID信息獲取對(duì)應(yīng)監(jiān)控截圖
以下為獲取截圖完整代碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# name image.py
from selenium import webdriver
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def get_item_graph(itemid,flag,eventid):
temp_name = "/tmp/"+eventid+".png"
#save_screenshot僅能保存png格式圖片囊拜,所以文件名定義需要以png結(jié)尾
driver = webdriver.PhantomJS("/usr/local/zabbix-agent-ops/phantomjs-2.1.1/bin/phantomjs",service_log_path=os.path.devnull)
#使用PhantomJS可以模擬瀏覽器進(jìn)行訪問(wèn)
driver.get("http://127.0.0.1/zabbix/")
driver.set_window_size(640,480)
driver.find_element_by_id("name").send_keys("armo")
driver.find_element_by_id("password").send_keys("123456")
driver.find_element_by_id("enter").click()
#模擬訪問(wèn)url某筐,在對(duì)應(yīng)的元素element處輸入用戶名密碼后click登陸
if flag:
driver.get("http://127.0.0.1/zabbix/history.php?action=showgraph&fullscreen=1&itemids[]="+itemid)
else:
driver.get("http://127.0.0.1/zabbix/history.php?action=showvalues&fullscreen=1&itemids[]="+itemid)
#flag如果是1,則對(duì)應(yīng)Item有對(duì)應(yīng)的graph獲裙邗巍南誊;如果是0,則獲取最新一段時(shí)間的值
driver.save_screenshot(temp_name)
#將網(wǎng)頁(yè)內(nèi)容保存為png圖片
driver.close()
driver.quit()
if __name__ == "__main__":
if len(sys.argv) > 1:
itemid = sys.argv[1] #腳本傳遞的第一個(gè)參數(shù) Item ID
flag = sys.argv[2] #腳本傳遞的第二個(gè)參數(shù) Flag蜜托,從zabbix數(shù)據(jù)庫(kù)item和graph的對(duì)應(yīng)表查詢item是否具有對(duì)應(yīng)的graph抄囚,如果有則傳遞1到腳本,無(wú)傳遞0
eventid = sys.argv[3] #腳本傳遞的第三個(gè)參數(shù) 告警信息的Event ID橄务,用來(lái)命名png圖片
get_item_graph(itemid,flag,eventid)
#以上三個(gè)參數(shù)為前置調(diào)用腳本分析zabbix的發(fā)送信息后得到幔托,之后會(huì)更新在后續(xù)文章中
遇到的問(wèn)題
1、第一個(gè)session和cookies的保存問(wèn)題,如果登錄之后不攜帶cookies是無(wú)法訪問(wèn)對(duì)應(yīng)監(jiān)控頁(yè)面的重挑,剛開始選擇requests模塊嗓化,感覺相對(duì)較難,對(duì)于剛?cè)腴T的我來(lái)說(shuō)還是selenium比較合適谬哀,不用考慮session和cookies的問(wèn)題
2刺覆、腳本在測(cè)試環(huán)境運(yùn)行非常好,截圖信息也很準(zhǔn)確玻粪,但是到線上服務(wù)器就出了問(wèn)題,上倆個(gè)圖:
很明顯線上環(huán)境返回的圖诬垂,前面一段居然是亂碼劲室。檢查了所有環(huán)境,最后才發(fā)現(xiàn)問(wèn)題出在線上服務(wù)器沒有安裝和zabbix適配的字體問(wèn)題上结窘,很是無(wú)奈啊很洋,居然還要考慮字體的問(wèn)題,阿里云的服務(wù)器也是真夠能偷懶的隧枫。
3喉磁、安裝字體
為了確保萬(wàn)無(wú)一失,直接安裝zabbix調(diào)用的字體到系統(tǒng)中
[root@zabbix ~]# cp /var/www/html/zabbix/fonts/DejaVuSans.ttf /usr/share/fonts/
[root@zabbix ~]# mkfontscale
[root@zabbix ~]# mkfontdir
[root@zabbix ~]# fc-list :lang=zh
Fangsong ti:style=Regular
AR PL ShanHeiSun Uni:style=Regular
[root@zabbix ~]#
安裝成功之后再次運(yùn)行腳本后官脓,截圖一切正常了~~~~終于可以安心睡覺了