精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Prometheus、InfluxDB與Grafana打造監控平臺怎么樣

馬哥Linux運維 ? 來源:博客園 ? 作者:絲瓜呆呆 ? 2021-11-01 10:05 ? 次閱讀

在本文中,我將把幾個常用的監控部分給梳理一下。前面我們提到過,在性能監控圖譜中,有操作系統、應用服務器、中間件、隊列、緩存、數據庫、網絡、前端、負載均衡、Web 服務器、存儲、代碼等很多需要監控的點。顯然這些監控點不能在一個專欄中全部覆蓋并一一細化,我只能找最常用的幾個,做些邏輯思路的說明,同時也把具體的實現描述出來。如果你遇到了其他的組件,也需要一一實現這些監控。

在本篇中,主要想說明白下圖的這個監控邏輯。

這應該是現在最流行的一套監控邏輯了吧。我今天把常見的使用 Grafana、Prometheus、InfluxDB、Exporters 的數據展示方式說一下,如果你剛進入性能測試領域,也能有一個感性的認識。

有測試工具,有監控工具,才能做后續的性能分析和瓶頸定位,所以有必要把這些工具的邏輯跟你擺一擺。

所有做性能的人都應該知道一點,不管數據以什么樣的形式展示,最要緊的還是看數據的來源和含義,以便做出正確的判斷。

我先說明一下 JMeter 和 node_exporter 到 Grafana 的數據展示邏輯。至于其他的 Exporter,我就不再解釋這個邏輯了,只說監控分析的部分。

JMeter + InfluxDB + Grafana 的數據展示邏輯

一般情況下,我們用 JMeter 做壓力測試時,都是使用 JMeter 的控制臺來查看結果。如下圖所示:

或者裝個插件來看結果:

或者用 JMeter 來生成 HTML:

這樣看都沒有問題,我們在前面也強調過,對于壓力工具來說,我們最多只關心三條曲線的數據:TPS(T 由測試目標定義)、響應時間、錯誤率。這里的錯誤率還只是輔助排查問題的曲線,沒有問題時,只看 TPS 和響應時間即可。不過采取以上三種方式有幾個方面的問題。

整理結果時比較浪費時間。

在 GUI 用插件看曲線,做高并發時并不現實。

在場景運行時間比較長的時候,采用生成 HTML 的方式,會出現消耗內存過大的情況,而實際上,在生成的結果圖中,有很多生成的圖我們并不是那么關注。

生成的結果保存之后再查看比較麻煩,還要一個個去找。

那么如何解決這幾個問題呢?

用 JMeter 的 Backend Listener 幫我們實時發送數據到 InfluxDB 或 Graphite 可以解決這樣的問題。

Graphite Backend Listener 的支持是在 JMeter 2.13 版本,InfluxdDB Backend Listener 的支持是在 JMeter 3.3 的版本,它們都是用異步的方式把數據發送出來,以便查看。

其實有這個 JMeter 發送給 InfluxDB 的數據之后,我們不需要看上面的那些 HTML 數據,也可以直觀地看到系統性能的性能趨勢。

并且這樣保存下來的數據,在測試結束后想再次查看也比較方便比對。

JMeter + InfluxDB + Grafana 的結構如下:

在這個結構中,JMeter 發送壓力到服務器的同時,統計下 TPS、響應時間、線程數、錯誤率等信息。默認每 30 秒在控制臺輸出一次結果(在 jmeter.properties 中有一個參數 #summariser.interval=30 可以控制)。

配置了 Backend Listener 之后,將統計出的結果異步發送到 InfluxDB 中。最后在 Grafana 中配置 InfluxDB 數據源和 JMeter 顯示模板。

然后就可以實時查看 JMeter 的測試結果了,這里看到的數據和控制臺的數據是一樣。

但如果這么簡單就說完了,這篇文章也就沒價值了。下面我們來說一下,數據的傳輸和展示邏輯。

JMeter 中 Backend Listener 的配置

下面我們就 InfluxDB 的 Backend Listener 做個說明。它的配置比較簡單,在腳本中加上即可。

我們先配置好 InfluxDB URL、Application 等信息,Application 這個配置可以看成是場景名。

那么 JMeter 如何將數據發給 InfluxDB 呢?請看源碼中的關鍵代碼,如下所示:


	

privatevoidaddMetrics(Stringtransaction,SamplerMetricmetric){ //FORALLSTATUS addMetric(transaction,metric.getTotal(),metric.getSentBytes(),metric.getReceivedBytes(),TAG_ALL,metric.getAllMean(),metric.getAllMinTime(), metric.getAllMaxTime(),allPercentiles.values(),metric::getAllPercentile); //FOROKSTATUS addMetric(transaction,metric.getSuccesses(),null,null,TAG_OK,metric.getOkMean(),metric.getOkMinTime(), metric.getOkMaxTime(),okPercentiles.values(),metric::getOkPercentile); //FORKOSTATUS addMetric(transaction,metric.getFailures(),null,null,TAG_KO,metric.getKoMean(),metric.getKoMinTime(), metric.getKoMaxTime(),koPercentiles.values(),metric::getKoPercentile); metric.getErrors().forEach((error,count)->addErrorMetric(transaction,error.getResponseCode(), error.getResponseMessage(),count)); }

從這段代碼可以看出,站在全局統計的視角來看,這里把 JMeter 運行的統計結果,比如事務的 Total 請求、發送接收字節、平均值、最大值、最小值等,都加到 metric 中,同時也會把成功和失敗的事務信息添加到 metric 中去。 在源碼中,還有更多的添加 metric 的步驟,你有興趣的話,也可以看一下 JMeter 源碼中的InfluxdbBackendListenerClient.java。 保存了 metric 之后,再使用 InfluxdbMetricsSender 發送到 InfluxDB 中去。發送關鍵代碼如下:

	

@OverridepublicvoidwriteAndSendMetrics(){ ........if(!copyMetrics.isEmpty()){try{if(httpRequest==null){ httpRequest=createRequest(url); } StringBuildersb=newStringBuilder(copyMetrics.size()*35);for(MetricTuplemetric:copyMetrics){//AddTimeStampinnanosecondfromepoch(defaultinInfluxDB) sb.append(metric.measurement) .append(metric.tag) .append("")//$NON-NLS-1$ .append(metric.field) .append("") .append(metric.timestamp+"000000") .append(" ");//$NON-NLS-1$ } StringEntityentity=newStringEntity(sb.toString(),StandardCharsets.UTF_8); httpRequest.setEntity(entity); lastRequest=httpClient.execute(httpRequest,newFutureCallback(){ @Overridepublicvoidcompleted(finalHttpResponseresponse){intcode=response.getStatusLine().getStatusCode();/**HTTPresponsesummary2xx:Ifyourwriterequestreceived *HTTP204NoContent,itwasasuccess!4xx:InfluxDB *couldnotunderstandtherequest.5xx:Thesystemis *overloadedorsignificantlyimpaired.*/ if(MetricUtils.isSuccessCode(code)){if(log.isDebugEnabled()){ log.debug("Success,numberofmetricswritten:{}",copyMetrics.size()); } }else{ log.error("ErrorwritingmetricstoinfluxDBUrl:{},responseCode:{},responseBody:{}",url,code,getBody(response)); } } @Overridepublicvoidfailed(finalExceptionex){ log.error("failedtosenddatatoinfluxDBserver:{}",ex.getMessage()); } @Overridepublicvoidcancelled(){ log.warn("RequesttoinfluxDBserverwascancelled"); } }); ........ } } }

通過 writeAndSendMetrics,就將所有保存的 metrics 都發給了 InfluxDB。

InfluxDB 中的存儲結構

然后我們再來看下 InfluxDB 中如何存儲:

	
		>showdatabases name:databases name ---- _internal jmeter >usejmeter Usingdatabasejmeter > >showMEASUREMENTS name:measurements name ---- events jmeter >select*fromeventswhereapplication='7ddemo' name:events timeapplicationtexttitle ------------------------ 15752554628060000007ddemoTestCycle1startedApacheJMeter 15752564638200000007ddemoTestCycle1endedApacheJMeter .............. n>select*fromjmeterwhereapplication='7ddemo'limit10 name:jmeter timeapplicationavgcountcountErrorendedThitmaxmaxATmeanATminminATpct90.0pct95.0pct99.0rbresponseCoderesponseMessagesbstartedTstatuttransaction --------------------------------------------------------------------------------------------------------------------------------------------- 15752554628210000007ddemo00000internal 15752554678180000007ddemo232.8235294117647217017849122384.999999999999684984900allall 15752554678240000007ddemo232.8235294117647217849122384.999999999999684984900all0_openIndexPage 15752554678260000007ddemo232.8235294117647217849122384.9999999999996849849ok0_openIndexPage 15752554678290000007ddemo01111internal 15752554728110000007ddemo205.441860465116326026849122252.6271.484900allall 15752554728120000007ddemo01111internal 15752554728120000007ddemo205.441860465116326849122252.6271.4849ok0_openIndexPage 15752554728120000007ddemo205.441860465116326849122252.6271.484900all0_openIndexPage 15752554778110000007ddemo198.214285714285727027849117263.79999999999995292.350000000000184900allall
				這段代碼也就是說,在 InfluxDB 中,創建了兩個 MEASUREMENTS,分別是 events 和 jmeter。這兩個各自存了數據,我們在界面中配置的 testtile 和 eventTags 放在了 events 這個 MEASUREMENTS 中。在模板中這兩個值暫時都是不用的。
				
				在 JMeter 這個 MEASUREMENTS 中,我們可以看到 application 和事務的統計信息,這些值和控制臺一致。在 Grafana 中顯示的時候,就是從這個表中取出的數據,根據時序做的曲線。

Grafana 中的配置

有了 JMeter 發送到 InfluxDB 中的數據,下面就來配置一下 Grafana 中的展示。首先,要配置一個 InfluxDB 數據源。如下所示

173a7d26-3a2e-11ec-82a9-dac502259ad0.png

在這里配置好 URL、Database、User、Password 之后,直接點擊保存即可。 然后添加一個 JMeter Dashboard,我們常用的 Dashboard 是 Grafana 官方 ID 為 5496 的模板。導入進來后,選擇好對應的數據源。
然后就看到界面了。
這時還沒有數據,我們稍后做個示例,看下 JMeter 中的數據怎么和這個界面的數據對應起來。我們先看下圖中兩個重要的數據查詢語句吧。TPS 曲線

	

SELECTlast("count")/$send_intervalFROM"$measurement_name"WHERE("transaction"=~/^$transaction$/AND"statut"='ok')AND$timeFilterGROUPBYtime($__interval)

上面這個就是 Total TPS 了,在這里稱為 throughput。 關于這個概念,我在第一篇中就已經有了說明,這里再次提醒,概念的使用在團隊中要有統一的認識,不要受行業內一些傳統信息的誤導。 這里取的數據來自 MEASUREMENTS 中成功狀態的所有事務。 響應時間曲線:

	
		SELECTmean("pct95.0")FROM"$measurement_name"WHERE("application"=~/^$application$/)AND$timeFilterGROUPBY"transaction",time($__interval)fill(null)

這里是用 95 pct 內的響應時間畫出來的曲線。

整體展示出來的效果如下:

數據比對

首先,我們在 JMeter 中配置一個簡單的場景。10 個線程,每個線程迭代 10 次,以及兩個 HTTP 請求。

也就是說,這時會產生 10x10x2=200 次請求。我們用 JMeter 跑起來看一下。

看到了吧,這個請求數和我們預想的一樣。下面我們看一下 Grafana 中展示出來的結果。

還有針對每個事務的統計情況。

至此,JMeter 到 Grafana 的展示過程就完成了。以后我們就不用再保存 JMeter 的執行結果了,也不用等著 JMeter 輸出 HTML 了。

node_exporter + Prometheus + Grafana 的數據展示邏輯

對性能測試來說,在常用的 Grafana + Prometheus + Exporter 的邏輯中,第一步要看的就是操作系統資源了。所以在這一篇中,我們將以 node_exporter 為例來說明一下操作系統抽取數據的邏輯,以便知道監控數據的來源,至于數據的含義,我們將在后續的文章中繼續描述。

首先,我們還是要畫一個圖。

現在 node_exporter 可以支持很多個操作系統了。官方列表如下:

當然不是說只支持這些,你也可以擴展自己的 Exporter。

配置 node_exporter

node_exporter 目錄如下:


	

[root@7dgroup2node_exporter-0.18.1.linux-amd64]#ll total16524 -rw-r--r--13434343411357Jun500:50LICENSE -rwxr-xr-x13434343416878582Jun500:41node_exporter -rw-r--r--134343434463Jun500:50NOTICE}

啟動:

	

[root@7dgroup2node_exporter-0.18.1.linux-amd64]#./node_exporter--web.listen-address=:9200&

是不是很簡潔?如果想看更多的功能 ,可以查看下它的幫助。 配置 Prometheus下載 Prometheus:

	

[root@7dgroup2data]#wget-chttps://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz .......... 100%[=============================================================================================>]58,625,125465KB/sin6m4s 2019-11-291516(157KB/s)-‘prometheus-2.14.0.linux-amd64.tar.gz’saved[58625125/58625125] [root@7dgroup2data]

解壓之后,我們可以看到目錄結構如下:

	

[root@7dgroup2prometheus-2.11.1.linux-amd64]#ll total120288 drwxr-xr-x.2343434344096Jul1023:26console_libraries drwxr-xr-x.2343434344096Jul1023:26consoles drwxr-xr-x.3rootroot4096Nov3012:55data -rw-r--r--.13434343411357Jul1023:26LICENSE -rw-r--r--.1rootroot35Aug723:19node.yml -rw-r--r--.1343434342770Jul1023:26NOTICE -rwxr-xr-x.13434343476328852Jul1021:53prometheus -rw-r--r--1343434341864Sep2109:36prometheus.yml -rwxr-xr-x.13434343446672881Jul1021:54promtool [root@7dgroup2prometheus-2.11.1.linux-amd64]#

在prometheus.yml中添加如下配置,以取數據:

	

-job_name:'s1' static_configs: -targets:['172.17.211.143:9200']

啟動:

	

[root@7dgroup2data]#./prometheus--config.file=prometheus.yml&

這樣就行了嗎?當然不是。根據上面的流程圖,我們還需要配置 Grafana。 配置 Grafana 首先配置一個數據源,非常簡單。如下所示:

18a9dcd8-3a2e-11ec-82a9-dac502259ad0.png

再配置一個 node_exporter 的模板,比如我這里選擇了官方模板(ID:11074),展示如下:

18e4c366-3a2e-11ec-82a9-dac502259ad0.png

數據邏輯說明 說明完上面的過程之后,對我們做性能測試和分析的人來說,最重要的,就是要知道數據的來源和含義了。 拿上面圖中的 CPU 使用率來說吧(因為 CPU 使用率是非常重要的一個計數器,所以我們今天先拿它來開刀)。 我們先點一下 title 上的 edit,看一下它的 query 語句。

	

avg(irate(node_cpu_seconds_total{instance=~"$node",mode="system"}[30m]))by(instance)avg(irate(node_cpu_seconds_total{instance=~"$node",mode="user"}[30m]))by(instance)avg(irate(node_cpu_seconds_total{instance=~"$node",mode="iowait"}[30m]))by(instance)1-avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m]))by(instance)

這些都是從 Prometheus 中取出來的數據,查詢語句讀了 Prometheus 中node_cpu_seconds_total的不同的模塊數據。 下面我們來看一下,node_exporter暴露出來的計數器。

194968fc-3a2e-11ec-82a9-dac502259ad0.png

這些值和 top 一樣,都來自于/proc/目錄。下面這張圖是 top 數據,我們可以比對一下。

19bf9554-3a2e-11ec-82a9-dac502259ad0.png

到此,我們就了解到了操作系統中監控數據的取值邏輯了,也就是從操作系統本身的計數器中取出值來,然后傳給 Prometheus,再由 Grafana 中的 query 語句查出相應的數據,最后由 Grafana 展示在界面上。

總結

為什么要解釋數據的邏輯呢?因為最近在工作中遇到一些情況,有人覺得有了 Prometheus + Grafana + Exportor 這樣的組合工具之后,基本上都不再用手工執行什么命令了。但我們要了解的是,對于監控平臺來說,它取的所有的數據必然是被監控者可以提供的數據,像 node_exporter 這樣小巧的監控收集器,它可以獲取的監控數據,并不是整個系統全部的性能數據,只是取到了常見的計數器而已。這些計數器不管是用命令查看,還是用這樣炫酷的工具查看,它的值本身都不會變。所以不管是在監控平臺上看到的數據,還是在命令行中看到的數據,我們最重要的是要知道含義以及這些值的變化對性能測試和分析的下一步驟的影響。

原文鏈接:https://www.cnblogs.com/siguadd/p/14878035.html
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    6909

    瀏覽量

    88849
  • 網絡
    +關注

    關注

    14

    文章

    7523

    瀏覽量

    88650
  • GUI
    GUI
    +關注

    關注

    3

    文章

    650

    瀏覽量

    39553
  • Web 服務器
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1453

原文標題:基于 Prometheus、InfluxDB 與 Grafana 打造監控平臺

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EasyRoCE統一監控面板:一站式運維體驗

    基于星融元開放的軟硬件架構,無縫集成Prometheus、Grafana等主流開源工具,為客戶提供簡潔易用的毫秒級可視化監控平臺,同時支持內置多個可視化小工具,如光模塊地圖、鏈路流量分
    的頭像 發表于 11-26 15:53 ?39次閱讀
    EasyRoCE統一<b class='flag-5'>監控</b>面板:一站式運維體驗

    devops使用最廣泛的集成工具盤點

    (自動化工具)、Terraform(IaC工具)、PrometheusGrafana監控與可視化工具)、CircleCI與TravisCI(CI/CD平臺)以及ELKStack(日
    的頭像 發表于 11-26 13:48 ?78次閱讀

    安科瑞電力智能監控平臺的應用

    0.引言 隨著社會和科學技術的發展,配電系統的智能化已經成為一種發展趨勢。醫院建設電力智能監控平臺,可對供電系統進行集中管理和調度、實時控制和數據采集,監控供電系統設備的運行情況,及時掌握和處理
    的頭像 發表于 11-01 09:30 ?95次閱讀
    安科瑞電力智能<b class='flag-5'>監控</b><b class='flag-5'>平臺</b>的應用

    監控平臺設計思路

    電子發燒友網站提供《監控平臺設計思路.pptx》資料免費下載
    發表于 10-09 11:18 ?0次下載

    工業互聯網遠程監控平臺是什么

    工業互聯網遠程監控平臺:賦能智能制造的利器 在當今快速發展的工業領域,工業互聯網遠程監控平臺正逐漸成為推動工業升級和數字化轉型的重要力量。工業互聯網
    的頭像 發表于 08-29 14:11 ?188次閱讀

    動環監控系統平臺功能

    全面監控,因此,一套可對機房環境進行7×24小時實時監控的物聯網系統,非常必要。 動環監控系統是一套基于動環監控平臺的的物聯網綜合管控解決方
    的頭像 發表于 07-19 16:35 ?326次閱讀

    設備監控物聯網SaaS平臺是什么?設備監控物聯網SaaS平臺的功能

    設備監控物聯網SaaS平臺是一種基于云計算技術,專為設備監控和管理設計的軟件即服務(Software as a Service)解決方案。這種平臺允許企業無需自行搭建和維護復雜的IT基
    的頭像 發表于 05-15 16:17 ?458次閱讀

    LabVIEW操作InfluxDB數據庫應用特點和原理概念

    InfluxDB的行協議是一種寫入數據點到InfluxDB的文本格式。必須要是這樣的格式的數據點才能被Influxdb解析和寫入成功,當然除非你使用一些其他服務插件。
    的頭像 發表于 04-12 12:21 ?1246次閱讀
    LabVIEW操作<b class='flag-5'>InfluxDB</b>數據庫應用特點和原理概念

    電纜隧道綜合監控管理平臺的規劃設置和特性

    電纜隧道作為城市電力供應、信息傳輸和能源輸送的重要通道,其安全和穩定性對城市的正常運行至關重要。因此,一個高效、智能的電纜隧道綜合監控管理平臺的規劃設置就顯得尤為關鍵。本文深圳鼎信智慧科技將詳細探討
    的頭像 發表于 04-09 18:01 ?488次閱讀

    基于物聯網平臺與邊緣計算網關,打造高效能工廠設備監控系統方案

    ,利用邊緣計算網關與物聯網平臺構建工廠車間在線檢測設備監控系統,實現實時監控成為迫切需求。 二、方案介紹 萬物 物聯網設備監控方案旨在利用EG8000mini邊緣計算網關與Things
    的頭像 發表于 03-08 15:21 ?428次閱讀
    基于物聯網<b class='flag-5'>平臺</b>與邊緣計算網關,<b class='flag-5'>打造</b>高效能工廠設備<b class='flag-5'>監控</b>系統方案

    如何快速打造屬于自己的工業物聯網云平臺

    如何快速打造屬于自己的工業物聯網云平臺 工業物聯網云平臺是工業4.0的核心,是實現智能制造、智能物流、智能工廠的重要手段。在快速發展的信息化時代,如何快速打造屬于自己的工業物聯網云
    的頭像 發表于 01-25 16:51 ?600次閱讀
    如何快速<b class='flag-5'>打造</b>屬于自己的工業物聯網云<b class='flag-5'>平臺</b>

    Prometheus監控業務指標詳解

    在 Kubernetes 已經成了事實上的容器編排標準之下,微服務的部署變得非常容易。但隨著微服務規模的擴大,服務治理帶來的挑戰也會越來越大。在這樣的背景下出現了服務可觀測性(observability)的概念。
    的頭像 發表于 01-24 10:32 ?545次閱讀
    <b class='flag-5'>Prometheus</b><b class='flag-5'>監控</b>業務指標詳解

    遠程監控平臺,讓你的數據無處可藏!

    遠程監控平臺,讓你的數據無處可藏! 云平臺遠程監控是一種通過云平臺實現對設備的遠程監控和管理的
    的頭像 發表于 01-05 17:00 ?533次閱讀

    Prometheus新手常犯的6項錯誤你知道嗎?

    這是 Prometheus 使用者經常會犯的一個錯,因為 Prometheus 時序是基于多標簽的,它非常靈活,有時你想新增一個標簽,從而將一個粗粒度的指標進行拆分,但切記添加的標簽的值應該做到盡量收斂
    的頭像 發表于 12-26 10:18 ?620次閱讀
    <b class='flag-5'>Prometheus</b>新手常犯的6項錯誤你知道嗎?

    Prometheus實戰篇:Exporter知識概述

    所有可以向Prometheus提供監控樣本數據的程序都可以被稱為一個Exporter.而Exporter的一個實例稱為target,如圖下所示
    的頭像 發表于 12-25 09:57 ?1015次閱讀
    <b class='flag-5'>Prometheus</b>實戰篇:Exporter知識概述