1. 程式人生 > >Prometheus——進行伺服器效能監控的一件法寶

Prometheus——進行伺服器效能監控的一件法寶

最近一直在思考如何對線上服務做深度監控。基礎的服務可用性監控很簡單,定期Ping即可。但是怎樣才能監控伺服器的一些更加關鍵的資料呢?比如,每一個API Point的請求次數(QPS),最大響應時間,平均響應時間等。最終我希望實現的效果是有一個Dashboard,我可以清楚地看到各種引數曲線,對伺服器的執行情況瞭然於胸。

繪製Dashboard不難,目前提供資料視覺化的工具很多,隨便選一個都能滿足需要。關鍵問題是,怎樣將整個流程打通?

伺服器該以怎樣的形式暴露出資料?

資料怎樣被收集和儲存起來?

儲存起來的資料怎樣提供給資料視覺化工具?

怎樣做到足夠靈活,可以視覺化自己感興趣的任意資料?

Prometheus

像QPS和響應時間這些資料,外部工具是沒辦法直接拿到的,必須要伺服器以某種方式將資料暴露出來。最常見的做法是寫日誌。比如Nginx,每一條請求對應一個日誌,日誌中有響應時間這個欄位。通過對日誌分析,我們就可以得到QPS,最大響應時間,平均響應時間等,再通過視覺化工具即可繪製我們想要的Dashboard。

日誌這個方法固然是可行的,但是還有更好的方法。這個方法就是時序資料庫(Time Series Database)。時序資料庫簡單來說就是儲存隨時間變化的資料的資料庫。什麼是隨時間變化的資料呢?舉個簡單的例子,比如,CPU使用率,典型的隨時間變化的量,這一秒是50%,下一秒也許就是80%了。或者是溫度,今天是20度,明天可能就是18度了。

Prometheus就是一個用Go編寫的時序資料庫,官網對其的優點介紹的很清楚,這裡就不再贅述了。總之,使用簡單,功能強大。

伺服器配置房間

安裝

安裝直接去官網下載對應的安裝包即可。當然,如果你是Mac使用者的話,brew永遠不會讓你失望brew install prometheus。

格式

Prometheus獲取資料的策略是Pull而不是Push,也就是說,它會自己去抓取,而不用你來推送。抓取使用的是HTTP協議,在配置檔案中指定目標程式的埠,路徑及間隔時間即可。這也就意味著任何程式想要使用Prometheus儲存資料都很簡單,定義一個HTTP介面即可。

Prometheus的資料格式是簡單的文字格式,可以直接閱讀。其中,#號開頭的是註釋,除此之外,每一行一個數據項,資料名在前,值在後。{}中是標籤,一條資料可以有多個標籤。

配置

Prometheus使用YAML進行配置。global配置一些全域性資訊,scrape_configs配置具體想要抓取的目標。這段配置的含義是:啟動一個叫做go-test的任務,每隔五秒鐘,訪問localhost:8888/metrics獲取資料。

測試程式

我們來寫一個程式測試一下Prometheus的功能。雖然可以手動返回Prometheus需要的資料,但是使用開發好的客戶端會更加方便。

這裡我們使用Go語言,編寫一個簡單的伺服器和客戶端。客戶端會以一個穩定的速度請求伺服器的/test路徑,但是每兩分鐘會加大流量,持續30秒再回到之前的水平。伺服器95%的情況下會花費50ms進行響應,還有5%的情況下會花費100ms。

這裡我們定義了兩個指標,httpRequestCount記錄HTTP的請求數,httpRequestDuration記錄響應時間,他們都有一個endpoint標籤用於記錄請求路徑。這兩個指標分別是Counter型別和Summary型別,Prometheus定義了四種指標型別,基本涵蓋了各種用例場景,具體可以去看相關文件。簡單來說,Counter型別的資料表示一個只會向上增加的資料,比如請求數。而Summary型別的資料表示一個按區間分佈的資料,比如響應時間或者請求體大小。

  1. /** @Author: CJ Ting* @Date: 2017-03-12 17:27:23* @Last Modified by: CJ Ting* @Last Modified time: 2017-03-12 23:49:55 */packagemainimport("log""math/rand""net/http""time""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp")varhttpRequestCount=prometheus.NewCounterVec(prometheus.CounterOpts{Name:"http_request_count",Help:"http request count",},[]string{"endpoint"},)varhttpRequestDuration=prometheus.NewSummaryVec(prometheus.SummaryOpts{Name:"http_request_duration",Help:"http request duration",},[]string{"endpoint"},)funcinit(){prometheus.MustRegister(httpRequestCount)prometheus.MustRegister(httpRequestDuration)}funcmain(){http.Handle("/metrics",promhttp.Handler())http.HandleFunc("/test",handler)gofunc(){http.ListenAndServe(":8888",nil)}()startClient()doneChan:=make(chanstruct{})<-doneChan}funchandler(whttp.ResponseWriter,r*http.Request){start:=time.Now()path:=r.URL.PathhttpRequestCount.WithLabelValues(path).Inc()n:=rand.Intn(100)ifn>=95{time.Sleep(100*time.Millisecond)}else{time.Sleep(50*time.Millisecond)}elapsed:=(float64)(time.Since(start)/time.Millisecond)httpRequestDuration.WithLabelValues(path).Observe(elapsed)}funcstartClient(){sleepTime:=1000gofunc(){ticker:=time.NewTicker(2*time.Minute)for{<-ticker.CsleepTime-ticker.CsleepTime=200<-time.After(30*time.Second)sleepTime=1000}}()fori:=0;i<100;i++{gofunc(){for{sendRequest()time.Sleep((time.Duration)(sleepTime)*time.Millisecond)}}()}}funcsendRequest(){resp,err:=http.Get("http://localhost:8888/test")iferr!=nil{log.Println(err)return}resp.Body.Close()}copy code

啟動Prometheusprometheus -config.file config.yml以後,再啟動我們的測試程式go run test.go。開啟Prometheus控制檯localhost:9090/targets就可以看到Prometheus正在抓取資料,一切正常。

抓取資料,一切正常

控制檯

Prometheus的一個強大之處在於可以使用各種函式和操作符來查詢資料。在上面的測試程式中,每個資料都帶有endpoint這個標籤,表示請求的路徑。

開啟Prometheus的控制檯http://localhost:9090/graph,點選console標籤頁,輸入http_request_count{endpoint="/a"}就可以查詢路徑為/a的API Point到目前為止的總請求數。

如果想看QPS的話,可以使用自帶的函式rate,rate(http_request_count[10s])表示以10s作為時間單元來統計QPS。

Prometheus的控制檯自帶一個簡單的繪圖系統,點選graph標籤頁,輸入表示式就可以看到圖表。

例如輸入rate(http_request_count{endpoint="/test"}[10s])就可以看到我們測試程式中/test路徑的QPS,從圖中可以明顯發現,每隔一段時間就會有一個波峰流量。

每過一個時間段就會有波峰流量

httpRequestDuration是一個Summary型別的指標,比簡單的Counter要複雜,會生成三個資料項。分別是http_request_duration_sum,表示響應時間加在一起的總和。

http_request_duration_count,表示響應時間的總個數以及http_request_duration,表示響應時間的分佈情況,這個資料項會使用quantile標籤對響應時間進行分組。

如下圖所示,quantile=0.5值為50,表示50%的請求響應時間都在50ms以下。quantile=0.9的值為54,表示90%的請求響應時間都在54ms以下。但是,quantile=0.99的值為103,表示99%的請求響應時間在103ms以下。這就說明了一個問題,那就是極個別的請求耗費了大量時間。

極個別的請求消耗大量時間

通過使用表示式http_request_duration_sum / http_request_duration_count,我們可以得到平均響應時間,如下圖。

當然,這個圖的作用不大(平均數往往反映不了什麼問題),不像上圖那樣,我們無法看出有部分請求花費了大量時間。

無法看出部分請求消耗大量時間

以上只是對資料項的最簡單利用,Prometheus自帶了很多函式和操作符,可以方便地對資料進行處理,具體可以參考官方文件。

Grafana

Prometheus自帶的圖表是非常基礎的,只能用來臨時檢視一下資料。如果要構建強大的Dashboard,還是需要更加專業的工具才行。這個工具就是Grafana。

安裝

同樣是去官網下載相應的安裝包。Mac使用者可以再次感受到brew的優越性。brew install grafana。

啟動

直接用預設配置就挺好的。在Mac上,啟動指令如下。

Grafana預設監聽在3000埠上,預設使用者名稱和密碼都是admin。

設定

輸入使用者名稱和密碼以後,進入Grafana頁面。第一件事是要設定資料來源(Data Source),即Grafana從什麼地方獲取資料,選擇Prometheus即可。

選擇即可

資料來源設定好以後,接下來就是建立Dashboard了。Dashboard裡面可以放置很多“元件”。比如圖表,狀態值,表格,文字等。

這裡我們選擇Graph圖表,Grafana會建立一個預設的空圖表。

點選圖表標題,選擇Edit來編輯圖表引數。最重要的引數就是Metrics標籤裡的Query欄位,這個欄位定義了我們的圖表到底要展示什麼資料。

輸入rate(http_request_count{endpoint="/test"}[10s]),就可以看到/test路徑的QPS曲線了。

觀察曲線

同理,在Query中輸入http_request_duration就可以得到響應時間曲線。通過使用Prometheus提供的操作符和函式,我們可以對資料進行我們想要的任意視覺化,十分靈活。

在這兩個工具的配合使用下,對伺服器資訊的監控變得非常簡單。首先,伺服器定義一個HTTP介面,暴露出想要監控的資料,然後使用Prometheus收集並存儲這些資料,最後在Grafana中繪製這些資料。一個完整的監控方案就誕生了。

當然,在實際系統中,還缺少了一個環節,那就是報警。監控發現問題以後,需要馬上報警通知相關的維護人員。這是另外一個話題了,以後再介紹。

相關推薦

Prometheus——進行伺服器效能監控法寶

最近一直在思考如何對線上服務做深度監控。基礎的服務可用性監控很簡單,定期Ping即可。但是怎樣才能監控伺服器的一些更加關鍵的資料呢?比如,每一個API Point的請求次數(QPS),最大響應時間,平均響應時間等。最終我希望實現的效果是有一個Dashboard,我可以清楚地看

Jmeter使用plugins外掛進行伺服器效能監控

效能測試時,我們的關注點有兩部分 1 服務本身:併發 響應時間 QPS 2 伺服器的資源使用情況:cpu memory I/O disk等 JMeter的plugins外掛可以實現對"2"的監控,具體操作步驟如下(主要記錄我的實踐過程): 說明:我的jmeter版本是3.1 一

【nmon】伺服器效能監控工具nmon安裝和使用

目錄 一、檢視linux系統伺服器版本資訊 ​二、nmon下載 三、nmon安裝 ​四、安裝成功校檢 五、測試監控 六、監控資料採集 一、檢視linux系統伺服器版本資訊 (Linux檢視版本當前作業系統核心資訊):uname -a (Linux檢視當

CentOS 7 開啟 SNMP 實現伺服器效能監控

1、檢測是否有 SNMP 服務 service snmpd status   2、若沒有則安裝 yum install -y net-snmp   3、編輯 SNMP 的配置檔案,設定安全的驗證方式 vi /etc/snmp/snmpd.co

惠普-UX伺服器效能監控使用命令

1,iostat the iostat command reports I/O statistics for each active disk on the system iostat -t x y x表示間隔的時間,y表示間隔顯示的次數 這個命令一般用於檢視的引數是bps、sps、

LR監控Linux系統伺服器效能監控指標詳解

一、常用監控指標: 從LR-System Resource Graphs裡面右鍵add measurement,填寫linux機器的IP, 出現所有unix/linux的計數器,包括cpu的,mem的,disk,network的。 幾個常用的監控指標: aver

伺服器效能監控工具軟體Nmon和ServerAgent對比

  2018年01月08日 10:36:51 zwliu6 閱讀數:664 標籤: 伺服器效能監控對比 伺服器效能監控工具軟體Nmon和ServerAgent對比 軟體 Nmon+nmon_anal

5.11.6 jmeter元件-監聽器—伺服器效能監控PerfMon Metrics Collector

伺服器效能監控PerfMon Metrics Collector 在效能測試時,瞭解載入的伺服器的健康狀況是很重要的。使用.jp@gc - PerfMon Metrics Collector,你可以監視幾乎所有的平臺的CPU,記憶體,交換,磁碟I/O和網路I/O

C# 讀取windows效能計數器,實現伺服器效能監控

一、背景介紹 在.net平臺開發,網站部署環境都是windows+IIS,很想知道伺服器執行時,相關的各種引數。比如:CPU利用率,磁碟讀寫速度,網路頻寬佔用,網站連結數等等。能夠有圖表的方式顯示就更好了。 用過阿里雲的雲監控的童鞋,對下面這個介面肯定不會陌生:

阿里雲伺服器效能監控

我們把專案部署到伺服器後,我們關心一下伺服器的記憶體是否能撐起我們的專案,若專案部署完後記憶體都佔用90%以上,那就注意了,專案很容易被擠掉線。但我們怎麼檢視伺服器的效能呢,下面我們來說說。 開啟阿里雲控制檯 點選完成後進入例項詳情 可以清楚看到右邊會有各種

JMeter對伺服器效能監控--結果檢視和plugins外掛詳解(2)

首先申明,此篇文章借鑑出處:https://www.jianshu.com/p/ea36fef0a96b 引言 我們對被測應用進行效能測試時,除了關注吞吐量、響應時間等應用自身的表現外,對應用執行所涉及的伺服器資源的使用情況,也是非常重要的方面,通過實時監控,可以準確

伺服器效能監控javamelody配置使用

Documentation of JavaMelody Table of contents Introduction The goal of JavaMelody is to monitor Java or Java EE applicati

JMeter對伺服器效能監控--結果檢視和plugins外掛詳解

引言我們對被測應用進行效能測試時,除了關注吞吐量、響應時間等應用自身的表現外,對應用執行所涉及的伺服器資源的使用情況,也是非常重要的方面,通過實時監控,可以準確的把握不同測試場景下伺服器資源消耗情況的變化,對於應用效能分析有著重要的作用,同時也是調整測試場景設計的重要依據。對於使用JMeter執行效能測試的朋

Java Web 伺服器效能監控工具 JavaMelody

1、maven 依賴 <dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</art

java web伺服器效能監控工具JavaMelody

下載Jar包javamelody-1.47.0.jar和jrobin-1.5.9.jar http://code.google.com/p/javamelody/downloads/list http://code.google.com/p/javamelody/downl

伺服器效能監控之WMI

1.WMI簡介 WMI是英文Windows Management Instrumentation的簡寫,通過使用WMI,我們可以獲取本地或遠端伺服器的效能引數和程序執行情況,以及大部分硬體資訊,但前提是執行的使用者要有足夠的許可權,如administrator組使用者等。這也是做負載均衡所需要且比較方便快

伺服器效能監控之New Relic 入門教程

New Relic 是一個很強大的伺服器效能監控工具,New Relic目前專注於SaaS和App效能管理業務,它支援支援agen

K8S Canal基於Prometheus進行實時指標監控

[文章來源於本人的印象筆記,如出現格式問題可訪問該連結檢視原文](https://app.yinxiang.com/fx/c1c8b0bd-1d81-4b3b-ac75-e05bd0955e6f) ## 部署canal的prometheus監控到k8s中 1、grafana的docker部署方式;https

伺服器效能監控神器nmon使用介紹

## 介紹 Nmon (Nigel’s Monitor)是由IBM 提供、免費監控 AIX 系統與 Linux 系統資源的工具。該工具可將伺服器系統資源耗用情況收集起來並輸出一個特定的檔案,並可利用 excel 分析工具(nmon analyser)進行資料的統計分析。 ## 下載 搜尋下載nmon,上傳到

效能測試時使用nmon進行監控伺服器效能

在使用Jmeter進行效能測試,可以使用nmon進行伺服器的監控。   一、nmon說明 nmon分為工具包和分析包(nmonanalyser) nmon安裝很簡單,根據伺服器版本,下載相應的版本後,進行安裝即可。   二、nmon監聽 1、實時監聽 在nmon安裝目錄下,使用./nmon啟動nm