Grafana是一個非常受歡迎的開源可視化工具, 經常和Prometheus InfluxDB, OpenTSDB等一起配合使用, 它有非常豐富的圖表類型, 以及異常靈活的設置選項, 本文是一篇入門教程, 期望通過這篇教程能幫助大家入門Grafana, 並可以和SLS的時序存儲結合使用
安裝
本文基於Grafana 7.0+, 7.0做了很多優化, 也提供了很多新功能, 推薦大家用7.0以上的版本
Grafana官網有詳細的教程描述了在各個系統上的安裝過程: Installation | Grafana Labs
這裡推薦大家有條件裝docker的話, 就用docker的安裝方式, 如果機器系統比較舊, 不支持docker, 那麼也可以用下載包的方式安裝
如果大家暫時沒有環境安裝, 想先體驗一下grafana, grafana官方也貼心的提供了一個服務: play.grafana.org
可以直接上去看grafana提供了什麼功能, 大體是怎麼配置圖表的
準備工作
在開始體驗grafana之前, 我們首先要有數據, 因此我們要先在SLS上創建時序存儲, 並接入一些數據, 可以參考我們的官方文檔:
管理MetricStore_時序存儲_日誌服務-阿里雲
採集主機監控數據_數據接入_時序存儲_日誌服務-阿里雲
有數據以後就需要在grafana中配置相應的數據源, 因為SLS的時序存儲是兼容Prometheus的查詢的, 因此選擇的DataSource類型直接用Prometheus就好:
細節可以參考文檔: 時序數據對接Grafana_可視化_時序存儲_日誌服務-阿里雲
Explore
Explore功能是Grafana提供的一個試驗田, 它一般是用來臨時執行一些查詢, 或者測試查詢, 我們在配置dashboard之前, 可以先在Explore中試一下, 能看到圖了, 再去配置dashboard, 可以少走一些彎路
Explore頁面提供了一個Query history的功能:
可以查看和搜索查詢的歷史, 也可以編輯重新查詢, 執行收藏等操作
多加利用這個功能可以節省不少時間
配置圖表
當我們寫好一個查詢, 就可以用來配置dashboard了, 點擊+ -> Dsahboard來創建, 創建後grafana提供的是一個空的dashboard:
這裡我們看到有Add new panel
和convert to row
兩個按鈕, 那麼什麼是panel和row呢? 我們先看個實際的例子:
這裡Resources就是一個row, 他下面的一個個圖就是panel, 這些panel都屬於他, 因此可以摺疊或展開, row是用來方便管理panel提供的
我們先點擊Add new Panel
, 為了能看到圖, 我們首先要輸入一個查詢, 可以就輸入up, 看下結果:
如果不做任何定製, 這個圖就配好了, 是不是很簡單? 實際上我們常常會有很多定製的需求, 比如圖表標題至少要改吧, 默認線圖也很可能不能滿足需求, 這些選項都在右邊設置:
最常用的選項就是panel title
, 是設置標題的, 如果要修改圖表類型, 那麼在Visualization中設置, 這裡面設置選項非常多, 這篇文章主要是入門, 就不一一介紹, 我們只說幾個比較常用好用的功能.
設置單位
我們統計的指標通常都是有單位的, 比如統計流量, 單位是bytes, 統計http耗時, 單位是秒, 實際情況中用這些原始的單位會很不直觀, 那麼可以在Axes中設置Unit, 比如原始單位是秒:
設置了以後grafana就會自動根據值的大小顯示us, ms, s等, 會清晰很多
設置圖例
圖例默認在圖表的下放, 有時候圖例項很多, 影響我們看監控數據, 那麼我們也可以給他關掉, 或者挪到右邊
圖例在左邊的Legend中也可以設置格式, 可以使用{{label}}
來引用, 例如:
這樣圖例會展示成:
其中的instance就替換成了實際label的值
變量
為了提升圖的適應性, 我們常常希望能夠通過下拉框來控制查詢結果, 比如提供一個機器列表的選項, 選擇後只展示這臺機器的監控數據, 這在grafana中可以通過變量實現
變量在dashboard的settings中配置, 那麼變量要有取值來源, 它可以是固定值, 也可以是從Prometheus的元數據或者查詢中獲取, 例如:
這裡定義了一個叫instance的變量, 它是從prometheus_build_info這個指標的instance label來的, 也就是說這個指標的instance這個label有多少取值, 這個變量就有哪些取值, 這是很常用的一種用法
添加變量後, dashboard上就會自動添加一個下拉框, 可以進行選擇, 但此時選擇並沒有效果, 因為我們的查詢中沒有使用這個變量, 所以query要把變量給用上, 比如:
up{instance=~"$instance"}
報警
在說真正的報警之前, 我們先來看下grafana的Thresholds
設置
當設置了這個選項以後, 圖上就會多出一塊紅色的區域,
如果一些指標不太重要, 只是想當他們有異常的時候能夠看到, 並不想收到報警通知, 那用這種方式就夠了
真正的報警選項在Alert標籤下:
注意: grafana不支持配置alert的query中帶變量
一個報警由規則(Rule), 條件(Condition), 通知(Notification) 三部分組成:
rule
Rule是指執行報警的規則, 即多久執行一次, 連續觸發多少次發送報警
condition
Condition則是判斷是否觸發報警的條件, 圖上條件的含義是query A從15分鐘前到現在, 平均值大於150則報警
condition也支持多條, 通過AND OR的關係組合
notification
我們報警總是要收通知的, 我們講解一下怎麼用釘釘收通知
首先要進入配置頁面, 在
完整的配置如下:
其中url就是在釘釘中創建機器人提供的url
創建完可以點擊Send Test 看是否能夠正常發送
創建完再回到alert頁面選擇即可
總結
這樣我們就完成了從數據接入到可視化到報警的全流程, 藉助SLS時序存儲和grafana可以比較容易的搭建出一套易用的監控系統
大家在使用SLS中遇到的任何問題,請加釘釘群,我們有專門的日誌女僕24小時在線答疑,還有火鍋哥和燒烤哥專業支持!~ SLS微信公眾號定期會發布各類日誌、監控領域的技術分享文章並定期舉行抽獎,歡迎小夥伴們關注~
另外歡迎對大數據、分佈式、機器學習等有興趣的同學加入,轉崗、內推,來者不拒,請用簡歷狠狠的砸我,聯繫郵箱[email protected] !~