在整個(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?;诒O(jiān)控需求的分析結(jié)果,百分點(diǎn)大數(shù)據(jù)團(tuán)隊(duì)從源數(shù)據(jù)采集,存儲(chǔ)并針對(duì)性的做了數(shù)據(jù)清洗、分析等開發(fā)工作,最后匯總展示到監(jiān)控平臺(tái)中提供告警和預(yù)警的功能,監(jiān)控平臺(tái)提供非常炫酷的頁(yè)面展示還可投放到大屏上。

技術(shù)方案

2.1技術(shù)架構(gòu)

監(jiān)控技術(shù)方案通過實(shí)時(shí)數(shù)據(jù)采集、實(shí)時(shí)數(shù)據(jù)處理可視化和高可用技術(shù)等,實(shí)現(xiàn)了多種大數(shù)據(jù)平臺(tái)組件的性能指標(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通過分布式主動(dòng)監(jiān)控方式,對(duì)服務(wù)器進(jìn)行硬件監(jiān)控,Zabbix Agent通過向Zabbix Proxy請(qǐng)求獲取監(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)對(duì)應(yīng)組件的數(shù)據(jù)采集,同時(shí)通過Jmx Exporter來實(shí)現(xiàn)對(duì)Oss Tomcat、HBase、業(yè)務(wù)系統(tǒng)、數(shù)據(jù)流的數(shù)據(jù)采集工作,并將其數(shù)據(jù)存儲(chǔ)在本地時(shí)間序列數(shù)據(jù)庫(kù)中。

Grafana通過接口調(diào)用和指標(biāo)編輯來讀取Prometheus所采集的數(shù)據(jù)進(jìn)行可視化展示。

2.2技術(shù)選型

(1)Zabbix

Zabbix是一個(gè)基于Web界面提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)開源解決方案,它能監(jiān)視各種網(wǎng)絡(luò)參數(shù),保證服務(wù)器系統(tǒng)的安全運(yùn)營(yíng),并提供柔軟的通知機(jī)制以讓系統(tǒng)管理員快速定位/解決存在的各種問題,是企業(yè)自動(dòng)化運(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 并啟動(dòng),由客戶端主動(dòng)發(fā)起請(qǐng)求向Zabbix Server進(jìn)行注冊(cè),自動(dòng)完成服務(wù)器在Zabbix Web的配置工作。

(2)Prometheus

Prometheus是由前Google員工2015年正式發(fā)布的開源監(jiān)控系統(tǒng),采用Go語言開發(fā),它不僅有一個(gè)很酷的名字,同時(shí)還有Google與K8s的強(qiáng)力支持,開源社區(qū)異常火爆,在2016年加入云原生基金會(huì),是繼K8s后托管的第二個(gè)項(xiàng)目,未來前景被相當(dāng)看好。數(shù)據(jù)采集基于Pull模式,架構(gòu)簡(jiǎn)單,不依賴外部存儲(chǔ),單個(gè)服務(wù)器節(jié)點(diǎn)可直接工作,二進(jìn)制文件啟動(dòng)即可,屬于輕量級(jí)的Server,便于遷移和維護(hù)。同時(shí)其監(jiān)控?cái)?shù)據(jù)直接存儲(chǔ)在Prometheus Server本地的時(shí)序數(shù)據(jù)庫(kù)中,單個(gè)實(shí)例可以處理數(shù)百萬的Metrics。Prometheus靈活的數(shù)據(jù)模型和強(qiáng)大的數(shù)據(jù)查詢語句能夠在對(duì)服務(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ù)并存儲(chǔ)在本地,通過Prometheus UI界面可以查詢?cè)搮^(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)對(duì)該區(qū)域的集群監(jiān)控目的,并將其美觀、直接地展示給使用者。通過Grafana的Datasource鏈接Prometheus url,并對(duì)接入的數(shù)據(jù)進(jìn)行分組、過濾、聚合等邏輯運(yùn)算來達(dá)到在面板中直觀展示指標(biāo)含義的目的。

2.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ā)展趨勢(shì)。而這個(gè)環(huán)境的監(jiān)控技術(shù)方案既要能滿足當(dāng)前業(yè)務(wù)需求,又能滿足不斷增長(zhǎng)的業(yè)務(wù)需求,因此技術(shù)方案需要考慮以下三個(gè)因素:高可用性、高吞吐性、可擴(kuò)展性。

(1)高可用性

基礎(chǔ)架構(gòu)使用LAMP環(huán)境,采用Keepalived實(shí)現(xiàn)Zabbix、Grafana服務(wù)器高可用,保證主Server的Mysql或者h(yuǎn)ttpd宕掉后能切換到從Server。同時(shí)數(shù)據(jù)庫(kù)做主主同步,保證兩邊服務(wù)器數(shù)據(jù)的一致性,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的高可用,Zabbix和Grafan數(shù)據(jù)庫(kù)選用的磁盤類型均為Raid5,保證在一塊盤離線的情況下保證數(shù)據(jù)的正常訪問。下圖為Zabbix高可用分布式架構(gòu)流程。

(2)高吞吐性

Zabbix、Grafana及Prometheus聯(lián)合監(jiān)控3000+臺(tái)服務(wù)器,實(shí)現(xiàn)從硬件層到應(yīng)用層共計(jì)23萬+Items、17萬+Triggers的全方位監(jiān)控,每秒更新2.43+萬條數(shù)據(jù),每天共計(jì)產(chǎn)生1.1T+數(shù)據(jù)量。

(3)可擴(kuò)展性

Zabbix Proxy可以代替Zabbix Server 收集性能和可用性數(shù)據(jù),然后將數(shù)據(jù)匯報(bào)給 Zabbix Server,并且在一定程度上分擔(dān)了Zabbix Server 壓力的同時(shí),不增加監(jiān)控系統(tǒng)的維護(hù)復(fù)雜度。

每個(gè)Prometheus負(fù)責(zé)收集一個(gè)地區(qū)所有服務(wù)器服務(wù)的運(yùn)行時(shí)狀態(tài)數(shù)據(jù),Grafana則通過插件調(diào)用API接口來對(duì)數(shù)據(jù)進(jìn)行可視化展示。下圖為Ansible批量安裝Proxy節(jié)點(diǎn)代碼:

2.4核心組件監(jiān)控指標(biāo)

做好一款監(jiān)控系統(tǒng),其中最重要的一項(xiàng)是服務(wù)的監(jiān)控項(xiàng)和每個(gè)監(jiān)控項(xiàng)對(duì)應(yīng)的多個(gè)指標(biāo),需要明白它的具體含義,設(shè)定好其閾值,閾值的準(zhǔn)確性決定了監(jiān)控系統(tǒng)的質(zhì)量。

Zabbix通過ICMP ping、磁盤、風(fēng)扇、內(nèi)存、電源、主板溫度、CPU溫度、電壓、Raid狀態(tài)、電池、網(wǎng)卡等方面對(duì)服務(wù)器進(jìn)行硬件監(jiān)控,同時(shí)通過對(duì)組件的進(jìn)程監(jiān)控來實(shí)現(xiàn)應(yīng)用程序的存活狀態(tài)檢測(cè)。

Grafana+Prometheus主要負(fù)責(zé)業(yè)務(wù)系統(tǒng)、CK、ES、Ceph、Oss、Kafka、ZK、數(shù)據(jù)流等服務(wù)或組件的狀態(tài)監(jiān)控。

(1)ElasticSearch監(jiān)控項(xiàng)

ES監(jiān)控主要針對(duì)兩個(gè)級(jí)別,分別是集群級(jí)別和節(jié)點(diǎn)級(jí)別。集群級(jí)別的監(jiān)控主要是針對(duì)整個(gè)ES集群來說,包括集群的健康狀況、集群的狀態(tài)等。節(jié)點(diǎn)級(jí)別的監(jiān)控主要是針對(duì)每個(gè)ES實(shí)例的監(jiān)控,其中包括每個(gè)實(shí)例的查詢索引指標(biāo)和物理資源使用指標(biāo)。集群級(jí)別指標(biāo)獲取ES集群的運(yùn)行狀態(tài);節(jié)點(diǎn)級(jí)別指標(biāo)則更多的用于問題的排查,當(dāng)發(fā)現(xiàn)集群出現(xiàn)問題時(shí)更可能多的時(shí)候會(huì)直接定位到具體的ES實(shí)例,通過查看單臺(tái)實(shí)例的資源使用情況或者其他指標(biāo)進(jìn)行問題排查。

(2)ClickHouse監(jiān)控項(xiàng)

通過慢查詢、拒絕寫入、QPS、讀寫壓力、Http & Tcp 連接數(shù)、Zookeeper狀態(tài)等各項(xiàng)監(jiān)控指標(biāo)實(shí)時(shí)的反映出用戶最原始的讀寫請(qǐng)求及ClickHouse 集群的讀寫性能。

(3)Kafka監(jiān)控項(xiàng)

當(dāng)Kafka集群出現(xiàn)異常時(shí),Kafka Controller的存活狀態(tài)、副本Leader的選舉延遲時(shí)間、Follower和Leader的同步消息長(zhǎng)度、Broker端關(guān)鍵JMX指標(biāo)等監(jiān)控指標(biāo)結(jié)合歷史狀態(tài)數(shù)據(jù)能夠幫助快速定位和分析問題。

(4)Ceph監(jiān)控項(xiàng)

當(dāng)Ceph集群信息狀態(tài)異常時(shí),需要通過查看集群細(xì)節(jié)來判斷出現(xiàn)故障的集群節(jié)點(diǎn)。因此Ceph集群主要從以下幾個(gè)方面進(jìn)行監(jiān)控:集群狀態(tài)、OSD狀態(tài)、集群容量、OSD利用率、延遲數(shù)量、恢復(fù)進(jìn)度、Objects狀態(tài)。

(5)HBase監(jiān)控項(xiàng)

HBase采集的監(jiān)控?cái)?shù)據(jù)主要包括以下幾個(gè)方面:所有Regionserver、Master機(jī)器 JVM的狀態(tài),例如關(guān)于線程的信息,GC 的次數(shù)和時(shí)間,內(nèi)存使用狀況,ERROR、WARN、Fatal事件出現(xiàn)的次數(shù),以及Regionserver、Master進(jìn)程中的統(tǒng)計(jì)信息。

(6)Zookeeper監(jiān)控項(xiàng)

Zookeeper主要從系統(tǒng)監(jiān)控、Zookeeper節(jié)點(diǎn)這兩個(gè)方面進(jìn)行監(jiān)控,系統(tǒng)監(jiān)控包含內(nèi)存使用量,網(wǎng)路帶寬占用,磁盤使用量等;Zookeeper節(jié)點(diǎn)包含節(jié)點(diǎn)活躍數(shù)、延時(shí)時(shí)間、收發(fā)包數(shù)、連接數(shù)、臨時(shí)節(jié)點(diǎn)數(shù)量等方面。

最佳實(shí)踐

在面臨著巨大Zabbix的使用過程中,隨著監(jiān)控對(duì)象的增多,Zabbix Server面臨非常大的壓力,出現(xiàn)一系列性能瓶頸問題:

為解決以上三個(gè)問題,主要從zabbix配置參數(shù)和數(shù)據(jù)庫(kù)參數(shù)兩方面進(jìn)行性能調(diào)優(yōu),并給出一般建議供其他技術(shù)人員做參考。下面為Zabbix 隊(duì)列積壓圖:

3.1最佳參數(shù)優(yōu)化說明

(1)Zabbix配置參數(shù)調(diào)優(yōu)

HistoryStorageDateIndex=1

# 初始化時(shí)啟動(dòng)的pollers進(jìn)程數(shù)量。由于本次采用主動(dòng)式,因此該參數(shù)可以調(diào)制最小

StartPollers=1

# 預(yù)處理進(jìn)程

StartPreprocessors=40

StartPollersUnreachable=1

StartTrappers=15

# 啟用ICMP協(xié)議Ping主機(jī)方式啟動(dòng)線程數(shù)量

StartPingers=1

# 用于設(shè)置自動(dòng)發(fā)現(xiàn)的主機(jī)線程數(shù)量

StartDiscoverers=1

# 禁用zabbix自帶的housekeeping策略

HousekeepingFrequency=0

# zabbix初始化時(shí)占用多少系統(tǒng)共享內(nèi)存用于存儲(chǔ)配置信息

CacheSize=2G

# 將采集數(shù)據(jù)從緩存同步到數(shù)據(jù)庫(kù)的線程數(shù)量

StartDBSyncers=25

# 劃分2G內(nèi)存用于存儲(chǔ)采集的歷史數(shù)據(jù)

HistoryCacheSize=2G

# 存儲(chǔ)歷史數(shù)據(jù)索引所占用的大小

HistoryIndexCacheSize=256M

# 分配緩存趨勢(shì)數(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)數(shù)據(jù)庫(kù)參數(shù)調(diào)優(yōu)

(3)性能優(yōu)化一般建議

zabbix性能調(diào)優(yōu)前后的對(duì)比效果如下所示:

性能調(diào)優(yōu)前

性能調(diào)優(yōu)后

3.2硬件監(jiān)控實(shí)踐

通過Zabbix Agent向zabbix_agentd.conf 配置文件中的ServerActive 請(qǐng)求獲取檢查清單,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}’`

}

通過Zabbix Agent收集到的硬件監(jiān)控指標(biāo)數(shù)據(jù)如下圖所示:

雖然Zabbix能通過Zabbix Agent對(duì)每臺(tái)服務(wù)器的硬件情況進(jìn)行監(jiān)控并及時(shí)報(bào)警,但是對(duì)整個(gè)項(xiàng)目的某個(gè)區(qū)域的情況沒有很好的匯總展示和反饋,因此百分點(diǎn)大數(shù)據(jù)團(tuán)隊(duì)將Prometheus與Grafana結(jié)合,實(shí)現(xiàn)對(duì)當(dāng)前區(qū)域所有服務(wù)器所有磁盤空間、內(nèi)存使用率的降序排序來實(shí)現(xiàn)該需求。

Grafana中根目錄下磁盤使用率的metric指標(biāo)如下:

node_filesystem_size_bytes{IP_Range=”$IP_Range”,fstype=”xfs”,mountpoint=”/”}-node_filesystem_free_bytes{IP_Range=”$IP_Range”,fstype=”xfs”,mountpoint=”/”}

1-(node_filesystem_free_bytes{IP_Range=”$IP_Range”,fstype=”xfs”,mountpoint=”/”}/node_filesystem_size_bytes{IP_Range=”$IP_Range”,fstype=”xfs”,mountpoint=”/”})

實(shí)際效果如下圖所示:

為了快速定位和解決問題,除對(duì)整個(gè)項(xiàng)目所有服務(wù)器常用指標(biāo)有整體的概覽和了解外,只對(duì)每臺(tái)服務(wù)器的硬件層有詳細(xì)的監(jiān)控是不夠的,仍需對(duì)它的系統(tǒng)層運(yùn)行情況有大體且直觀的了解。如下圖所示是單臺(tái)服務(wù)器系統(tǒng)層的運(yùn)行情況展示:

3.3平臺(tái)組件集群監(jiān)控實(shí)踐

如下圖所示是所有運(yùn)行在系統(tǒng)上的程序的總體監(jiān)控列表,其中不乏業(yè)務(wù)系統(tǒng)、數(shù)據(jù)流,也不乏ClickHouse、Ceph、ElasticSearch等集群。

(1)ElasticSearch集群監(jiān)控

通過ES數(shù)據(jù)采集程序?qū)⒚總€(gè)ES集群的監(jiān)控?cái)?shù)據(jù)匯總到ES監(jiān)控集群中,Grafana接入ES監(jiān)控集群鏈接進(jìn)行展示。

采集端部分代碼如下:

效果圖如下所示:

(2)ClickHouse集群監(jiān)控

ClickHouse數(shù)據(jù)采集由兩部分組成:①Prometheus主動(dòng)拉取Ck_exporter所采集的數(shù)據(jù);②Pushgateway將自定義指標(biāo)推入Prometheus。

Pushgateway自定義指標(biāo)部分展示如下:

最終展示效果圖:

(3)Kafka集群監(jiān)控

通過Kafka集群中的JMX來解析Kafka部分監(jiān)控指標(biāo),開放Kafka的JMX端口,在./bin/kafka-server-start.sh中插入如下內(nèi)容,位置如下圖所示,同時(shí)將jar和yml文件放入相應(yīng)位置并重啟Kafka集群。

JMX監(jiān)控效果圖如下所示:

(4)Ceph集群監(jiān)控

單個(gè)Ceph Exporter可以對(duì)整個(gè)Ceph集群的數(shù)據(jù)進(jìn)行采集,而為了防止單點(diǎn)故障,故在此處做了Ceph exporter的高可用。Ceph Exporter從社區(qū)網(wǎng)站直接下載并啟動(dòng),通過Promtheus拉取Ceph Exporter中的數(shù)據(jù)并進(jìn)行分組、匯總等運(yùn)算呈現(xiàn)如下效果圖:

(5)Hbase集群監(jiān)控

由于HBase是集成在Ambari中,因此需要在Ambari Web界面開啟HMaster和HRegionServer的jmx端口進(jìn)行展示。在HBase-env.sh配置文件中插入如下內(nèi)容:

HBase效果圖如下所示:

(6)Zookeeper集群監(jiān)控

Prometheus通過接入Zookeeper的第三方工具zk_exporter來采集數(shù)據(jù),直接從社區(qū)網(wǎng)站下載啟動(dòng)即可,通過指標(biāo)篩選和聚合,最終效果圖如下所示:

結(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)步。

【來源:百分點(diǎn)大數(shù)據(jù)團(tuán)隊(duì) 】

分享到

xiesc

相關(guān)推薦