神荼
神荼是中國(guó)民間傳說(shuō)中能制伏惡鬼的神人茄菊。最開(kāi)始出現(xiàn)在上古神話(huà)中疯潭。傳說(shuō)神荼和郁壘同為魑魅魍魎之首赊堪,歸于蚩尤,在涿鹿之戰(zhàn)中被擒竖哩,降于黃帝軒轅氏雹食。一般位于左邊門(mén)扇上,身著斑斕戰(zhàn)甲期丰,面容威嚴(yán),姿態(tài)神武吃挑,手執(zhí)金色戰(zhàn)戢钝荡。故中國(guó)民間稱(chēng)他為門(mén)神。表達(dá)了古代人民一種消災(zāi)免禍舶衬、趨吉避兇的美好愿望埠通。
作為互聯(lián)網(wǎng)企業(yè),我們也需要自己的神荼逛犹,于是我們的監(jiān)控系統(tǒng)就借用了這個(gè)名字端辱,期望著這套系統(tǒng)能夠如神荼一般守護(hù)公司的平臺(tái)架構(gòu)和業(yè)務(wù)產(chǎn)品!
部署策略
監(jiān)控系統(tǒng)是整個(gè)運(yùn)維環(huán)節(jié)虽画,乃至整個(gè)產(chǎn)品生命周期中最重要的一環(huán)舞蔽,要求事前能及時(shí)預(yù)警發(fā)現(xiàn)故障,事后能提供詳細(xì)的數(shù)據(jù)用于追查定位問(wèn)題码撰,這也是對(duì)于想構(gòu)建一套監(jiān)控系統(tǒng)的基本要求渗柿。
穩(wěn):要求平臺(tái)架構(gòu)設(shè)計(jì)成熟;
準(zhǔn):要求能準(zhǔn)確及時(shí)預(yù)警脖岛,準(zhǔn)確定位故障朵栖;
狠:要求滿(mǎn)足多業(yè)務(wù)多維度,大數(shù)據(jù)監(jiān)控對(duì)象數(shù)據(jù)采集性能柴梆;
選擇一款開(kāi)源的監(jiān)控系統(tǒng)陨溅,是一個(gè)省時(shí)省力,效率最高的方案绍在。監(jiān)控系統(tǒng)業(yè)界有很多杰出的開(kāi)源監(jiān)控系統(tǒng)门扇,小伙伴們最容易想到的就是大名鼎鼎的zabbix, 不過(guò)隨著業(yè)務(wù)的快速發(fā)展,以及互聯(lián)網(wǎng)公司特有的一些需揣苏,如針對(duì)docker容器的監(jiān)控悯嗓。zabbix監(jiān)控系統(tǒng)在性能、擴(kuò)展性和用戶(hù)的使用效率方面卸察,已經(jīng)無(wú)法支撐了脯厨。
為了滿(mǎn)足大型企業(yè)多維度監(jiān)控需求選擇自行開(kāi)發(fā)一套監(jiān)控系統(tǒng)是一種很好的方法。但是自行開(kāi)發(fā)在人力坑质、時(shí)間成本投入過(guò)大很容易讓產(chǎn)品夭折合武。站在前人的肩膀上临梗,利用優(yōu)秀的開(kāi)源項(xiàng)目快速構(gòu)建現(xiàn)代化監(jiān)控系統(tǒng)才是合理的選擇。于是稼跳,我們嘗試了盟庞,獲得了一些經(jīng)驗(yàn)和體會(huì),在此分享給大家汤善。
我們需要的監(jiān)控系統(tǒng)
基本的監(jiān)控系統(tǒng)系統(tǒng)組件:
采集器
存儲(chǔ)數(shù)據(jù)
顯示數(shù)據(jù)
報(bào)警通知
依照監(jiān)控系統(tǒng)功需求劃分為:
系統(tǒng)基礎(chǔ)監(jiān)控
應(yīng)用服務(wù)監(jiān)控
業(yè)務(wù)狀態(tài)監(jiān)控
日志分析監(jiān)控
根據(jù)業(yè)務(wù)的需求什猖,慎重比較和選擇開(kāi)源項(xiàng)目后,我們定義出下面的系統(tǒng)架構(gòu):
基于Zabbix構(gòu)建報(bào)警平臺(tái)
Zabbix 無(wú)疑是開(kāi)源項(xiàng)目中最成熟的監(jiān)控解決方案红淡。是一個(gè)可高自由度定制不狮,可視化的報(bào)警監(jiān)控系統(tǒng)。 功能十分的強(qiáng)大在旱,可輕松實(shí)現(xiàn)探針的自動(dòng)化注冊(cè)摇零,也支持基于角色的監(jiān)控對(duì)象自動(dòng)發(fā)現(xiàn)⊥靶可定制各種模板(template)驻仅,通過(guò)SNMP、SSH登渣、Telnet噪服、IPMI、JMX監(jiān)控绍豁,可自由定制可視化的屏幕(screen)等等芯咧。
在多維度的生產(chǎn)應(yīng)用環(huán)境中單臺(tái)主機(jī)監(jiān)控采集器需要完成約400多項(xiàng)監(jiān)控指標(biāo),這些指標(biāo)包括以下幾個(gè)方面:
CPU info
Disk info
IO
System uptime
Memory info
Network info
端口存活竹揍、進(jìn)程存活
單個(gè)進(jìn)程資源消耗(nginx 敬飒、tomcat、mysql)
TCP/UDP (established芬位、time_close 无拗、time_waite )相關(guān)統(tǒng)計(jì)
服務(wù)器硬件相關(guān)IPMI(溫度、電源昧碉、風(fēng)扇轉(zhuǎn)速英染、raid)
內(nèi)核配置參數(shù)
zabbix使用關(guān)系型數(shù)據(jù)庫(kù)mysql作為數(shù)據(jù)存儲(chǔ)。不過(guò)隨著業(yè)務(wù)的發(fā)展及復(fù)雜度的增加Zabbix探針在監(jiān)控對(duì)象上運(yùn)行的腳本也會(huì)變多被饿,需要更多的進(jìn)程四康,可能會(huì)對(duì)正常業(yè)務(wù)產(chǎn)生影響。
cAdvisor 監(jiān)控docker
Google的cAdvisor(Container Advisor)“為容器用戶(hù)提供了了解運(yùn)行時(shí)容器資源使用和性能特征的方法”狭握。cAdvisor的容器抽象基于Google的lmctfy容器棧闪金,因此原生支持Docker容器并能夠“開(kāi)箱即用”地支持其他的容器類(lèi)型。cAdvisor部署為一個(gè)運(yùn)行中的daemon,它會(huì)收集哎垦、聚集囱嫩、處理并導(dǎo)出運(yùn)行中容器的信息。這些信息能夠包含容器級(jí)別的資源隔離參數(shù)漏设、資源的歷史使用狀況墨闲、反映資源使用和網(wǎng)絡(luò)統(tǒng)計(jì)數(shù)據(jù)完整歷史狀況的柱狀圖。選擇使用cadvisor 是因?yàn)榍捌诒O(jiān)控docker郑口。 使用zabbix 自定義python腳本方式調(diào)用docker API ,發(fā)現(xiàn)當(dāng)單臺(tái)宿主機(jī)Container數(shù)量超過(guò)200個(gè)實(shí)例鸳碧。Zabbix性能將急劇下降。Cadvisor可分裝為container配合Influxdb 時(shí)間序列數(shù)據(jù)庫(kù)可輕松突破監(jiān)控性能的限制犬性。
一句命令就可以啟動(dòng)cAdvisor容器杆兵,訪(fǎng)問(wèn)8080端口即可看到性能指標(biāo)數(shù)據(jù)。cAdvisor可以通過(guò)storage_driver參數(shù)將數(shù)據(jù)存到influxdb
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor
Grafanan應(yīng)用
Javascript 開(kāi)發(fā)的前端工具仔夺,支持多數(shù)據(jù)庫(kù)實(shí)例訪(fǎng)問(wèn) InfluxDB、Graphite攒砖、Elasticsearch缸兔、CloudWatch、OpenTSDB吹艇、KairosDB惰蜜、Prometheus。自定義報(bào)表函數(shù)受神、多格式圖表顯示(柱狀圖抛猖、曲線(xiàn)圖、餅圖鼻听、塊狀圖)财著。想在你的Boss面前炫耀一把grafana絕對(duì)能滿(mǎn)足你。
官方在線(xiàn)演示地址:http://play.grafana.org/
如何有效處理報(bào)警信息
在監(jiān)控系統(tǒng)應(yīng)用之中最煩惱的就是每天會(huì)受到監(jiān)控系統(tǒng)發(fā)送來(lái)的上百封告警郵件撑碴。特別是在業(yè)務(wù)應(yīng)用高峰時(shí)期撑教,由于系統(tǒng)的波動(dòng)將在單一時(shí)間多次觸發(fā)監(jiān)控系統(tǒng)的告警伐值。這樣的情況會(huì)給Devops 管理造成一種新的困難醉拓。 如何有效filter告警信息伟姐,將是判定監(jiān)控系統(tǒng)有效應(yīng)用的核心之處。
我們建議分級(jí)別亿卤、分類(lèi)型發(fā)送告警愤兵。
告警級(jí)別分類(lèi):
Waring:
Error:
告警方式類(lèi)型:
郵件告警
電話(huà)告警
告警策略
類(lèi)似系統(tǒng)CPU、 load avage 排吴、網(wǎng)絡(luò)秆乳、磁盤(pán)IO等在業(yè)務(wù)系統(tǒng)高峰期易產(chǎn)生波動(dòng)的監(jiān)控項(xiàng)設(shè)置為waring級(jí)別告警,告警方式采用郵件發(fā)送傍念。同時(shí)應(yīng)針對(duì)當(dāng)日所發(fā)送的告警郵件綜合采樣分析并且能自動(dòng)發(fā)送每日矫夷、每周葛闷、每月Top報(bào)表,報(bào)表包含以下幾項(xiàng):
消耗系統(tǒng)資源TOP10主機(jī)
智能排列統(tǒng)計(jì)(TOP10)CPU使用率双藕、CPU負(fù)載淑趾、內(nèi)存使用率、系統(tǒng)進(jìn)程數(shù)
業(yè)務(wù)訪(fǎng)問(wèn)效率TOP10
智能排列統(tǒng)計(jì)項(xiàng)目平均可用率忧陪、總平均響應(yīng)時(shí)間扣泊。
可用性統(tǒng)計(jì)
智能排列統(tǒng)計(jì)各個(gè)節(jié)點(diǎn)
響應(yīng)時(shí)間統(tǒng)計(jì)
智能統(tǒng)計(jì)單個(gè)項(xiàng)目不同地區(qū)、不同線(xiàn)路響應(yīng)時(shí)間
故障策略
系統(tǒng)磁盤(pán)空間嘶摊、進(jìn)程存活狀態(tài)延蟹,能直接影響用戶(hù)功能使用及業(yè)務(wù)健康狀態(tài)的監(jiān)控項(xiàng)應(yīng)設(shè)置error告警。同時(shí)采用電話(huà)語(yǔ)音方式告警叶堆。要求能快速準(zhǔn)確的告警故障原因阱飘,并且能讓Devops人員做到第一時(shí)間快速解決系統(tǒng)故障。
最新告警消息(TOP10) :
存儲(chǔ)應(yīng)用
對(duì)于監(jiān)控系統(tǒng)來(lái)講沥匈,歷史數(shù)據(jù)的存儲(chǔ)和高效率查詢(xún)忘渔,永遠(yuǎn)是個(gè)很難的問(wèn)題!
數(shù)據(jù)量大
目前我們監(jiān)控系統(tǒng)畦粮,每個(gè)周期散址,大概有2000萬(wàn)次數(shù)據(jù)上報(bào)(上報(bào)周期為1分鐘和5分鐘兩種,各占50%)预麸,一天24小時(shí)里儒将,從來(lái)不會(huì)有業(yè)務(wù)低峰师崎,不管是白天和黑夜,每個(gè)周期椅棺,總會(huì)有那么多的數(shù)據(jù)要更新犁罩。
寫(xiě)操作多
一般的業(yè)務(wù)系統(tǒng)两疚,通常都是讀多寫(xiě)少,可以方便的使用各種緩存技術(shù)丐巫,再者各類(lèi)數(shù)據(jù)庫(kù),對(duì)于查詢(xún)操作的處理效率遠(yuǎn)遠(yuǎn)高于寫(xiě)操作碑韵。而監(jiān)控系統(tǒng)恰恰相反,寫(xiě)操作遠(yuǎn)遠(yuǎn)高于讀祝闻。每個(gè)周期幾千萬(wàn)次的更新操作遗菠,對(duì)于常用數(shù)據(jù)庫(kù)(MySQL、postgresql辙纬、mongodb)都是無(wú)法完成的。
高效率的查
我們說(shuō)監(jiān)控系統(tǒng)讀操作少蓖谢,是說(shuō)相對(duì)寫(xiě)入來(lái)講譬涡。監(jiān)控系統(tǒng)本身對(duì)于讀的要求很高,用戶(hù)經(jīng)常會(huì)有查詢(xún)上百個(gè)meitric,在過(guò)去一天渊跋、一周着倾、一月、一年的數(shù)據(jù)卡者。如何在1秒內(nèi)返回給用戶(hù)并繪圖崇决,這是一個(gè)不小的挑戰(zhàn)。
綜合以上幾點(diǎn)的監(jiān)控系統(tǒng)對(duì)存儲(chǔ)系統(tǒng)的要求脸侥,我們更推薦使用Influxdb盈厘、Elasticsearch類(lèi)似的時(shí)間序列數(shù)據(jù)庫(kù)系統(tǒng)。公開(kāi)的資料顯示,influxdb可每秒完成50萬(wàn)寫(xiě)請(qǐng)求注簿。
Influxdb VS Elasticsearch
以下是influxdb 與Elasticsearch讀寫(xiě)性能及數(shù)據(jù)壓縮比的對(duì)比測(cè)試性能報(bào)表,可以很明確的得知時(shí)間序列數(shù)據(jù)庫(kù)influxdb 更為適合作為監(jiān)控系統(tǒng)的存儲(chǔ)系統(tǒng)應(yīng)用塔嬉。
后記
神荼已經(jīng)誕生恩袱,他已經(jīng)擁有了力量去守護(hù)我們的產(chǎn)品和服務(wù)胶哲。正如每一個(gè)新生兒一樣,他成長(zhǎng)的道路仍然漫長(zhǎng)澈吨。我們期待著他的神力完全發(fā)揮的一天寄摆,也相信這一天會(huì)到來(lái)。也許桑阶,他的力量可以幫助的不僅僅是我們勾邦,也有千千萬(wàn)萬(wàn)跟我們相似的互聯(lián)網(wǎng)公司!
本文作者:胡毅(點(diǎn)融黑幫)萎河,紅帽RHCA架構(gòu)師 蕉饼,2016年5月加入點(diǎn)融Devops 團(tuán)隊(duì)參與監(jiān)控系統(tǒng)的研發(fā)與維護(hù)。多年互聯(lián)網(wǎng)公司從業(yè)經(jīng)驗(yàn)厦幅,熟悉DDOS慨飘、CC 網(wǎng)絡(luò)攻擊防御及業(yè)務(wù)應(yīng)用系統(tǒng)優(yōu)化译荞。