es实战-Monitoring原理讲解及kibana可视化实战
實(shí)戰(zhàn)結(jié)合官方文檔進(jìn)行學(xué)習(xí)效果更佳,可以參考本人另一篇簡(jiǎn)書(shū)-官方文檔-監(jiān)控集群(Monitor)翻譯。
Monitoring學(xué)習(xí)方法:在官方文檔與源碼閱讀基礎(chǔ)之上進(jìn)行實(shí)戰(zhàn)操作。
1 Monitoring原理講解
Monitoring是elastic stack的監(jiān)控模塊,可以用來(lái)監(jiān)控ELKB,監(jiān)控信息存在es索引中,并且可以通過(guò)kibana進(jìn)行可視化的展示。(收集監(jiān)控?cái)?shù)據(jù)的方式從6.5版本起由Collectors-Exporters模式逐步遷移到使用Metricbeat進(jìn)行收集。)
a 官方文檔
學(xué)習(xí)任何模塊都可以從閱讀官方文檔開(kāi)始,可以參考本人的官方文檔翻譯輔助學(xué)習(xí)。7.10版本官方文檔結(jié)構(gòu)如下:
b 源碼閱讀
舊版本的collector方式源碼位于es源碼之中,由于目前基于metricbeat方式收集數(shù)據(jù)維度仍比舊版本小,且二者原理都是調(diào)用ELKB提供的API收集,es源碼也更具備學(xué)習(xí)價(jià)值,所以這里主要討論舊版本的源碼。
Monitoring的源碼一共分為兩部分:一部分位于xpack.core包中,主要是元數(shù)據(jù)信息類(lèi)型代碼;一部分位于xpack.monitoring中包,主要是數(shù)據(jù)收集、導(dǎo)出及索引生命周期策略等實(shí)操模塊。
Monitor模塊按組件分為四類(lèi),通過(guò)MonitoredSystem枚舉區(qū)分,每條監(jiān)控記錄都是一條es文檔,文檔基類(lèi)為MonitoringDoc,規(guī)定了監(jiān)控記錄的統(tǒng)一元數(shù)據(jù)信息部分(es的監(jiān)控模塊又分為集群,節(jié)點(diǎn),索引,分片等模塊,分別繼承了MonitoringDoc類(lèi),每個(gè)單元都有自己獨(dú)立的數(shù)據(jù)結(jié)構(gòu),具體后文詳細(xì)分析),如下圖所以:
實(shí)操模塊源碼包含以下單元:
- cleaner包:CleanerService實(shí)現(xiàn)了監(jiān)控?cái)?shù)據(jù)的生命周期管理,默認(rèn)監(jiān)控?cái)?shù)據(jù)按天分索引保留七天,每天凌晨1點(diǎn)會(huì)進(jìn)行全部索引的排查,統(tǒng)一刪除過(guò)期索引。
- collector包:Collector類(lèi)為es監(jiān)控各個(gè)模塊的收集器基類(lèi),每個(gè)模塊都以一個(gè)獨(dú)立Collector繼承Collector類(lèi)。主要實(shí)現(xiàn)方式是調(diào)用es系統(tǒng)提供的監(jiān)控API獲取response構(gòu)造成對(duì)應(yīng)的MonitoringDoc子類(lèi)文檔。
- exporter:exporter為數(shù)據(jù)的導(dǎo)出包,分為兩類(lèi):導(dǎo)出到本地集群或者導(dǎo)出到專(zhuān)門(mén)的監(jiān)控集群(http方式)。實(shí)現(xiàn)方式為es的bulk請(qǐng)求。
- 監(jiān)控服務(wù)類(lèi):MonitoringService和Monitoring類(lèi)為主要服務(wù)實(shí)現(xiàn)調(diào)度類(lèi)。主要進(jìn)行參數(shù)設(shè)置,收集器導(dǎo)出器配置,并采用單線程調(diào)度方式使每個(gè)收集器在收集周期(默認(rèn)10s)內(nèi)運(yùn)行一次。
具體源碼結(jié)構(gòu)如下圖:
c 具體實(shí)現(xiàn)
接下來(lái)我們具體看一下monitor索引內(nèi)容以及kibana自帶的監(jiān)控功能。
- monitor索引
es的監(jiān)控?cái)?shù)據(jù)是以統(tǒng)一的索引模板構(gòu)造的按天分區(qū)索引存儲(chǔ)的,如下如所示:
默認(rèn)索引只保留最近七天的數(shù)據(jù),每隔10s會(huì)生成一個(gè)新的文檔。
.monitoring-es模板mapping包含一些元數(shù)據(jù)信息如集群id、時(shí)間戳和hosts信息等,當(dāng)前文檔類(lèi)型由type字段標(biāo)記。每類(lèi)的數(shù)據(jù)都有自己獨(dú)立的一些mapping,如索引信息匯總類(lèi)數(shù)據(jù)indices_stats具有主分片和總的數(shù)據(jù)量、存儲(chǔ)占用以及加載查詢數(shù)據(jù)量統(tǒng)計(jì)信息。如下圖所示:
- kibana監(jiān)控功能
kibana監(jiān)控模塊通過(guò)調(diào)用es索引存儲(chǔ)的監(jiān)控?cái)?shù)據(jù),制作了許多開(kāi)箱即用報(bào)表供用戶使用。主要分為集群層面、節(jié)點(diǎn)層面和索引層面。
kibana通過(guò)es索引中存儲(chǔ)的數(shù)據(jù)計(jì)算出了許多指標(biāo)報(bào)表,如上圖所示包含了查詢(加載)速率和查詢(加載)延時(shí),除此之外還有cpu、內(nèi)存、存儲(chǔ)以及負(fù)載占用等等許多指標(biāo)。
#2 kibana可視化實(shí)戰(zhàn)
接下來(lái)我們具體分析上圖的四個(gè)指標(biāo)并通過(guò)kibana的TSVB(時(shí)間序列的可視化報(bào)表)實(shí)現(xiàn)這四個(gè)指標(biāo)。 - 查詢速率
對(duì)于單個(gè)索引,它是每秒的查詢次數(shù)(分片級(jí)別,不是請(qǐng)求級(jí)別),也就意味著一次查詢請(qǐng)求命中的分片數(shù)越多,值越大。對(duì)于多個(gè)索引,它是每個(gè)索引的搜索速率的總和。
(例:一個(gè)2分片1副本的索引,進(jìn)行一個(gè)查詢操作, 索引中的查詢數(shù)量指標(biāo)index_stats.total.search.query_total
增加2(與副本數(shù)量無(wú)關(guān)。只與分片數(shù)量有關(guān))。Kibana監(jiān)控界面10分鐘間隔時(shí)間段內(nèi)有20個(gè)統(tǒng)計(jì)點(diǎn),每個(gè)統(tǒng)計(jì)點(diǎn)時(shí)間間隔為600s/20=30s,計(jì)算速度為:Total Shards:2/30=0.067/s)
- 加載速率
對(duì)于單個(gè)索引,它是每秒索引文檔的數(shù)量;對(duì)于多個(gè)索引,它是每個(gè)索引的索引速率之和。
(例:一個(gè)3分片1副本的索引,加載三條數(shù)據(jù)入庫(kù), index_stats.primaries.indexing.index_total會(huì)增加3條,index_stats.total.indexing.index_total會(huì)增加6條。Kibana監(jiān)控界面10分鐘間隔時(shí)間段內(nèi)有20個(gè)統(tǒng)計(jì)點(diǎn),每個(gè)統(tǒng)計(jì)點(diǎn)時(shí)間間隔為600s/20=30s,計(jì)算速度為:Primary Shards:3/30=0.1/s Total Shards:6/30=0.2/s)
- 查詢延時(shí)
查詢的平均延時(shí),為執(zhí)行查詢消耗的時(shí)間除以查詢數(shù)量,考慮主副分片。
(例:index_stats.total.search.query_time_in_millis增長(zhǎng)2,index_stats.total.search.query_total增長(zhǎng)1,則計(jì)算結(jié)果為2/1=2,且由于query_time_in_millis和query_total可能在某段時(shí)間不變,所以圖像不連續(xù))
- 加載延時(shí)
加載延時(shí),為執(zhí)行加載消耗的時(shí)間除以文檔數(shù)量,只考慮主分片。
(例:index_stats.primaries.indexing.index_time_in_millis增長(zhǎng)6,index_stats.primaries.indexing.index_total增長(zhǎng)5,則計(jì)算結(jié)果為6/5=1.2。且由于index_time_in_millis和index_total可能在某段時(shí)間不變,所以圖像不連續(xù))
通過(guò)TSVB進(jìn)行報(bào)表實(shí)現(xiàn)索引級(jí)別四個(gè)指標(biāo)報(bào)表:
我們使用通配符匹配存儲(chǔ)es監(jiān)控?cái)?shù)據(jù)的索引,并以時(shí)間戳為時(shí)間序列字段,每隔30s生成一個(gè)數(shù)據(jù)點(diǎn)。(Drop last bucket含義為去掉最后一個(gè)統(tǒng)計(jì)點(diǎn),因?yàn)閑s數(shù)據(jù)實(shí)時(shí)可見(jiàn)性具有一個(gè)延時(shí)refresh_interval,所以可能造成最后一個(gè)統(tǒng)計(jì)點(diǎn)不準(zhǔn)的問(wèn)題,所以我們可以去掉最后一個(gè)統(tǒng)計(jì)點(diǎn)保證圖像的可靠性。)
- 查詢速率的構(gòu)造是基于index_stats.total.search.query_total指標(biāo)項(xiàng),我們將其對(duì)時(shí)間進(jìn)行求導(dǎo)得出的即為查詢速率,將其結(jié)果進(jìn)行按索引名分組,即可顯示每個(gè)索引的查詢速率。
- 查詢延時(shí)的構(gòu)造是基于index_stats.total.search.query_time_in_millis和index_stats.total.search.query_total兩個(gè)指標(biāo),我們將其差值做比即可得到查詢延時(shí),將其結(jié)果進(jìn)行按索引名分組,即可顯示每個(gè)索引的查詢查詢。(除了差值Serial Difference做比,求導(dǎo)Derivative做比也同樣可以獲得結(jié)果)
加載速率和加載延時(shí)你是否可以自己做出?動(dòng)手實(shí)現(xiàn)吧
總結(jié)
以上是生活随笔為你收集整理的es实战-Monitoring原理讲解及kibana可视化实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VS2008 水晶报表部署
- 下一篇: Beautifulsoup官方文档