轉載宣告:本文轉載自「數睿技術」
前言
本篇文章介紹目前常用的告警方式,以及對功能實現做講解。本篇文章中出現的程式碼片段可以回覆”監控指令碼”獲取完整程式碼。
0x01 E-Mail
郵件告警方式
郵件告警方式是Zabbix最常見的告警方式,是每個初學者必須掌握的告警方式。在這,筆者分享郵件告警方式花樣玩法——附帶資料圖
▲ 效果展示圖
▲ 功能實現思路
zabbix告警傳入item.ky引數,利用item.key獲取當前的效能圖 。最後構建郵件文字內容加入效能圖片。
▲ 效能圖
透過分析效能圖有以下發現:
http://127.0.0.1/zabbix/chart.php?period=864000& \
stime=20180317191110&itemids;%5B0%5D=25464& \
type=0&updateProfile;=1&profileIdx;=web.item.graph& \
profileIdx2=25464&width;=1778&sid;=37a0a2403c5192c8& \
screenid=&curtime;=1490613155473
period # zabbix資料時間範圍
stime # 開始時間
itemids[0] # item.key
type # 圖表型別
profiledx # 項型別
width # 圖表寬度
sid # 使用者sid
必須的引數有:
"period" : "3600" # 一小時內的效能圖
"itemids[0]" : itemID # item的id
"type" : "0" # 圖表型別
"profileIdx" : "web.item.graph" # 項
"width" : "700" # 寬度
仔細觀察這些引數,發現變化的只有item id 其他都是可以不變的,而item.ky是在告警的時候可以直接傳入的。
▲ Actions
告警動作裡的配置:
HOST.HOST1:{HOST.HOST1}|HOST.IP1:{HOST.IP1}|EVENT.DATE:{EVENT.DATE}|
EVENT.TIME:{EVENT.TIME}|TRIGGER.SEVERITY:{TRIGGER.SEVERITY}|
TRIGGER.NAME:{TRIGGER.NAME}|ITEM.KEY1:{ITEM.KEY1}|ITEM.NAME1:{ITEM.NAME1}|
ITEM.VALUE1:{ITEM.VALUE1}|ITEM.ID:{ITEM.ID}|TRIGGER.STATUS:{TRIGGER.STATUS}
▲ 指定item.key獲取效能圖功能實現
程式碼片段展示
import requests
myRequests = requests.Session()
def GetGraph(itemID,pName=None):
try:
"""
獲取效能圖,首先需要登入
透過分析,可以直接Post/Get方式登入
"""
loginUrl = "http://%s/zabbix/index.php" % HOST
loginHeaders={
"Host":HOST,
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
}
# 構建登入所需的資訊
playLoad = {
"name":USER,
"password":PASSWD,
"autologin":"1",
"enter":"Sign in",
}
# 請求登入
res = myRequests.post(loginUrl,essay-headers=loginHeaders,data=playLoad)
"""
登入狀態後,在POST資料中加入itemid
"""
testUrl = "http://%s/zabbix/chart.php" % HOST
testUrlplayLoad = {
"period" :"3600",
"itemids[0]" : itemID,
"type" : "0",
"profileIdx" : "web.item.graph",
"width" : "700",
}
testGraph = myRequests.get(url=testUrl,params=testUrlplayLoad)
# 傳回圖片原始碼,直接儲存到本地
IMAGEPATH = os.path.join('/tmp', pName)
f = open(IMAGEPATH,'wb')
f.write(testGraph.content)
f.close()
return pName
except Exception as e:
print e
return False
finally:
myRequests.close()
0x02 Phone Call
電話告警方式
現在有許多語音通知介面廠商,所以想要實現電話告警,騷一賊!(so easy)。很多小夥伴沒有部署有幾個原因:
Q : 增加成本/費用
A : 有這個想法,首先你得先瞭解介面廠商收費標準。正常請求沒有接聽是不需要收費的,也就是說:收到電話時掐掉電話是不需要收費的。
筆者介面廠商十塊錢餘額用了一年,這十塊錢還是新使用者註冊送的…hahahaha. 這種做法顯然對廠商十分不利,但是我有不接聽的理由:1) 政策限制,由於政策限制,現在無法長語音轉文字,通常是很有限字數,給的資訊十分有限。2) 轉換慢, 我們請求的時候是需要先把文字轉換成語音,接著再撥打電話將這段語音推送出去的。現在文字轉語音已經有限制,需要審核透過才能傳送。即使有廠商不用審核,這轉換過程也是非常慢的。 3) 收到響聲就已經處於備戰狀態。當你收到這個電話號碼打來時,意味著你已經拿起手機,知道有故障。那這個時候,你完全可以看郵件/微信上面顯示的告警內容。
Q : 大半夜收到電話
A : 電話告警只限最緊急的故障,平常一些普通級別的告警不建議使用電話通知方式,頻繁收到緊急嚴重的故障問題,那你考慮的不應該是告警了,而是這套系統本身。故障是客觀存在的,遇到故障一味更改告警閾值或告警方式,卻忽略最根本的問題,有問題在,才會有告警,不解決問題,這告警一直在。再者就是一個對工作態度的問題了。
▲ 功能實現思路
根據嚴重級別分類觸發電話告警指令碼,回覆”監控指令碼”獲取指令碼。
0x03 SMS
簡訊告警方式
簡訊告警同樣採用介面廠商提供的API介面,收取費用標準一般是3-5分錢/次。適用於中等到嚴重級別的告警。
▲ 功能實現思路
根據嚴重級別分類觸發簡訊告警指令碼,回覆”監控指令碼”獲取指令碼。
▲ 效果展示圖
0x04 Wechat
微信公眾號告警方式
微信告警方式也作為常用的告警方式,需要申請微信公眾號。
▲ 功能實現思路:
根據嚴重級別分類觸發微信告警指令碼,回覆”監控指令碼”獲取指令碼。
▲ 效果展示圖
0x05 Other
其他告警方式
一些其他的有趣告警,例如:QQ 、微訊號、RTX、釘釘等告警方式都需要透過自己寫指令碼去請求介面完成,這裡不做演示。QQ/微信都是透過分析網頁版去模擬請求,RTX與釘釘有自己的介面。
▲ Github上相關的專案
QQ https://github.com/pandolia/qqbot
Wechat https://github.com/liuwons/wxBot
RTX https://github.com/rainfiel/rtx
...
▲ 效果展示圖
RTX
總結
………………………………
各種告警方式對比:
# 文中如若出現錯誤,歡迎各位指出。
# 若有更好的解決方案,也非常期待能夠與您交流!
「獲取原始碼」
回覆 ‘監控指令碼’
《Linux雲端計算及運維架構師高薪實戰班》2018年05月14日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~
*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。
– END –
更多Linux好文請點選【閱讀原文】哦
↓↓↓