公司業務的不斷發展,緊接而來的是業務種類的增加、服務器數量的增長、網絡環境的越發復雜以及發布更加頻繁,從而不可避免地帶來了線上事故的增多,因此需要對服務器到應用的全方位監控,提前預警。
建立在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還可對接很多數據源,需要自行去探索,有能力的可以進行二次開發,打造自己的監控大屏。