在整個(gè)監(jiān)控方案需求中整理了基礎(chǔ)組件、大數(shù)據(jù)組件共12個(gè),每種組件又包含多個(gè)監(jiān)控指標(biāo)項(xiàng),約519項(xiàng)。為便于查看過去90天的監(jiān)控歷史數(shù)據(jù),全部采集的監(jiān)控?cái)?shù)據(jù)周期保存90天,90天的數(shù)據(jù)量在800G左右,每項(xiàng)指標(biāo)根據(jù)其特性采集頻率分為15s、30s。基于監(jiān)控需求的分析結(jié)果,百分點(diǎn)大數(shù)據(jù)團(tuán)隊(duì)從源數(shù)據(jù)采集,存儲并針對性的做了數(shù)據(jù)清洗、分析等開發(fā)工作,最后匯總展示到監(jiān)控平臺中提供告警和預(yù)警的功能,監(jiān)控平臺提供非常炫酷的頁面展示還可投放到大屏上。
二、技術(shù)方案
1.技術(shù)架構(gòu)
監(jiān)控技術(shù)方案通過實(shí)時(shí)數(shù)據(jù)采集、實(shí)時(shí)數(shù)據(jù)處理可視化和高可用技術(shù)等,實(shí)現(xiàn)了多種大數(shù)據(jù)平臺組件的性能指標(biāo)的監(jiān)控。監(jiān)控系統(tǒng)由Zabbix、Prometheus + Grafana這兩部分構(gòu)成。Zabbix 負(fù)責(zé)服務(wù)器的硬件監(jiān)控,Prometheus+Grafana負(fù)責(zé)集群狀態(tài)的監(jiān)控。
Zabbix通過分布式主動監(jiān)控方式,對服務(wù)器進(jìn)行硬件監(jiān)控,Zabbix Agent通過向Zabbix Proxy請求獲取監(jiān)控項(xiàng)列表來定期發(fā)送采集到的新值給Zabbix Proxy,Proxy將多個(gè)監(jiān)控設(shè)備的信息先緩存到本地,然后傳輸?shù)剿鶎俚腪abbix Server。
Prometheus通過集成各類Exporter來采集組件指標(biāo),如上圖所示,通過Node Exporter、Clickhouse Exporter等第三方Exporter來實(shí)現(xiàn)對應(yīng)組件的數(shù)據(jù)采集,同時(shí)通過Jmx Exporter來實(shí)現(xiàn)對Oss Tomcat、HBase、業(yè)務(wù)系統(tǒng)、數(shù)據(jù)流的數(shù)據(jù)采集工作,并將其數(shù)據(jù)存儲在本地時(shí)間序列數(shù)據(jù)庫中。
Grafana通過接口調(diào)用和指標(biāo)編輯來讀取Prometheus所采集的數(shù)據(jù)進(jìn)行可視化展示。
2.技術(shù)選型
(1)Zabbix
Zabbix是一個(gè)基于Web界面提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級開源解決方案,它能監(jiān)視各種網(wǎng)絡(luò)參數(shù),保證服務(wù)器系統(tǒng)的安全運(yùn)營,并提供柔軟的通知機(jī)制以讓系統(tǒng)管理員快速定位/解決存在的各種問題,是企業(yè)自動化運(yùn)維監(jiān)控的利器。Zabbix靈活的設(shè)計(jì)為用戶提供了易用的二次開發(fā)接口,讓用戶既可以使用Zabbix本身提供的功能,又可以自定義更多的監(jiān)控項(xiàng)功能,如硬件監(jiān)控、操作系統(tǒng)、服務(wù)進(jìn)程,以及網(wǎng)絡(luò)設(shè)備等。值得一提的是,它所提供的Proxy分布式架構(gòu)能夠在監(jiān)控多個(gè)遠(yuǎn)程區(qū)域設(shè)備的同時(shí),分擔(dān)server的監(jiān)控壓力且不增加系統(tǒng)的維護(hù)復(fù)雜度,為項(xiàng)目實(shí)施提供便利。
高可用設(shè)計(jì)圖中提到,Zabbix通過Proxy收集項(xiàng)目中所有服務(wù)器的硬件監(jiān)控指標(biāo)數(shù)據(jù)并進(jìn)行預(yù)警和展示,通過Ansible批量在服務(wù)器端安裝Zabbix Agent 并啟動,由客戶端主動發(fā)起請求向Zabbix Server進(jìn)行注冊,自動完成服務(wù)器在Zabbix Web的配置工作。
(2)Prometheus
Prometheus是由前Google員工2015年正式發(fā)布的開源監(jiān)控系統(tǒng),采用Go語言開發(fā),它不僅有一個(gè)很酷的名字,同時(shí)還有Google與K8s的強(qiáng)力支持,開源社區(qū)異?;鸨?在2016年加入云原生基金會,是繼K8s后托管的第二個(gè)項(xiàng)目,未來前景被相當(dāng)看好。數(shù)據(jù)采集基于Pull模式,架構(gòu)簡單,不依賴外部存儲,單個(gè)服務(wù)器節(jié)點(diǎn)可直接工作,二進(jìn)制文件啟動即可,屬于輕量級的Server,便于遷移和維護(hù)。同時(shí)其監(jiān)控?cái)?shù)據(jù)直接存儲在Prometheus Server本地的時(shí)序數(shù)據(jù)庫中,單個(gè)實(shí)例可以處理數(shù)百萬的Metrics。Prometheus靈活的數(shù)據(jù)模型和強(qiáng)大的數(shù)據(jù)查詢語句能夠在對服務(wù)內(nèi)部進(jìn)行詳細(xì)狀態(tài)監(jiān)控的同時(shí)還支持?jǐn)?shù)據(jù)的內(nèi)部查詢,幫助快速定位和診斷問題,非常適用于面向服務(wù)架構(gòu)的監(jiān)控。
在技術(shù)架構(gòu)中,每個(gè)Prometheus負(fù)責(zé)拉取該區(qū)域所有組件的指標(biāo)數(shù)據(jù)并存儲在本地,通過Prometheus UI界面可以查詢該區(qū)域所需指標(biāo)是否收集到數(shù)據(jù)、數(shù)據(jù)是否正常,從而判斷數(shù)據(jù)采集端數(shù)據(jù)收集狀態(tài)。
(3)Grafana
Grafana是一個(gè)可視化儀表盤,通過整合每個(gè)區(qū)域Prometheus所采集的數(shù)據(jù)實(shí)現(xiàn)對該區(qū)域的集群監(jiān)控目的,并將其美觀、直接地展示給使用者。通過Grafana的Datasource鏈接Prometheus url,并對接入的數(shù)據(jù)進(jìn)行分組、過濾、聚合等邏輯運(yùn)算來達(dá)到在面板中直觀展示指標(biāo)含義的目的。
3.非功能技術(shù)實(shí)現(xiàn)
在大型的IT架構(gòu)環(huán)境中,系統(tǒng)的組成部分跨區(qū)域分布在18個(gè)不同城市,跨節(jié)點(diǎn)、多IDC、業(yè)務(wù)類型復(fù)雜、業(yè)務(wù)需求多樣,因此監(jiān)控系統(tǒng)要能滿足業(yè)務(wù)中不斷變化的需求。在這種環(huán)境中構(gòu)建監(jiān)控系統(tǒng),首先要做的事情是掌握全局信息,同時(shí)需要考慮業(yè)務(wù)未來的發(fā)展趨勢。而這個(gè)環(huán)境的監(jiān)控技術(shù)方案既要能滿足當(dāng)前業(yè)務(wù)需求,又能滿足不斷增長的業(yè)務(wù)需求,因此技術(shù)方案需要考慮以下三個(gè)因素:高可用性、高吞吐性、可擴(kuò)展性。
4.核心組件監(jiān)控指標(biāo)
三、最佳實(shí)踐
在面臨著巨大Zabbix的使用過程中,隨著監(jiān)控對象的增多,Zabbix Server面臨非常大的壓力,出現(xiàn)一系列性能瓶頸問題:
Zabbix隊(duì)列中有太多達(dá)到30w+,被延遲的Item會長達(dá)10分鐘左右;
帶有nodata()函數(shù)的觸發(fā)器出現(xiàn)告警;
由于數(shù)據(jù)展示量大,前端界面無響應(yīng)或響應(yīng)很慢。
為解決以上三個(gè)問題,主要從zabbix配置參數(shù)和數(shù)據(jù)庫參數(shù)兩方面進(jìn)行性能調(diào)優(yōu),并給出一般建議供其他技術(shù)人員做參考。
1.最佳參數(shù)優(yōu)化說明
(1)Zabbix配置參數(shù)調(diào)優(yōu)
HistoryStorageDateIndex=1
# 初始化時(shí)啟動的pollers進(jìn)程數(shù)量。由于本次采用主動式,因此該參數(shù)可以調(diào)制最小
StartPollers=1
# 預(yù)處理進(jìn)程
StartPreprocessors=40
StartPollersUnreachable=1
StartTrappers=15
# 啟用ICMP協(xié)議Ping主機(jī)方式啟動線程數(shù)量
StartPingers=1
# 用于設(shè)置自動發(fā)現(xiàn)的主機(jī)線程數(shù)量
StartDiscoverers=1
# 禁用zabbix自帶的housekeeping策略
HousekeepingFrequency=0
# zabbix初始化時(shí)占用多少系統(tǒng)共享內(nèi)存用于存儲配置信息
CacheSize=2G
# 將采集數(shù)據(jù)從緩存同步到數(shù)據(jù)庫的線程數(shù)量
StartDBSyncers=25
# 劃分2G內(nèi)存用于存儲采集的歷史數(shù)據(jù)
HistoryCacheSize=2G
# 存儲歷史數(shù)據(jù)索引所占用的大小
HistoryIndexCacheSize=256M
# 分配緩存趨勢數(shù)據(jù)的內(nèi)存
TrendCacheSize=256M
ValueCacheSize=2G
Timeout=10
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
LogSlowQueries=1000
2.硬件監(jiān)控實(shí)踐
通過Zabbix Agent向zabbix_agentd.conf 配置文件中的ServerActive 請求獲取檢查清單,Server 讀取Zabbix Web中的硬件監(jiān)控列表進(jìn)行響應(yīng),Agent解析響應(yīng)中Item Name,調(diào)用相應(yīng)的參數(shù)開始定期收集數(shù)據(jù)。
注:$IPMI_IP 為IPMI的IP地址,1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.1為dell 服務(wù)器raid卡的snmpoid。
UserParameter=RAIDControllerStatus,/etc/zabbix/scripts/zabbix_agent_snmp.shRAIDControllerStatus
cat/etc/zabbix/scripts/zabbix_agent_snmp.sh
function get_RAIDControllerStatus(){
RAIDControllerStatusvalue=`snmpwalk -v 2c -c public $IPMI_IP1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.1 |awk -F ‘INTEGER: ‘ ‘{print $2}’`
}
3.平臺組件集群監(jiān)控實(shí)踐
如下圖所示是所有運(yùn)行在系統(tǒng)上的程序的總體監(jiān)控列表,其中不乏業(yè)務(wù)系統(tǒng)、數(shù)據(jù)流,也不乏ClickHouse、Ceph、ElasticSearch等集群。
結(jié)語與展望
百分點(diǎn)科技希望通過本篇文章的分享,幫助大家快速了解大規(guī)模機(jī)器集群下的監(jiān)控設(shè)計(jì)架構(gòu)思路,以及每個(gè)核心組件重要的監(jiān)控指標(biāo)項(xiàng)含義和閾值范圍,提供最佳實(shí)踐的優(yōu)化參數(shù),為大家在實(shí)施過程中提供一些參考。
關(guān)于配置文件、Json面板文件和更詳細(xì)的過程信息等問題,歡迎您來咨詢,大家一起探討、共同進(jìn)步。