zabbix告警系統--文末彩蛋

zabbix安裝和配置非常簡單,學習成本低,但是zabbix告警卻是很煩人的,而且關於告警的中文翻譯資料非常少.

在zabbix裏面,告警通道配置太繁瑣,我們分別來分析下:

  1. 郵件報警: 如需配置郵件報警,就得在Zabbix裏配置郵件調用接口。並且Zabbix郵件報警經常發生延遲(Zabbix自身延遲+郵件服務商延遲),更悲催的是,報警郵件往往沒人看.既然看郵件不方便,我們就考慮短信報警
  2. 短信報警: 如果配置短信報警,就需要向服務商購買短信服務.確實有很多短信服務都很便宜.而且如果我們用的是阿里雲這樣的雲服務,短信服務可以隨時開通(13年時候). 需要設定短信末班,在zabbix配置短信調用接口,而且還要避免某個短信服務商延遲和漏發
  3. 電話報警: 這個是最坑的,在半夜三更把運維人員從睡夢中弄醒,及時解決緊急故障,比起短信來,電話的提醒效果會更好.但是電話報警用不好真是一種騷擾,愛愛到一半電話來了,接還是不接是個問題.我們之前公司,使用電話報警,都需要做二次開發.這時候python就有用了,當然以前腦袋短路,用的java.
  4. 微信報警,是不是又升級了,跟的商形式嘛,配置微信報警,需要申請開通微信的相關服務,然後排期進行針對性開發
  • 首先,微信的訂閱號、服務號、企業號,其消息推送限制、消息內容限制、認證前後的人數限制都是不同的 ,真的能分的那麼清楚?
  • 其次,如果發生報警風暴,確定你的小心臟接受得了微信裏突然多出來的成百上千條報警提示,反正我是已經習慣了.
  • 不過我也是被虐千遍後纔想起來可以搞一個只要有運維人員介入維護,就不再發信息,不然老大會瘋掉的

上面就是我們經常會用到的報警方案,但是對於zabbix來講,無論哪種方案的配置都特別複雜,而且沒有中文參考資料.我增加新到一家公司,他們的運維就是配置一個User組,配置一個Trigger就了事.

無論是郵件報警、短信報警或微信報警,都會存在告警風暴的問題:如果發現類似斷網等大面積故障,而且沒有告警保護和收斂機制的話,那電話響一個小時的事情是常有的,更不用說說不清的報警郵件,以及讓人瘋掉的短信.

後來對於監控系統管理上,我們做了調整,解決了一旦發生報警,立即全員通知的弊端,報警級別嚴格劃分.嚴重級別輪詢升級通知處理,使用java做二次開發,後來做自動化運維平臺的時候用zabbix做了重構.

這期間,我們也換過監控寶,New Relic,等收費工具,收費工具雖然好用,但是基於企業信息安全的保障性比較差,當然這些可能作爲監控服務提供商不會承認,但我們對自己的企業成本,人力成本,信息安全做綜合考慮.

說到安全還有一件很低級可笑的事情,之前服務的一家公司測試服務用的是騰訊雲,我介入的時候,騰訊雲還處在公測階段,服務器快要到期的時候我一再強調騰訊雲是到期立即回收資源,不像阿里雲有一週的緩衝起,不過最終很不幸,還是到期了,而且沒有立即充值,所有的努力都化爲烏有.好在是測試機,也可能是測試機所以引不起公司的重視吧. 當然這是騰訊雲公測時候的事情了,現在貌似也不會到期立即釋放資源這一說法了.

彩蛋:

在這裏共享一個微信報警---企業號(shell)版本:

#!/bin/bash

###SCRIPT_NAME:TFedu###

###send message from weixin for zabbix monitor###

###develop###

###V7-2014-05-12###

CropID='wx4a5706c1941562f0'

Secret='wWddGauAGusDEkETib9PEwnDacTQ9Ie-w-Fh6HhSUD3rmsQ_ro980vun4jbOAVrS'

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"

Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" '{print $4}')

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

function body(){

local int AppID=1 # 企業號中的應用id

local UserID=$1 # 部門成員id,zabbix中定義的微信接收者

local PartyID=2 # 部門id,定義了範圍,組內成員都可接收到消息

local Msg=$(echo "$@" | cut -d" " -f3-)

# 過濾出zabbix中傳遞的第三個參數

printf '{'

printf ' "touser": "'"$User""","

printf ' "toparty": "'"$PartyID""","

printf ' "msgtype": "text",'

printf ' "agentid": "'" $AppID ""","

printf ' "text": {'

printf ' "content":"'"$Msg""""

printf ' },'

printf ' "safe":"0"'

printf '}'

}

/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

當然這個腳本並不是唯一的答案,你可以改寫成python腳本.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章