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