(原文地址:https://blog./posts/2015/02/17/ji-yu-zabbix-dockerkai-fa-de-jian-kong-xi-tong/)背景團(tuán)隊(duì)所開(kāi)發(fā)的持續(xù)監(jiān)測(cè)網(wǎng)站/APP的產(chǎn)品,需要有一項(xiàng)監(jiān)控功能,具體來(lái)說(shuō)就是,對(duì)URL/域名進(jìn)行周期性(小于1分鐘)監(jiān)測(cè),并且能對(duì)異常事件進(jìn)行實(shí)時(shí)告警。在最近這幾個(gè)月,我一直將大部分時(shí)間和精力花在了設(shè)計(jì)開(kāi)發(fā)這套系統(tǒng)上面,一共經(jīng)歷了兩個(gè)大版本。下文就對(duì)這套監(jiān)控系統(tǒng)進(jìn)行介紹,分享給大家。 自己之前沒(méi)有這類系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)經(jīng)驗(yàn),于是問(wèn)了下周圍同事。和同事討論的結(jié)果是:既然現(xiàn)在人手不夠(就我一個(gè)人),我之前也沒(méi)開(kāi)發(fā)過(guò)這類系統(tǒng),時(shí)間又比較緊迫(領(lǐng)導(dǎo)給的排期是“越快越好”……),那么找一個(gè)已有的開(kāi)源監(jiān)控系統(tǒng)進(jìn)行二次開(kāi)發(fā),應(yīng)該是一個(gè)不錯(cuò)的選擇。那么,選擇哪種開(kāi)源監(jiān)控系統(tǒng)呢?根據(jù)同事以往的經(jīng)驗(yàn),可以考慮zabbix,自己也調(diào)研過(guò)一段時(shí)間zabbix,它的優(yōu)點(diǎn)有如下幾條:
另外,除了以上這樣,還有一個(gè)比較重要的一個(gè)原因:團(tuán)隊(duì)中的同事之前也調(diào)研過(guò)zabbix。在人手不足、時(shí)間又緊的情況下,這一個(gè)因素的權(quán)重就顯得相對(duì)較高。所以,最終選擇了在zabbix基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)。 至于使用docker,是考慮到監(jiān)控的對(duì)象,會(huì)因?yàn)橛脩舻脑鲩L(zhǎng)、以及用戶的操作,有動(dòng)態(tài)的變化。作為設(shè)計(jì)者,自然希望有一種機(jī)制,能夠可編程地、動(dòng)態(tài)地控制zabbix agent的數(shù)量。我們既不讓某一個(gè)agent(具體應(yīng)該是agent的端口)有過(guò)多的監(jiān)控項(xiàng),導(dǎo)致監(jiān)控項(xiàng)無(wú)法在一個(gè)周期內(nèi)完成數(shù)據(jù)采集;又不想有生成過(guò)多的agent,造成系統(tǒng)資源的浪費(fèi)。目前勢(shì)頭正勁的docker,怎能不進(jìn)入我的視野?社區(qū)活躍、文檔完善、相對(duì)其他虛擬化技術(shù)又很輕,都成為了我選擇docker的原因。 需求這個(gè)監(jiān)控系統(tǒng)的設(shè)計(jì)目標(biāo)是:希望能夠提供秒級(jí)時(shí)間粒度的監(jiān)控服務(wù),實(shí)時(shí)監(jiān)控用戶網(wǎng)頁(yè)的可用性指標(biāo),做到快速反饋。 第一個(gè)版本架構(gòu)第一個(gè)版本中,系統(tǒng)的設(shè)計(jì)特點(diǎn)為:
第一個(gè)版本的架構(gòu),如下圖所示:
流程以創(chuàng)建監(jiān)控任務(wù)為例,當(dāng)前端發(fā)出創(chuàng)建監(jiān)測(cè)任務(wù)時(shí),
這樣,就完成了添加任務(wù) -> 告警 -> 恢復(fù)的整個(gè)監(jiān)控系統(tǒng)的典型流程。 性能對(duì)第一個(gè)版本進(jìn)行了性能測(cè)試,得到了以下性能指標(biāo): (3臺(tái)服務(wù)器,1臺(tái)部署Zabbix Server,2臺(tái)部署Docker + Zabbix Agent。服務(wù)器配置:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz X 24,128G 內(nèi)存,千兆網(wǎng)卡)
存在的不足因?yàn)殚_(kāi)發(fā)時(shí)間所限,以及對(duì)于新技術(shù)的調(diào)研不夠深入,第一個(gè)版本有不少不足,主要體現(xiàn)如下:
第二個(gè)版本升級(jí)點(diǎn)針對(duì)第一版本發(fā)現(xiàn)的問(wèn)題,在設(shè)計(jì)上做了一些升級(jí),具體升級(jí)點(diǎn)和設(shè)計(jì)上面的特點(diǎn)如下:
第二版的架構(gòu)變成了這樣:
上圖中,
每當(dāng)啟動(dòng)一個(gè)Docker container,就會(huì)將物理機(jī)的IDC、ETCD Server地址、Zabbix Server地址等參數(shù)傳遞至container,然后在內(nèi)部啟動(dòng) 啟動(dòng)了多個(gè)container,在Zabbix Server中就對(duì)應(yīng)了多個(gè)Zabbix Host,如下圖所示:
其他方面調(diào)優(yōu)除了整體架構(gòu)的升級(jí),還在了許多方面(主要是Zabbix)進(jìn)行了調(diào)優(yōu),比如: 盡量增加agent的超時(shí)時(shí)間 因?yàn)槲覀兊谋O(jiān)控采集項(xiàng),都是需要對(duì)URL或者域名進(jìn)行網(wǎng)絡(luò)操作,這些操作往往都會(huì)比較耗時(shí),而且這是正常的現(xiàn)象。因此,我們需要增加在Zabbix agent的采集超時(shí),避免正常的網(wǎng)絡(luò)操作還沒(méi)完成,就被判斷為超時(shí),影響Server的數(shù)據(jù)獲取。 不要在采集腳本中加上超時(shí) 既然Zabbix agent中已經(jīng)配置了采集超時(shí)時(shí)間,就不需要在采集腳本中添加超時(shí)了。一方面增加了維護(hù)成本,另一方面如果配置不當(dāng),還會(huì)造成Zabbix agent中的超時(shí)配置失效。(之前在腳本中使用了 增加Zabbix Server的Poller實(shí)例 默認(rèn)情況,用于接收Z(yǔ)abbix agent采集數(shù)據(jù)的Poller實(shí)例只有5個(gè)。對(duì)于周期在1分鐘內(nèi)、數(shù)量會(huì)達(dá)到千級(jí)別的采集項(xiàng)來(lái)說(shuō),Poller實(shí)例顯然是不夠的,需要增大實(shí)例數(shù),充分利用好服務(wù)器資源。例如: 利用好Zabbix trigger expression 如果只把trigger expression理解為“判斷某個(gè)item value大于/小于某個(gè)閾值”,那就太低估Zabbix的trigger expression了,它其實(shí)可以支持很多復(fù)雜的邏輯。比如,為了防止網(wǎng)絡(luò)抖動(dòng),需要當(dāng)最近的連續(xù)兩個(gè)采集項(xiàng)異常時(shí),才改變trigger的狀態(tài),表達(dá)式可以寫成:(假設(shè) 再舉個(gè)例子,同樣是為了防止采集的服務(wù)不穩(wěn)定,我們可以規(guī)定,當(dāng)目前trigger的狀態(tài)為PROBLEM,并且最近5分鐘的采集數(shù)據(jù)均正常的時(shí)候,才可以將trigger狀態(tài)改為OK,表達(dá)式可以這樣寫: 具體可以參考Trigger expression 性能測(cè)試環(huán)境: 3臺(tái)服務(wù)器,硬件參數(shù)與之前保持一致
性能指標(biāo):
部分性能指標(biāo)的監(jiān)測(cè)圖如下: Zabbix Server每秒處理監(jiān)控項(xiàng)數(shù)目 Zabbix Server網(wǎng)卡入口流量 Zabbix Server網(wǎng)卡出口流量 可以看出,跟第一版相比,最大可采集的數(shù)據(jù)量是原來(lái)的近7倍,Zabbix Server的進(jìn)出口流量有明顯的提升,監(jiān)控項(xiàng)的處理吞吐率也和采集項(xiàng)數(shù)量有了一致的提高,是原來(lái)的6.8倍,并且沒(méi)有出現(xiàn)監(jiān)控項(xiàng)在一個(gè)周期內(nèi)無(wú)法采集到的情況(如果再增加監(jiān)控項(xiàng),則會(huì)不定期出現(xiàn)采樣不連續(xù)的情況),性能提升還是比較明顯的。 系統(tǒng)截屏故障事件列表
短信報(bào)警
總結(jié)本文從架構(gòu)上介紹了如果基于Zabbix以及Docker,構(gòu)建一個(gè)監(jiān)控系統(tǒng)。 (廣告時(shí)間,感興趣的朋友可以登錄我們的官網(wǎng)進(jìn)行注冊(cè),使用我們的評(píng)測(cè)/監(jiān)測(cè)/加速等服務(wù),并且通過(guò)添加PC持續(xù)監(jiān)測(cè)任務(wù)來(lái)對(duì)網(wǎng)站進(jìn)行實(shí)時(shí)監(jiān)控。) 當(dāng)然,目前的版本仍然不夠完美,目前“抗住”了,然后需要考慮“優(yōu)化”,年后預(yù)計(jì)會(huì)有較大改動(dòng),架構(gòu)上以及技術(shù)上,自己已經(jīng)在考量中。 |
|
|
來(lái)自: gljin_cn > 《運(yùn)維監(jiān)控》