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