《從模板開始打造自己的Zabbix監(jiān)控》要點(diǎn):
本文介紹了從模板開始打造自己的Zabbix監(jiān)控,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
監(jiān)控一直在不同的層面為我們的運(yùn)維工作發(fā)揮著重要的作用:
其中,服務(wù)器監(jiān)控作為一種傳統(tǒng)的監(jiān)控類型,我們結(jié)合不同場(chǎng)景中也用到了多種方案.而在眾多方案中,zabbix由于其強(qiáng)大的功能和靈活的自動(dòng)化特性,尤其得到我們的廣泛使用.
為了打造出適合自己的zabbix監(jiān)控體系,如何去配置和優(yōu)化是一個(gè)比較復(fù)雜的課題.下文從監(jiān)控模板的角度去簡(jiǎn)單介紹下我們的一些思路,以便拋磚引玉.
zabbix自帶了各類操作系統(tǒng)的監(jiān)控模板,一般可以直接拿來用,但如果要求更精細(xì)的監(jiān)控,就要對(duì)自帶模板進(jìn)行修改了.
此外zabbix在網(wǎng)上還有大量的第三方模板可以使用:
https://zabbix.org/wiki/Zabbix_Templates
https://share.zabbix.com/
利用這些第三方模板可以很好地實(shí)現(xiàn)官方模板所沒有的各類監(jiān)控:
充分利用第三方模板能避免重復(fù)造輪子,但往往第三方模板的監(jiān)控并不完全符合自己的需求,這時(shí)也要自行修改.
下面以自帶的Template OS Linux為例進(jìn)行舉例.同時(shí)為了避免修改原始模板,復(fù)制為新模板Template OS Linux Custom進(jìn)行優(yōu)化.
2.1 優(yōu)化監(jiān)控項(xiàng)
為了降低zabbix server的壓力,通常建議把原有監(jiān)控項(xiàng)統(tǒng)一修改為客戶端主動(dòng)式(Active).這里可以用到模板的批量更新功能:
然后是具體監(jiān)控項(xiàng)的優(yōu)化.比如自帶模板通過LLD(Low-level discovery)實(shí)現(xiàn)了所有網(wǎng)卡的流量監(jiān)控,可以在此基礎(chǔ)上增加網(wǎng)卡速率的監(jiān)控.直接在模板里新增一個(gè)監(jiān)控項(xiàng)原型:
新監(jiān)控項(xiàng)可以對(duì)應(yīng)配置下觸發(fā)器,比如這里實(shí)現(xiàn)了網(wǎng)卡速率降到1000M以下的報(bào)警
注意新增監(jiān)控的同時(shí)需要定義客戶端的監(jiān)控項(xiàng):
network_agentd.conf
UserParameter=net.if.speed[*],sudo /sbin/ethtool $1 |grep Speed|awk ‘{print $$2}’|sed ‘s@Mb/s@@’
2.2 優(yōu)化觸發(fā)器
對(duì)于已有觸發(fā)器,建議結(jié)合自己的實(shí)際場(chǎng)景修改報(bào)警閾值,此外可以根據(jù)需求增加新的觸發(fā)器.zabbix的觸發(fā)器支持大量功能函數(shù),因此可以靈活設(shè)計(jì)自己的觸發(fā)器表達(dá)式.
比如自帶模板已經(jīng)有系統(tǒng)時(shí)間的監(jiān)控項(xiàng)(Host local time),但并沒有對(duì)時(shí)間出現(xiàn)偏差的故障進(jìn)行報(bào)警.這時(shí)我們只需要在模板上增加一個(gè)觸發(fā)器,讓被監(jiān)控機(jī)器的系統(tǒng)時(shí)間與zabbix server的系統(tǒng)時(shí)間偏差超過2分鐘時(shí)發(fā)生報(bào)警:
zabbix 3.0起增加了預(yù)測(cè)性的觸發(fā)器函數(shù),可以充分利用該特性優(yōu)化監(jiān)控.如根據(jù)過去1小時(shí)的趨勢(shì)來預(yù)測(cè)未來1小時(shí)是否會(huì)觸發(fā)內(nèi)存不足的報(bào)警:
有時(shí)候不同項(xiàng)目的報(bào)警閾值要求并不一樣,除了分成不同的模板或者單獨(dú)調(diào)整具體主機(jī)的觸發(fā)器,其實(shí)還可以結(jié)合宏實(shí)現(xiàn)報(bào)警閾值的動(dòng)態(tài)調(diào)整.如默認(rèn)的可用swap是小于50%才報(bào)警,我們改為用宏{$SWAPWARN}定義報(bào)警閾值
然后在模板定義一個(gè)宏,設(shè)置默認(rèn)值50,那么默認(rèn)情況下仍然是小于50%才報(bào)警.
但如果對(duì)于具體某個(gè)主機(jī),設(shè)置了其他的宏值如10,那么這個(gè)主機(jī)則會(huì)在可用swap小于10%才報(bào)警.
觸發(fā)器還有一個(gè)選項(xiàng)是嚴(yán)重性,用于設(shè)置該觸發(fā)器的嚴(yán)重程度,這在需要針對(duì)不同閾值設(shè)置不同報(bào)警程度的場(chǎng)景下就特別有用.此時(shí)為了收斂報(bào)警可以設(shè)置觸發(fā)器的依賴關(guān)系,即低嚴(yán)重性觸發(fā)器依賴于高嚴(yán)重性觸發(fā)器.這樣,當(dāng)出現(xiàn)高嚴(yán)重性報(bào)警時(shí),相關(guān)聯(lián)的低嚴(yán)重性報(bào)警就不會(huì)重復(fù)觸發(fā),從而減少報(bào)警消息量.
zabbix 3.0之后,觸發(fā)器原型也支持依賴關(guān)系.比如我們可以對(duì)警告級(jí)別和嚴(yán)重級(jí)別的磁盤空間報(bào)警觸發(fā)器設(shè)置依賴:
zabbix模板支持自動(dòng)發(fā)現(xiàn),這大大方便了同類監(jiān)控的批量添加,非常便于運(yùn)維自動(dòng)化.相比之下,盡管cacit的模板可以通過參數(shù)實(shí)現(xiàn)多個(gè)同類監(jiān)控,但如果要實(shí)現(xiàn)批量添加就復(fù)雜不少.但并不是所有zabbix模板都支持自動(dòng)發(fā)現(xiàn),這時(shí)該怎么辦呢,其實(shí)我們可以手動(dòng)改造模板.
比如常用的Percona Monitoring Plugins,它很全面地實(shí)現(xiàn)了MySQL監(jiān)控,比官方自帶的強(qiáng)大得多.但默認(rèn)模板只能監(jiān)控單一的3306實(shí)例.如果線上實(shí)例不是3306端口,或者有多個(gè)實(shí)例就無法監(jiān)控了.下面介紹如何將它改造為LLD(Low-level discovery)的自動(dòng)發(fā)現(xiàn)模板.
3.1 定義自動(dòng)發(fā)現(xiàn)規(guī)則
所有自動(dòng)發(fā)現(xiàn)的模板都至少要定義一個(gè)自動(dòng)發(fā)現(xiàn)規(guī)則,這里定義一個(gè)每小時(shí)更新的規(guī)則,用于發(fā)現(xiàn)需要監(jiān)控的所有MySQL端口
定義自動(dòng)發(fā)現(xiàn)中具體的宏.宏可以定義多個(gè),但這里只需要一個(gè)即MySQL端口
定義匹配宏用的正則表達(dá)式規(guī)則,也可以不配置.這里類似33**的值都被認(rèn)為是合法端口值
3.2 修改模板XML
將模板導(dǎo)出為XML,將普通監(jiān)控改為自動(dòng)發(fā)現(xiàn)的格式:
首先修改監(jiān)控項(xiàng)為監(jiān)控項(xiàng)原型
<items>
<item>
……
</item>
</items>
替換為下面格式
?<discovery_rules>
<discovery_rule>
<item_prototypes>
<item_prototype>
……
</item_prototype>
</item_prototypes>
</discovery_rule>
</discovery_rules>
修改圖形為圖形原型
?<graphs>
<graph>
……
</graph>
</graphs>
替換為下面格式
?<discovery_rules>
<discovery_rule>
<graph_prototypes>
<graph_prototype>
……
</graph_prototype>
</graph_prototypes>
</discovery_rule>
</discovery_rules>
修改觸發(fā)器為觸發(fā)器原型
<triggers>
<trigger></trigger>
</triggers>
替換為下面格式
<discovery_rules>
<discovery_rule>
<trigger_prototypes>
<trigger_prototype></trigger_prototype>
</trigger_prototypes>
</discovery_rule>
</discovery_rules>
修改應(yīng)用類型為應(yīng)用類型原型(zabbix 3.0起支持)
<applications>
<application>
<name>Percona MySQL</name>
</application>
</applications>
替換為下面格式
<applications/>
<application_prototypes>
<application_prototype>
<name>Percona MySQL {#MYSQLPORT}</name>
</application_prototype>
</application_prototypes>
修改完畢后,導(dǎo)入到zabbix覆蓋原來的模板.
3.3 配置agent的自動(dòng)發(fā)現(xiàn)
配置自動(dòng)發(fā)現(xiàn)的key,需要結(jié)合自己實(shí)際來編寫腳本實(shí)現(xiàn)端口發(fā)現(xiàn)的邏輯.我們是讀取統(tǒng)一管理后臺(tái)的接口,并格式化成zabbix需要的json.
mysql_discovery_agentd.conf
UserParameter=MySQL.port.discovery,/bin/bash /var/lib/zabbix/percona/scripts/zbx_discovery_mysql.sh port_discovery
腳本執(zhí)行效果如下
{
“data”:[
{
“{#MYSQLPORT}”:”3306″
},
{
“{#MYSQLPORT}”:”3307″
}]
}
修改Percona Monitoring Plugins的zabbix配置文件,使得能接收端口參數(shù),實(shí)現(xiàn)自動(dòng)發(fā)現(xiàn).
userparameter_percona_mysql.conf
UserParameter=MySQL.Alive[*],/usr/bin/mysqladmin -uzabbix -pzabbix -h127.0.0.1 -P$1 ping 2>&1|grep alive |wc -l
UserParameter=MySQL.Sort-scan[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt $1
UserParameter=MySQL.slave-stopped[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh $1
UserParameter=MySQL.Com-replace[*],/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz $1
……
這里我們?nèi)サ袅薚otal number of mysqld processes的監(jiān)控項(xiàng),增加一個(gè)用ping來檢測(cè)具體MySQL實(shí)例是否存活的監(jiān)控項(xiàng).
該監(jiān)控項(xiàng)原型還關(guān)聯(lián)了一個(gè)自定義的值映射,增加監(jiān)控值的可讀性
修改Percona Monitoring Plugins的相應(yīng)腳本,以便支持不同端口.而ss_get_mysql_stats.php原本就支持端口參數(shù),所以不需要修改.
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
……
ITEM=$1
HOST=127.0.0.1
PORT=$2
DIR=`dirname $0`
CMD=”/usr/bin/php -q $DIR/ss_get_mysql_stats.php –host $HOST –port $PORT –items gg”
if [ “$PORT” = “3306” ];then
CACHEFILE=”/tmp/$HOST-mysql_cacti_stats.txt”
else
CACHEFILE=”/tmp/$HOST-mysql_cacti_stats.txt:$PORT”
fi
……
最新數(shù)據(jù)的效果如下圖:
當(dāng)把模板都定制好之后,就可以進(jìn)一步定義動(dòng)作,實(shí)現(xiàn)新主機(jī)的自動(dòng)注冊(cè)并關(guān)聯(lián)模板、主機(jī)組.
在模板自動(dòng)關(guān)聯(lián)的基礎(chǔ)上,通過自研運(yùn)維后臺(tái)與zabbix API接口相結(jié)合,我們很好地實(shí)現(xiàn)了服務(wù)器上架并添加監(jiān)控、下架并撤銷監(jiān)控的自動(dòng)化運(yùn)維工作.
但也需要強(qiáng)調(diào)一下,沒有最好的監(jiān)控系統(tǒng),只有最合適自己的監(jiān)控系統(tǒng).怎么結(jié)合開源工具和自研工具,更好地實(shí)現(xiàn)運(yùn)維自動(dòng)化需求才是我們的核心目標(biāo).
原文來自微信公眾號(hào):運(yùn)維軍團(tuán)
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4284.html