自從上了 Prometheus 監(jiān)控!睡覺踏實多了

      網友投稿 852 2025-04-04

      點關注公眾號,回復“1024”獲取2TB學習資源!

      背景

      對很多人來說,未知、不確定、不在掌控的東西,會有潛意識的逃避。當我第一次接觸 Prometheus 的時候也有類似的感覺。對初學者來說, Prometheus 包含的概念太多了,門檻也太高了。

      概念:Instance、Job、Metric、Metric Name、Metric Label、Metric Value、Metric Type(Counter、Gauge、Histogram、Summary)、DataType(Instant Vector、Range Vector、Scalar、String)、Operator、Function

      馬老師說:“雖然阿里巴巴是全球最大的零售平臺,但阿里不是零售公司,是一家數據公司”。Prometheus 也是一樣,本質來說是一個基于數據的監(jiān)控系統(tǒng)。

      日常監(jiān)控

      假設需要監(jiān)控 WebServerA 每個API的請求量為例,需要監(jiān)控的維度包括:服務名(job)、實例IP(instance)、API名(handler)、方法(method)、返回碼(code)、請求量(value)。

      如果以SQL為例,演示常見的查詢操作:

      查詢 method=put 且 code=200 的請求量(紅框)

      SELECT?*?from?http_requests_total?WHERE?code=”200”?AND?method=”put”?AND?created_at?BETWEEN?1495435700?AND?1495435710;

      查詢 handler=prometheus 且 method=post 的請求量(綠框)

      SELECT?*?from?http_requests_total?WHERE?handler=”prometheus”?AND?method=”post”?AND?created_at?BETWEEN?1495435700?AND?1495435710;

      查詢 instance=10.59.8.110 且 handler 以 query 開頭 的請求量(綠框)

      SELECT?*?from?http_requests_total?WHERE?handler=”query”?AND?instance=”10.59.8.110”?AND?created_at?BETWEEN?1495435700?AND?1495435710;

      通過以上示例可以看出,在常用查詢和統(tǒng)計方面,日常監(jiān)控多用于根據監(jiān)控的維度進行查詢與時間進行組合查詢。如果監(jiān)控100個服務,平均每個服務部署10個實例,每個服務有20個API,4個方法,30秒收集一次數據,保留60天。那么總數據條數為:100(服務) 10(實例) 20(API) 4(方法) 86400(1天秒數)* 60(天) / 30(秒)= 138.24 億條數據,寫入、存儲、查詢如此量級的數據是不可能在Mysql類的關系數據庫上完成的。因此 Prometheus 使用 TSDB 作為存儲引擎。

      存儲引擎

      TSDB 作為 Prometheus 的存儲引擎完美契合了監(jiān)控數據的應用場景

      存儲的數據量級十分龐大

      大部分時間都是寫入操作

      寫入操作幾乎是順序添加,大多數時候數據到達后都以時間排序

      寫操作很少寫入很久之前的數據,也很少更新數據。大多數情況在數據被采集到數秒或者數分鐘后就會被寫入數據庫

      刪除操作一般為區(qū)塊刪除,選定開始的歷史時間并指定后續(xù)的區(qū)塊。很少單獨刪除某個時間或者分開的隨機時間的數據

      基本數據大,一般超過內存大小。一般選取的只是其一小部分且沒有規(guī)律,緩存幾乎不起任何作用

      讀操作是十分典型的升序或者降序的順序讀

      高并發(fā)的讀操作十分常見

      那么 TSDB 是怎么實現以上功能的呢?

      "labels":?[{ ????"latency":????????"500" }] "samples":[{ ????"timestamp":?1473305798, ????"value":?0.9 }]

      原始數據分為兩部分 label, samples。前者記錄監(jiān)控的維度(標簽:標簽值),指標名稱和標簽的可選鍵值對唯一確定一條時間序列(使用 series_id 代表);后者包含包含了時間戳(timestamp)和指標值(value)。

      series ^ │.?.?.?.?.?.?.?.?.?.?.?.???server{latency="500"} │.?.?.?.?.?.?.?.?.?.?.?.???server{latency="300"} │.?.?.?.?.?.?.?.?.?.???.???server{} │.?.?.?.?.?.?.?.?.?.?.?.? v <--------?time?---------->

      TSDB 使用 timeseries:doc:: 為 key 存儲 value。為了加速常見查詢查詢操作:label 和 時間范圍結合。TSDB 額外構建了三種索引:Series, Label Index 和 Time Index。

      以標簽 latency 為例:

      存儲兩部分數據。一部分是按照字典序的排列的所有標簽鍵值對序列(series);另外一部分是時間線到數據文件的索引,按照時間窗口切割存儲數據塊記錄的具體位置信息,因此在查詢時可以快速跳過大量非查詢窗口的記錄數據

      每對 label 為會以 index:label: 為 key,存儲該標簽所有值的列表,并通過引用指向 Series 該值的起始位置。

      數據會以 index:timeseries:: 為 key,指向對應時間段的數據文件

      數據計算

      強大的存儲引擎為數據計算提供了完美的助力,使得 Prometheus 與其他監(jiān)控服務完全不同。Prometheus 可以查詢出不同的數據序列,然后再加上基礎的運算符,以及強大的函數,就可以執(zhí)行 metric series 的矩陣運算(見下圖)。

      如此,Promtheus體系的能力不弱于監(jiān)控界的“數據倉庫”+“計算平臺”。因此,在大數據的開始在業(yè)界得到應用,就能明白,這就是監(jiān)控未來的方向。

      一次計算,處處查詢

      當然,如此強大的計算能力,消耗的資源也是挺恐怖的。因此,查詢預計算結果通常比每次需要原始表達式都要快得多,尤其是在儀表盤和告警規(guī)則的適用場景中,儀表盤每次刷新都需要重復查詢相同的表達式,告警規(guī)則每次運算也是如此。因此,Prometheus提供了 Recoding rules,可以預先計算經常需要或者計算量大的表達式,并將其結果保存為一組新的時間序列, 達到 一次計算,多次查詢的目的。

      以上內容鏈接:cyningsun.com/02-22-2020/hidden-secret-to-understanding-prometheus.html

      安裝 Prometheus server

      Prometheus 可以支持多種安裝方式,包括?Docker、Ansible、Chef、Puppet、Saltstack 等。下面介紹最簡單的兩種方式,一種是直接使用編譯好的可執(zhí)行文件,開箱即用,另一種是使用 Docker 鏡像。

      首先從 官網的下載頁面 獲取 Prometheus 的最新版本和-,目前最新版本是 2.4.3(2018年10月),執(zhí)行下面的命令下載并解壓:

      $?wget?https://github.com/prometheus/prometheus/releases/download/v2.4.3/prometheus-2.4.3.linux-amd64.tar.gz?? $?tar?xvfz?prometheus-2.4.3.linux-amd64.tar.gz

      然后切換到解壓目錄,檢查 Prometheus 版本:

      $?cd?prometheus-2.4.3.linux-amd64?? $?./prometheus?--version?? prometheus,?version?2.4.3?(branch:?HEAD,?revision:?167a4b4e73a8eca8df648d2d2043e21bdb9a7449)?? ??build?user:???????root@1e42b46043e9?? ??build?date:???????20181004-08:42:02?? ??go?version:???????go1.11.1

      運行 Prometheus server:

      $?./prometheus?--config.file=prometheus.yml

      使用 Docker 安裝 Prometheus 更簡單,運行下面的命令即可:

      $?sudo?docker?run?-d?-p?9090:9090?prom/prometheus

      一般情況下,我們還會指定配置文件的位置:

      $?sudo?docker?run?-d?-p?9090:9090?\?? ????-v?~/docker/prometheus/:/etc/prometheus/?\?? ????prom/prometheus

      我們把配置文件放在本地 ~/docker/prometheus/prometheus.yml,這樣可以方便編輯和查看,通過 -v 參數將本地的配置文件掛載到 /etc/prometheus/ 位置,這是 prometheus 在容器中默認加載的配置文件位置。如果我們不確定默認的配置文件在哪,可以先執(zhí)行上面的不帶 -v 參數的命令,然后通過 docker inspect 命名看看容器在運行時默認的參數有哪些(下面的 Args 參數):

      $?sudo?docker?inspect?0c?? [...]?? ????????"Id":?"0c4c2d0eed938395bcecf1e8bb4b6b87091fc4e6385ce5b404b6bb7419010f46",?? ????????"Created":?"2018-10-15T22:27:34.56050369Z",?? ????????"Path":?"/bin/prometheus",?? ????????"Args":?[?? ????????????"--config.file=/etc/prometheus/prometheus.yml",?? ????????????"--storage.tsdb.path=/prometheus",?? ????????????"--web.console.libraries=/usr/share/prometheus/console_libraries",?? ????????????"--web.console.templates=/usr/share/prometheus/consoles"?? ????????],?? ??? [...]

      正如上面兩節(jié)看到的,Prometheus 有一個配置文件,通過參數 --config.file 來指定,配置文件格式為 YAML。我們可以打開默認的配置文件 prometheus.yml 看下里面的內容:

      /etc/prometheus?$?cat?prometheus.yml??? #?my?global?config?? global:?? ??scrape_interval:?????15s?#?Set?the?scrape?interval?to?every?15?seconds.?Default?is?every?1?minute.?? ??evaluation_interval:?15s?#?Evaluate?rules?every?15?seconds.?The?default?is?every?1?minute.?? ??#?scrape_timeout?is?set?to?the?global?default?(10s).?? ??? #?Alertmanager?configuration?? alerting:?? ??alertmanagers:?? ??-?static_configs:?? ????-?targets:?? ??????#?-?alertmanager:9093?? ??? #?Load?rules?once?and?periodically?evaluate?them?according?to?the?global?'evaluation_interval'.?? rule_files:?? ??#?-?"first_rules.yml"?? ??#?-?"second_rules.yml"?? ??? #?A?scrape?configuration?containing?exactly?one?endpoint?to?scrape:?? #?Here?it's?Prometheus?itself.?? scrape_configs:?? ??#?The?job?name?is?added?as?a?label?`job=`?to?any?timeseries?scraped?from?this?config.?? ??-?job_name:?'prometheus'?? ??? ????#?metrics_path?defaults?to?'/metrics'?? ????#?scheme?defaults?to?'http'.?? ??? ????static_configs:?? ????-?targets:?['localhost:9090']

      Prometheus 默認的配置文件分為四大塊:

      global 塊:Prometheus 的全局配置,比如 scrape_interval 表示 Prometheus 多久抓取一次數據,evaluation_interval 表示多久檢測一次告警規(guī)則;

      alerting 塊:關于 Alertmanager 的配置,這個我們后面再看;

      rule_files 塊:告警規(guī)則,這個我們后面再看;

      scrape_config 塊:這里定義了 Prometheus 要抓取的目標,我們可以看到默認已經配置了一個名稱為 prometheus 的 job,這是因為 Prometheus 在啟動的時候也會通過 HTTP 接口暴露自身的指標數據,這就相當于 Prometheus 自己監(jiān)控自己,雖然這在真正使用 Prometheus 時沒啥用處,但是我們可以通過這個例子來學習如何使用 Prometheus;可以訪問 http://localhost:9090/metrics 查看 Prometheus 暴露了哪些指標;

      Prometheus+InfluxDB+Grafana 打造高逼格監(jiān)控平臺!

      Docker部署Prometheus+Grafana監(jiān)控系統(tǒng)

      30 個高可用 Prometheus 架構實踐中的踩坑集錦

      Prometheus 如何做到“活學活用”,大牛總結的避坑指南

      總結

      最近兩年 Prometheus 的發(fā)展非常迅速,社區(qū)也非常活躍,國內研究 Prometheus 的人也越來越多。隨著微服務,DevOps,云計算,云原生等概念的普及,越來越多的企業(yè)開始使用 Docker 和 Kubernetes 來構建自己的系統(tǒng)和應用,像 Nagios 和 Cacti 這樣的老牌監(jiān)控系統(tǒng)會變得越來越不適用,相信 Prometheus 最終會發(fā)展成一個最適合云環(huán)境的監(jiān)控系統(tǒng)。

      更多學習:下一代監(jiān)控系統(tǒng)!來看看它有多牛逼

      推薦閱讀?點擊標題可跳轉

      突發(fā)!大疆宣布暫停俄羅斯烏克蘭業(yè)務

      自從上了 Prometheus 監(jiān)控!睡覺踏實多了

      你還在用命令看日志?快用 Kibana 吧,一張圖勝過千萬行日志

      別再手擼 Shell 腳本了!送你 35 個開箱即用的實用腳本

      開源維護至今 12 年,這才叫良心軟件!!

      神級下載工具,解決你 99% 下載難題!

      Spring Boot項目配置免費HTTPS的詳細流程!

      ES+Redis+MySQL,這個高可用架構設計太頂了!

      轉發(fā) 關注

      點亮下方“在看”圖標

      更多人看到

      Docker

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:是否云ERP才是SaaS主戰(zhàn)場?
      下一篇:借助記事本解決Excel開啟CSV文件亂碼除數字其他都亂碼問題(csv文件用excel打開為亂碼的原因)
      相關文章
      亚洲午夜无码久久| 亚洲日韩精品一区二区三区无码| 亚洲熟妇av一区二区三区漫画 | 亚洲中文字幕久久精品无码A | 亚洲综合精品香蕉久久网97| 日韩亚洲一区二区三区| 亚洲美女在线国产| 亚洲国产综合无码一区二区二三区| 丰满亚洲大尺度无码无码专线| 亚洲变态另类一区二区三区| 亚洲日韩精品无码AV海量| 亚洲中文字幕乱码AV波多JI| 亚洲精品无播放器在线播放| 亚洲第一第二第三第四第五第六| 亚洲精品无码少妇30P| 久久精品国产亚洲AV天海翼| 无码专区一va亚洲v专区在线| 亚洲成a人片在线观看久| 国产成人亚洲综合无码| 亚洲人成色777777在线观看| 亚洲成在人线av| 久久精品国产亚洲AV无码娇色| 亚洲丁香婷婷综合久久| 亚洲级αV无码毛片久久精品| 亚洲日韩人妻第一页| 精品国产日韩亚洲一区| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲一区在线视频| 在线观看亚洲AV日韩A∨| 亚洲a∨无码一区二区| 亚洲精品国产综合久久一线| 亚洲中文久久精品无码| 亚洲∧v久久久无码精品| 亚洲熟妇无码久久精品| 在线亚洲午夜片AV大片| 亚洲v国产v天堂a无码久久| 亚洲人成中文字幕在线观看| 亚洲另类激情综合偷自拍| 亚洲国产成人久久综合一区| 亚洲色大成网站www永久男同| 国产亚洲Av综合人人澡精品|