公司業務的不斷髮展,緊接而來的是業務種類的增長、服務器數量的增加、網絡環境的愈加複雜以及發佈更加頻繁,從而不可避免地帶來了線上事故的增多,所以須要對服務器到應用的全方位監控,提早預警。javascript
創建在Zabbix上的服務器監控、基礎應用監控(mysql、redis、ES等)、預警功能 基本知足底層的監控預警要求,超過設定的閥值就會提早通知相關人員去解決。php
有了Zabbix爲何還須要Grafana?html
Zabbix圖表聚合功能很是薄弱,這不是它的強項,並且數據源只限定本身的收集器,圖表展現類就是Grafana的強項。java
日誌監控用ELG來查看,Kibana在日誌量達到一個級別後展示會出現性能問題,集中展現沒有Grafana強大,所以用Grafana代替Kibana。mysql
微服務容器相關的監控用Prometheus生態工具,查看容器應用的CPU、內存、JVM等相關指標。git
還有服務的鏈路監控APM,對分佈式應用程序集羣的業務運行狀況進行追蹤、告警和分析的系統,查看微服務間的調用鏈路狀態。正則表達式
現有整套監控系統現狀是各自平臺監控內容分散,沒法統一實時查看,分散精力,所以須要將各平臺主要監控的內容抽出來,統一在一個平臺展現。redis
在公司開發人員資源緊張的狀況下,想要快速搭建起一套運維大屏可使用Grafana。sql
Grafana 是一個開源的監控數據分析和可視化套件。最經常使用於對基礎設施和應用數據分析的時間序列數據進行可視化分析,也能夠用於其餘須要數據可視化分析的領域。Grafana 能夠幫助你查詢、可視化、告警、分析你所在乎的指標和數據。能夠與整個團隊共享,有助於培養團隊的數據驅動文化。json
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,不太直觀,所以能夠映射成中文名,切換標籤後填寫須要映射的列名和中文名,選擇類型,能夠格式化,能夠對值爲空時做處理,最後能夠對值落入的範圍判斷進行顏色標示。
最後樣式以下:
容器內的監控採用的是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的預警功能比較薄弱,最大的問題是預警配置不支持模板變量,這就致使如內存低於2G時預警,圖表用的是模板內容,含有$host變量就沒法預警,只適合於不含變量的圖表,沒有Zabbix的預警功能方便,所以建議預警用Zabbix來實現。
Grafana還可對接不少數據源,須要自行去探索,有能力的能夠進行二次開發,打造本身的監控大屏。