大數據

SLS時序監控實戰: Grafana使用入門

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就好:

46F5B1C4-48C6-410F-9F2E-2888F9B4E149.png

細節可以參考文檔: 時序數據對接Grafana_可視化_時序存儲_日誌服務-阿里雲

Explore

Explore功能是Grafana提供的一個試驗田, 它一般是用來臨時執行一些查詢, 或者測試查詢, 我們在配置dashboard之前, 可以先在Explore中試一下, 能看到圖了, 再去配置dashboard, 可以少走一些彎路

Explore頁面提供了一個Query history的功能:
389EBEA9-39A7-4E51-ACEE-C34BA97562C8.png
可以查看和搜索查詢的歷史, 也可以編輯重新查詢, 執行收藏等操作
4A7E314F-C4DE-4388-AFF3-B189F31B859C.png
多加利用這個功能可以節省不少時間

配置圖表
當我們寫好一個查詢, 就可以用來配置dashboard了, 點擊+ -> Dsahboard來創建, 創建後grafana提供的是一個空的dashboard:
AEE96109-753A-4C57-8A58-E15C1790557C.png

這裡我們看到有Add new panelconvert to row兩個按鈕, 那麼什麼是panel和row呢? 我們先看個實際的例子:

8C5897A0-B377-417E-A831-99BF125A611A.png
這裡Resources就是一個row, 他下面的一個個圖就是panel, 這些panel都屬於他, 因此可以摺疊或展開, row是用來方便管理panel提供的

我們先點擊Add new Panel , 為了能看到圖, 我們首先要輸入一個查詢, 可以就輸入up, 看下結果:
1B5927AC-B296-43EA-8ACE-FF10B81E69D7.png
如果不做任何定製, 這個圖就配好了, 是不是很簡單? 實際上我們常常會有很多定製的需求, 比如圖表標題至少要改吧, 默認線圖也很可能不能滿足需求, 這些選項都在右邊設置:

42302A69-50C7-47EA-877C-FFA6BB5F4482.png
最常用的選項就是panel title, 是設置標題的, 如果要修改圖表類型, 那麼在Visualization中設置, 這裡面設置選項非常多, 這篇文章主要是入門, 就不一一介紹, 我們只說幾個比較常用好用的功能.

設置單位

我們統計的指標通常都是有單位的, 比如統計流量, 單位是bytes, 統計http耗時, 單位是秒, 實際情況中用這些原始的單位會很不直觀, 那麼可以在Axes中設置Unit, 比如原始單位是秒:
BE2BD9A3-7D1E-472C-B54E-10A83456A4C9.png

設置了以後grafana就會自動根據值的大小顯示us, ms, s等, 會清晰很多

設置圖例

圖例默認在圖表的下放, 有時候圖例項很多, 影響我們看監控數據, 那麼我們也可以給他關掉, 或者挪到右邊
227F09AC-5082-4E46-A3A1-F12BC28F6F1D.png
圖例在左邊的Legend中也可以設置格式, 可以使用{{label}}來引用, 例如:
3ED13C79-15E1-4C55-8084-B1879CAD86F1.png
這樣圖例會展示成:
0314877D-E695-464B-9C6B-A328FD9F2710.png
其中的instance就替換成了實際label的值
變量
為了提升圖的適應性, 我們常常希望能夠通過下拉框來控制查詢結果, 比如提供一個機器列表的選項, 選擇後只展示這臺機器的監控數據, 這在grafana中可以通過變量實現
變量在dashboard的settings中配置, 那麼變量要有取值來源, 它可以是固定值, 也可以是從Prometheus的元數據或者查詢中獲取, 例如:
7788876A-E724-4C74-B67C-D046935448DA.png

這裡定義了一個叫instance的變量, 它是從prometheus_build_info這個指標的instance label來的, 也就是說這個指標的instance這個label有多少取值, 這個變量就有哪些取值, 這是很常用的一種用法
添加變量後, dashboard上就會自動添加一個下拉框, 可以進行選擇, 但此時選擇並沒有效果, 因為我們的查詢中沒有使用這個變量, 所以query要把變量給用上, 比如:

up{instance=~"$instance"}

報警
在說真正的報警之前, 我們先來看下grafana的Thresholds設置B066EA58-BB18-4FAC-BE06-A1009D6C2ED9.png
當設置了這個選項以後, 圖上就會多出一塊紅色的區域,
8DC0F033-8EA8-4316-8F14-42BB37BA2326.png
如果一些指標不太重要, 只是想當他們有異常的時候能夠看到, 並不想收到報警通知, 那用這種方式就夠了

真正的報警選項在Alert標籤下:
27BBC4F4-8D50-43D4-92D4-2354CC7A75BF.png

注意: grafana不支持配置alert的query中帶變量

一個報警由規則(Rule), 條件(Condition), 通知(Notification) 三部分組成:

ruleAA79752A-21ED-4C9B-8B8C-96C5C7145C9A.png

Rule是指執行報警的規則, 即多久執行一次, 連續觸發多少次發送報警

condition

14778D4D-6D9D-4235-89DF-A75ADA69E1A4.png
Condition則是判斷是否觸發報警的條件, 圖上條件的含義是query A從15分鐘前到現在, 平均值大於150則報警
condition也支持多條, 通過AND OR的關係組合

notification

我們報警總是要收通知的, 我們講解一下怎麼用釘釘收通知
首先要進入配置頁面, 在EB42F497-CC22-4AE0-AA37-2900B6508C1B.png
完整的配置如下:D18786B0-7F71-45EB-B0E8-350283FAEFBE.png
其中url就是在釘釘中創建機器人提供的url
創建完可以點擊Send Test 看是否能夠正常發送

創建完再回到alert頁面選擇即可

總結

這樣我們就完成了從數據接入到可視化到報警的全流程, 藉助SLS時序存儲和grafana可以比較容易的搭建出一套易用的監控系統

大家在使用SLS中遇到的任何問題,請加釘釘群,我們有專門的日誌女僕24小時在線答疑,還有火鍋哥和燒烤哥專業支持!~ SLS微信公眾號定期會發布各類日誌、監控領域的技術分享文章並定期舉行抽獎,歡迎小夥伴們關注~
另外歡迎對大數據、分佈式、機器學習等有興趣的同學加入,轉崗、內推,來者不拒,請用簡歷狠狠的砸我,聯繫郵箱[email protected] !~

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *