徒手教你製作運維監控大屏

歡醉發表於2019-07-17

  公司業務的不斷髮展,緊接而來的是業務種類的增加、伺服器數量的增長、網路環境的越發複雜以及釋出更加頻繁,從而不可避免地帶來了線上事故的增多,因此需要對伺服器到應用的全方位監控,提前預警。

  建立在Zabbix上的伺服器監控、基礎應用監控(mysql、redis、ES等)、預警功能 基本滿足底層的監控預警要求,超過設定的閥值就會提前通知相關人員去解決。

  有了Zabbix為什麼還需要Grafana?

  Zabbix圖表聚合功能非常薄弱,這不是它的強項,而且資料來源只限定自己的收集器,圖表展示類就是Grafana的強項。

  日誌監控用ELG來檢視,Kibana在日誌量達到一個級別後展現會出現效能問題,集中展示沒有Grafana強大,因此用Grafana代替Kibana。

  微服務容器相關的監控用Prometheus生態工具,檢視容器應用的CPU、記憶體、JVM等相關指標。

  還有服務的鏈路監控APM,對分散式應用程式叢集的業務執行情況進行追蹤、告警和分析的系統,檢視微服務間的呼叫鏈路狀態。

  現有整套監控系統現狀是各自平臺監控內容分散,無法統一實時檢視,分散精力,因此需要將各平臺主要監控的內容抽出來,統一在一個平臺展示。

  在公司開發人員資源緊張的情況下,想要快速搭建起一套運維大屏可以使用Grafana。

  Grafana 是一個開源的監控資料分析和視覺化套件。最常用於對基礎設施和應用資料分析的時間序列資料進行視覺化分析,也可以用於其他需要資料視覺化分析的領域。Grafana 可以幫助你查詢、視覺化、告警、分析你所在意的指標和資料。可以與整個團隊共享,有助於培養團隊的資料驅動文化。

  Grafana 有強大的社群支援,有豐富的模板外掛,足夠滿足需要的功能特性。幾乎可以整合ElasticSearch、Mysql、Zabbix、InfluxDB、Prometheus和OpenTSDB作為資料來源。

        下面就Grafana對接各平臺實踐操作過程做詳細介紹。

展示伺服器可用記憶體指標

  伺服器可用記憶體是一個非常重要的指標,因此需要實時關注,防止出現陡坡式的下滑而被忽略。

  記憶體資訊可從Zabbix中抽取,先新增Zabbix資料來源

  在Grafana新增資料來源,選擇Zabbix,然後填寫Zabbix的API地址,使用者名稱密碼。

  url:http://192.168.0.1:8080/zabbix/php/api_jsonrpc.php

儲存後,新增一個看板,選擇Graph

 

 

進入編輯頁面

 

 

選擇Zabbix為資料來源

 

 

選擇Group和Host,對應下拉框是Grafana自動從資料來源拉取的內容。

 

Group對應Zabbix中的群組,Host對應主機,Application對應應用集,item對應是的指標。

這裡我們選擇想要監控伺服器後,選擇item對應的可用記憶體指標:Available memory。

 

切換到Axes,選擇單位

 

切換到Legend,選擇展示最小值和最大值

 

 

切換到Display調整線條和背景色的深淺。

 

 

切換到Thresholds設定警戒線,在20G以上是安全的,20G到5G是警告,5G以下就是報警紅色(請忽略下面圖中的值)。

 

 

到此可以看到已經配置完成可看到完整的可用記憶體走勢。

 

 

幾十臺伺服器需要一臺一臺配置?

如果想要看所有伺服器的可用記憶體指標難道需要一臺一臺新增?

Grafana提供複製功能,製作好一個可按照規則複製,先新增伺服器分類

 

新增

 

具體內容:

 

 

Host選項時因為有Windows伺服器,伺服器名以B開頭,所以先排除以B開頭的伺服器,這裡要說明的是正則是以javascript正規表示式為準的。

 

 

儲存返回後,就會顯示兩個下拉框,可以對圖形展示進行過濾。

 

選擇上圖的Repeat,value選擇按照伺服器名host指標(上一步配置的)進行橫向複製,一行最少24/4=6個。

將監控指標更改為下圖所示,item更改為包含memory關鍵字的,會顯示 總記憶體和可用記憶體。

 

 

儲存重新整理頁面就會將所有伺服器的記憶體展示出來。

 

 

其它屬性請自行調整。

流量監控

所有伺服器的進出流量監控大屏製作步驟參考記憶體監控內容,不過監控項item改成如下圖所示:

 

日誌監控

日誌監控包括了業務的訪問日誌accesslog和自定義info\error log日誌。

可以從訪問日誌中提取某個業務的訪問量、響應時長、客戶端ip、響應碼等等。

這裡就其中一個做介紹。

先新增資料來源,ElasticSearch,有認證的話需要填寫認證資訊。

 

 

查詢訪問量最多的前10個服務,用餅形圖展示佔比。

新增圖形元件,選擇資料來源為上步新增的內容。

 

 

指標選擇條數count,按servername(這裡記錄到ES服務的名稱,若有自定義的自行更改)維度統計,選擇Top 10。

切換Options,顯示total指標到圖形右側。

 

 

這樣就完成了對接ElasticSearch的圖表製作。

與服務訪問相關的內容其實Grafana官方有Nginx等相關的看板模板,直接下載模板後選擇資料來源就可以展現相關的指標,非常漂亮。

如何排除訪問量中非業務相關的內容?

 

 ES的Query語法,非常粗暴直接的方法用NOT排除不關心的內容或干擾內容。

帶查詢的表格方式展示日誌列表

查詢日誌時可按條件過濾,如只按關心的服務或關鍵字查詢。

新增看板,選擇Table。

 

先新增服務列表和日誌等級,關鍵字輸入框

 

詳細內容如下:

 

 第二個引數

 

Info指標是自己定義的,就不從資料裡面讀取。

第三個引數選擇輸入框型別。

 

編輯圖表,查詢內容按以下條件過濾,$代表所選變數。

 

選擇Json Data,然後新增需要展示的列。

 

  由於列名都是code,不太直觀,因此可以對映成中文名,切換標籤後填寫需要對映的列名和中文名,選擇型別,可以格式化,可以對值為空時作處理,最後可以對值落入的範圍判斷進行顏色標示。

 

 最後樣式如下:

 

展示Docker中容器內服務的記憶體監控

容器內的監控採用的是Prometheus + Cadvisor方案,這裡只講收集後的展示。

新增資料來源,指向部署好的Prometheus

 

  Prometheus的查詢使用的是PromSQL,PromQL (Prometheus Query Language) 是 Prometheus 自己開發的資料查詢 DSL 語言,語言表現力非常豐富,內建函式很多,在日常資料視覺化以及rule 告警中都會使用到它。

  在頁面 http://localhost:9099/graph 中,輸入下面的查詢語句,檢視結果,例如:

  http_requests_total{code="200"}

與Mysql的查詢對比,模糊查詢: code 為 2xx 的資料

// PromQL
http_requests_total{code~="2xx"}

// MySQL
SELECT * from http_requests_total WHERE code LIKE "%2%" AND created_at BETWEEN 1495435700 AND 1495435710;

新增一個圖表,選擇資料來源Prometheus

 

監控容器內服務記憶體用方法container_memory_rss,具體語法使用可進入Prometheus頁面去檢視每個指標,https://songjiayang.gitbooks.io/prometheus/content/promql/summary.html

其它的圖表屬性設定與前面的設定方法一致,這裡不做展開講,最後儲存展示。

 

實際上不會自己去畫每個圖表,而是去Grafana模板市場去下載別人上傳的模板或官方模板,https://grafana.com/plugins?utm_source=grafana_plugin_list

關於同環比的問題

  Gafana沒有提供一個同環比展示的圖表,這一塊也是與每個資料來源有關,資料來源不支援,Gafana也無法展示,在眾多資料來源裡面PromSQL是基於時間序列的,是可以實現同環比功能的,因此可以先用PromSQL來查詢出同環比資料再進行展示。

綜合大屏展示

  以上內容都是分模組的,現在想把伺服器、業務訪問流量、容器狀態放在一個大屏內顯示,每一塊都來各自的資料來源。

        關鍵在於一塊大屏要展示哪些關鍵資訊,擯棄掉無關緊要的內容,下面是其中一個大屏,具體制作方式與上面一樣,其中圖形大小與佈局需要根據投影到大屏上的解析度有關,需要現場除錯。

關於大屏展示的技巧

Grafana提供一個大屏展示輪播功能,幾個看板之間自動切換,具體就是Playlists。

 

給大屏一個名字,和切換間隔,然後將需要輪播的看板加入。

 

儲存後,回到列表,選擇播放模式。

 

  與普通模式區別在於,這兩種模式下會全屏,隱藏不相關的內容,如位址列、工作列和圖示,而且圖表自適應螢幕大小。兩種模式的介紹參考官網:https://grafana.com/docs/reference/playlist/

關於Grafana預警功能

  Grafana的預警功能比較薄弱,最大的問題是預警配置不支援模板變數,這就導致如記憶體低於2G時預警,圖表用的是模板內容,含有$host變數就無法預警,只適合於不含變數的圖表,沒有Zabbix的預警功能方便,因此建議預警用Zabbix來實現。

        Grafana還可對接很多資料來源,需要自行去探索,有能力的可以進行二次開發,打造自己的監控大屏。

相關文章