公司業(yè)務的不斷發(fā)展缀棍,緊接而來的是業(yè)務種類的增加、服務器數(shù)量的增長父腕、網(wǎng)絡環(huán)境的越發(fā)復雜以及發(fā)布更加頻繁青瀑,從而不可避免地帶來了線上事故的增多,因此需要對服務器到應用的全方位監(jiān)控枝嘶,提前預警哑诊。
建立在Zabbix上的服務器監(jiān)控、基礎應用監(jiān)控(mysql竞阐、redis、ES等)颗搂、預警功能 基本滿足底層的監(jiān)控預警要求幕垦,超過設定的閥值就會提前通知相關人員去解決。
有了Zabbix為什么還需要Grafana卖丸?
Zabbix圖表聚合功能非常薄弱稍浆,這不是它的強項,而且數(shù)據(jù)源只限定自己的收集器衅枫,圖表展示類就是Grafana的強項朗伶。
日志監(jiān)控用ELG來查看,Kibana在日志量達到一個級別后展現(xiàn)會出現(xiàn)性能問題益楼,集中展示沒有Grafana強大感凤,因此用Grafana代替Kibana粒督。
微服務容器相關的監(jiān)控用Prometheus生態(tài)工具,查看容器應用的CPU族跛、內(nèi)存锐墙、JVM等相關指標。
還有服務的鏈路監(jiān)控APM姐仅,對分布式應用程序集群的業(yè)務運行情況進行追蹤、告警和分析的系統(tǒng)劳翰,查看微服務間的調(diào)用鏈路狀態(tài)馒疹。
現(xiàn)有整套監(jiān)控系統(tǒng)現(xiàn)狀是各自平臺監(jiān)控內(nèi)容分散,無法統(tǒng)一實時查看生均,分散精力腥刹,因此需要將各平臺主要監(jiān)控的內(nèi)容抽出來,統(tǒng)一在一個平臺展示佩脊。
在公司開發(fā)人員資源緊張的情況下威彰,想要快速搭建起一套運維大屏可以使用Grafana穴肘。
Grafana 是一個開源的監(jiān)控數(shù)據(jù)分析和可視化套件。最常用于對基礎設施和應用數(shù)據(jù)分析的時間序列數(shù)據(jù)進行可視化分析豹缀,也可以用于其他需要數(shù)據(jù)可視化分析的領域盈咳。Grafana 可以幫助你查詢、可視化、告警组底、分析你所在意的指標和數(shù)據(jù)〗酰可以與整個團隊共享厌均,有助于培養(yǎng)團隊的數(shù)據(jù)驅動文化。
Grafana 有強大的社區(qū)支持晶密,有豐富的模板插件,足夠滿足需要的功能特性懂牧。幾乎可以集成ElasticSearch尊勿、Mysql、Zabbix躯保、InfluxDB澎语、Prometheus和OpenTSDB作為數(shù)據(jù)源。
??????? 下面就Grafana對接各平臺實踐操作過程做詳細介紹盯孙。
展示服務器可用內(nèi)存指標
服務器可用內(nèi)存是一個非常重要的指標祟滴,因此需要實時關注,防止出現(xiàn)陡坡式的下滑而被忽略骑晶。
內(nèi)存信息可從Zabbix中抽取桶蛔,先添加Zabbix數(shù)據(jù)源
在Grafana添加數(shù)據(jù)源漫谷,選擇Zabbix,然后填寫Zabbix的API地址碟婆,用戶名密碼惕稻。
url:http://192.168.0.1:8080/zabbix/php/api_jsonrpc.php
保存后,添加一個看板公给,選擇Graph
進入編輯頁面
選擇Zabbix為數(shù)據(jù)源
選擇Group和Host淌铐,對應下拉框是Grafana自動從數(shù)據(jù)源拉取的內(nèi)容。
Group對應Zabbix中的群組狰挡,Host對應主機加叁,Application對應應用集唇撬,item對應是的指標。
這里我們選擇想要監(jiān)控服務器后豫柬,選擇item對應的可用內(nèi)存指標:Available memory扑浸。
切換到Axes,選擇單位
切換到Legend,選擇展示最小值和最大值
切換到Display調(diào)整線條和背景色的深淺础嫡。
切換到Thresholds設置警戒線榴鼎,在20G以上是安全的晚唇,20G到5G是警告,5G以下就是報警紅色(請忽略下面圖中的值)平项。
到此可以看到已經(jīng)配置完成可看到完整的可用內(nèi)存走勢葵礼。
幾十臺服務器需要一臺一臺配置并鸵?
如果想要看所有服務器的可用內(nèi)存指標難道需要一臺一臺添加园担?
Grafana提供復制功能,制作好一個可按照規(guī)則復制弯汰,先添加服務器分類
添加
具體內(nèi)容:
Host選項時因為有Windows服務器咏闪,服務器名以B開頭,所以先排除以B開頭的服務器纵装,這里要說明的是正則是以javascript正則表達式為準的据某。
保存返回后,就會顯示兩個下拉框挽唉,可以對圖形展示進行過濾筷狼。
選擇上圖的Repeat,value選擇按照服務器名host指標(上一步配置的)進行橫向復制塑顺,一行最少24/4=6個楞遏。
將監(jiān)控指標更改為下圖所示,item更改為包含memory關鍵字的糙俗,會顯示 總內(nèi)存和可用內(nèi)存预鬓。
保存刷新頁面就會將所有服務器的內(nèi)存展示出來。
其它屬性請自行調(diào)整劈彪。
流量監(jiān)控
所有服務器的進出流量監(jiān)控大屏制作步驟參考內(nèi)存監(jiān)控內(nèi)容沧奴,不過監(jiān)控項item改成如下圖所示:
日志監(jiān)控
日志監(jiān)控包括了業(yè)務的訪問日志accesslog和自定義info\error log日志长窄。
可以從訪問日志中提取某個業(yè)務的訪問量纲菌、響應時長翰舌、客戶端ip、響應碼等等椅贱。
這里就其中一個做介紹只冻。
先添加數(shù)據(jù)源,ElasticSearch女器,有認證的話需要填寫認證信息住诸。
查詢訪問量最多的前10個服務,用餅形圖展示占比丧诺。
添加圖形組件奄薇,選擇數(shù)據(jù)源為上步添加的內(nèi)容。
指標選擇條數(shù)count呵晚,按servername(這里記錄到ES服務的名稱沫屡,若有自定義的自行更改)維度統(tǒng)計,選擇Top 10金矛。
切換Options勺届,顯示total指標到圖形右側。
這樣就完成了對接ElasticSearch的圖表制作饼酿。
與服務訪問相關的內(nèi)容其實Grafana官方有Nginx等相關的看板模板胚膊,直接下載模板后選擇數(shù)據(jù)源就可以展現(xiàn)相關的指標奈应,非常漂亮购披。
如何排除訪問量中非業(yè)務相關的內(nèi)容刚陡?
?ES的Query語法株汉,非常粗暴直接的方法用NOT排除不關心的內(nèi)容或干擾內(nèi)容。
帶查詢的表格方式展示日志列表
查詢?nèi)罩緯r可按條件過濾蝙云,如只按關心的服務或關鍵字查詢路召。
添加看板,選擇Table股淡。
先添加服務列表和日志等級唯灵,關鍵字輸入框
詳細內(nèi)容如下:
?第二個參數(shù)
Info指標是自己定義的埠帕,就不從數(shù)據(jù)里面讀取。
第三個參數(shù)選擇輸入框類型叁巨。
編輯圖表琐驴,查詢內(nèi)容按以下條件過濾,$代表所選變量宙刘。
選擇Json Data牢酵,然后添加需要展示的列。
由于列名都是code布近,不太直觀,因此可以映射成中文名撑瞧,切換標簽后填寫需要映射的列名和中文名,選擇類型预伺,可以格式化,可以對值為空時作處理脏嚷,最后可以對值落入的范圍判斷進行顏色標示瞒御。
?最后樣式如下:
展示Docker中容器內(nèi)服務的內(nèi)存監(jiān)控
容器內(nèi)的監(jiān)控采用的是Prometheus + Cadvisor方案肴裙,這里只講收集后的展示。
添加數(shù)據(jù)源践宴,指向部署好的Prometheus
Prometheus的查詢使用的是PromSQL,PromQL (Prometheus Query Language) 是 Prometheus 自己開發(fā)的數(shù)據(jù)查詢 DSL 語言带欢,語言表現(xiàn)力非常豐富烤惊,內(nèi)置函數(shù)很多,在日常數(shù)據(jù)可視化以及rule 告警中都會使用到它渡贾。
在頁面?http://localhost:9099/graph?中,輸入下面的查詢語句空骚,查看結果擂仍,例如:
http_requests_total{code="200"}
與Mysql的查詢對比,模糊查詢: code?為 2xx?的數(shù)據(jù)
// PromQL
http_requests_total{code~="2xx"}// MySQLSELECT*fromhttp_requests_totalWHEREcodeLIKE"%2%"ANDcreated_atBETWEEN1495435700AND1495435710;
添加一個圖表肋坚,選擇數(shù)據(jù)源Prometheus
監(jiān)控容器內(nèi)服務內(nèi)存用方法container_memory_rss,具體語法使用可進入Prometheus頁面去查看每個指標诲泌,https://songjiayang.gitbooks.io/prometheus/content/promql/summary.html
其它的圖表屬性設置與前面的設置方法一致铣鹏,這里不做展開講,最后保存展示吝沫。
實際上不會自己去畫每個圖表惨险,而是去Grafana模板市場去下載別人上傳的模板或官方模板脊髓,https://grafana.com/plugins?utm_source=grafana_plugin_list
關于同環(huán)比的問題
Gafana沒有提供一個同環(huán)比展示的圖表,這一塊也是與每個數(shù)據(jù)源有關恭朗,數(shù)據(jù)源不支持依疼,Gafana也無法展示,在眾多數(shù)據(jù)源里面PromSQL是基于時間序列的律罢,是可以實現(xiàn)同環(huán)比功能的,因此可以先用PromSQL來查詢出同環(huán)比數(shù)據(jù)再進行展示沧踏。
綜合大屏展示
以上內(nèi)容都是分模塊的巾钉,現(xiàn)在想把服務器、業(yè)務訪問流量砰苍、容器狀態(tài)放在一個大屏內(nèi)顯示,每一塊都來各自的數(shù)據(jù)源茬缩。
??????? 關鍵在于一塊大屏要展示哪些關鍵信息辟癌,擯棄掉無關緊要的內(nèi)容,下面是其中一個大屏,具體制作方式與上面一樣处面,其中圖形大小與布局需要根據(jù)投影到大屏上的分辨率有關菩掏,需要現(xiàn)場調(diào)試。
關于大屏展示的技巧
Grafana提供一個大屏展示輪播功能野揪,幾個看板之間自動切換瞧栗,具體就是Playlists。
給大屏一個名字挣惰,和切換間隔,然后將需要輪播的看板加入憎茂。
保存后锤岸,回到列表,選擇播放模式拳氢。
與普通模式區(qū)別在于晓猛,這兩種模式下會全屏,隱藏不相關的內(nèi)容栗恩,如地址欄、任務欄和圖標磕秤,而且圖表自適應屏幕大小捧韵。兩種模式的介紹參考官網(wǎng):https://grafana.com/docs/reference/playlist/
關于Grafana預警功能
Grafana的預警功能比較薄弱,最大的問題是預警配置不支持模板變量再来,這就導致如內(nèi)存低于2G時預警磷瘤,圖表用的是模板內(nèi)容采缚,含有$host變量就無法預警挠他,只適合于不含變量的圖表,沒有Zabbix的預警功能方便殖侵,因此建議預警用Zabbix來實現(xiàn)。
??????? Grafana還可對接很多數(shù)據(jù)源楞陷,需要自行去探索,有能力的可以進行二次開發(fā)猜谚,打造自己的監(jiān)控大屏赌渣。