互聯網企業中,隨着機器規模以及業務量的爆發式增長,監控數據逐漸成為一種大數據,對監控大數據的分析,包括數據采集、數據緩存、數據聚合分析、數據存儲、數據展現等幾個階段。不同階段有不同的解決方案及支撐工具,而數據展現作為最終的可視化手段,在整個監控大數據分析過程中起着舉足輕重的作用,本文分享一下筆者基於Grafana的監控數據鑽取功能應用實踐,供感興趣的同行做參考。
Grafana作為一個開源的數據分析展現平台,其豐富的圖表、靈活的插件、多樣的數據源、快速華麗的展現,總讓做監控數據分析的人愛不釋手,嘆為觀止,可以說“無Grafana,不監控展現”,關於Grafana的詳細介紹不再贅述,本文重點探討下Grafana的鑽取功能。
Grafana雖然可以迅速展現各種監控時序數據,但當數據量比較大時,也會出現性能瓶頸,因此不宜用Grafana直接展現收集到的監控原始數據,而應對監控原始數據做聚合分析,將分析后的摘要數據存儲到時序數據庫中,將監控原始(詳細)數據存儲到NoSQL數據庫中,Grafana只展現監控摘要數據,通過鑽取功能,查看對應的監控詳細數據,從而加速數據展現並對監控數據進行溯源。
在Grafana的General標簽頁下內置了兩種鑽取功能:通過鏈接跳轉到另一個面板(Type為dashboard)或者跳轉到自定義的鑽取界面(Type為absolute),為了能更精確的控制鑽取聯查結果,我們一般采用后者。其中Url即要跳轉到的頁面的鏈接,Title是這個鏈接的顯示名稱,Url params是傳遞給鏈接的靜態參數,也可以設置一些動態參數,比如時間范圍(Include time range)、變量(Include variables)等,鏈接默認是在當前窗口打開的,也可以設置在新的窗口打開(Open in new tab)。鑽取設置完畢,會在對應的Panel左上角顯示一個向上的鑽取箭頭,鼠標移動到鑽取箭頭上,會顯示前面定義的Title,點擊該Title,就跳轉到了自定義的鑽取詳情頁面。
鑽取詳情頁面,一般先通過列表的方式展現時序數據,推薦使用InfluxDB存儲監控時序數據,查詢InfluxDB中一段時間范圍的時序數據時,會涉及到分頁展現的問題,通過以下方式可以對InfluxDB進行數據庫端分頁:
1.查詢總條數
SELECT COUNT(某一個Filed列) FROM measurement WHERE 時間范圍
2.查詢指定頁指定條數
假設前台傳過來的頁數字段是page,每頁條數字段是rows,那么查詢指定頁指定條數可以這樣寫:
SELECT time,Field列 FROM measurement WHERE 時間范圍 LIMIT rows OFFSET (page - 1)*rows
通過列表展現時序數據后,可以繼續鑽取聯查存儲在HBase或ES中監控詳細數據,從而實現通過Grafana快速展現摘要數據,逐步穿透鑽取聯查詳細數據的效果。