Prometheus 系統監控方案 一

来源:http://www.cnblogs.com/vovlie/archive/2016/12/23/Prometheus_CONCEPTS.html
-Advertisement-
Play Games

最近一直在折騰時序類型的資料庫,經過一段時間項目應用,覺得十分不錯。而Prometheus又是剛剛推出不久的開源方案,中文資料較少,所以打算寫一系列應用的實踐過程分享一下。 Prometheus 是什麼? Prometheus是一套開源的監控&報警&時間序列資料庫的組合,起始是由 "SoundClo ...


最近一直在折騰時序類型的資料庫,經過一段時間項目應用,覺得十分不錯。而Prometheus又是剛剛推出不久的開源方案,中文資料較少,所以打算寫一系列應用的實踐過程分享一下。

Prometheus 是什麼?

Prometheus是一套開源的監控&報警&時間序列資料庫的組合,起始是由SoundCloud公司開發的。隨著發展,越來越多公司和組織接受採用Prometheus,社會也十分活躍,他們便將它獨立成開源項目,並且有公司來運作。google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。

Prometheus 的優點

  • 非常少的外部依賴,安裝使用超簡單
  • 已經有非常多的系統集成 例如:docker HAProxy Nginx JMX等等
  • 服務自動化發現
  • 直接集成到代碼
  • 設計思想是按照分散式、微服務架構來實現的

Prometheus 的特性

  • 自定義多維度的數據模型
  • 非常高效的存儲 平均一個採樣數據占 ~3.5 bytes左右,320萬的時間序列,每30秒採樣,保持60天,消耗磁碟大概228G。
  • 強大的查詢語句
  • 輕鬆實現數據可視化

等等

相對於Graphite這種產品,還是有不少優點的。最讓我覺得不錯的是非常優秀的寫性能和讀取性能,它數據結構實現和OpenTSDB是有相似之處,有興趣可以看看這個文檔。解密OpenTSDB的表存儲優

Prometheus 的系統架構

系統架構

它的服務過程是這樣的 Prometheus daemon 負責定時去目標上抓取 metrics(指標) 數據,每個抓取目標需要暴露一個http服務的介面給它定時抓取。
Prometheus支持通過配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目標。
Alertmanager 是獨立於Prometheus的一個組件,可以支持Prometheus的查詢語句,提供十分靈活的報警方式。
Prometheus支持很多方式的圖表可視化,例如十分精美的Grafana,自帶的Promdash,以及自身提供的模版引擎等等,還提供HTTP API的查詢方式,自定義所需要的輸出。
PushGateway這個組件是支持Client主動推送 metrics 到PushGateway,而Prometheus只是定時去Gateway上抓取數據。

如果有使用過statsd的用戶,則會覺得這十分相似,只是statsd是直接發送給伺服器端,而Prometheus主要還是靠進程主動去抓取。

Prometheus 的數據模型

Prometheus 從根本上所有的存儲都是按時間序列去實現的,相同的 metrics(指標名稱) 和 label(一個或多個標簽) 組成一條時間序列,不同的label表示不同的時間序列。為了支持一些查詢,有時還會臨時產生一些時間序列存儲。

metrics name & label 指標名稱和標簽

每條時間序列是由唯一的 指標名稱 和 一組 標簽 (key=value)的形式組成。
指標名稱 一般是給監測對像起一名字,例如 http_requests_total 這樣,它有一些命名規則,可以包字母數字_之類的的。
通常是以應用名稱開頭_監測對像_數值類型_單位這樣。
例如:

  1. push_total
  2. userlogin_mysql_duration_seconds
  3. app_memory_usage_bytes

標簽 就是對一條時間序列不同維度的識別了,例如 一個http請求用的是POST還是GET,它的endpoint是什麼,這時候就要用標簽去標記了。
最終形成的標識便是這樣了

http_requests_total{method="POST",endpoint="/api/tracks"}

記住,針對http_requests_total這個metrics name 無論是增加標簽還是刪除標簽都會形成一條新的時間序列。
查詢語句就可以跟據上面標簽的組合來查詢聚合結果了。
如果以傳統資料庫的理解來看這條語句,則可以考慮 http_requests_total是表名,標簽是欄位,而timestamp是主鍵,還有一個float64欄位是值了。(Prometheus裡面所有值都是按float64存儲)

Prometheus 的四種數據類型

Counter

  • Counter 用於累計值,例如 記錄 請求次數、任務完成數、錯誤發生次數。
  • 一直增加,不會減少。
  • 重啟進程後,會被重置。

例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒後抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100

Gauge

  • Gauge 常規數值,例如 溫度變化、記憶體使用變化。
  • 可變大,可變小。
  • 重啟進程後,會被重置

例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 < 抓取值

Histogram

  • Histogram 可以理解為柱狀圖的意思,常用於跟蹤事件發生的規模,例如:請求耗時、響應大小。它特別之處是可以對記錄的內容進行分組,提供 count 和 sum 全部值的功能。

    例如:{小於10=5次,小於20=1次,小於30=2次},count=7次,sum=7次的求和值

Summary

  • Summary和Histogram十分相似,常用於跟蹤事件發生的規模,例如:請求耗時、響應大小。同樣提供 count 和 sum 全部值的功能。
  • 例如:count=7次,sum=7次的值求值
  • 它提供一個quantiles的功能,可以按%比劃分跟蹤的結果。例如:quantile取值0.95,表示取採樣值裡面的95%數據。

下一章說說Prometheus安裝過程。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mysql查詢過程: 客戶端發送查詢請求。 伺服器檢查查詢緩存,如果命中緩存,則返回結果,否則,繼續執行。 伺服器進行sql解析,預處理,再由優化器生成執行計劃。 Mysql調用存儲引擎API執行優化器生成的執行計划進行查詢。 返回結果。 mysql查詢過程: 優化數據訪問: 是否查詢了多餘的記錄; ...
  • 監控Oracle資料庫我們需要安裝第三方提供的Zabbix插件,我們先測試比較有名的Orabbix,http://www.smartmarmot.com/product/orabbix/ 從部署架構圖上可以看出,orabbix是通過JDBC去連接被監控資料庫的,其實不是必須在資料庫主機上安裝Agen ...
  • 概述 在RAC環境下配置OGG,要想實現RAC節點故障時,OGG能自動的failover到正常節點,要保證兩點: 1. OGG的checkpoint,trail,BR文件放置在共用的集群文件系統上,RAC各節點都能訪問到 2. 需要有集群軟體的來監測OGG進程,以及發生故障時,自動在正常節點重啟OG ...
  • Hive是Hadoop生態中的一個重要組成部分,主要用於數據倉庫。前面的文章中我們已經搭建好了Hadoop的群集,下麵我們在這個群集上再搭建Hive的群集。 1.安裝MySQL 1.1安裝MySQL Server 在Ubuntu下麵安裝MySQL的Server很簡單,只需要運行: 系統會把MySQL ...
  • 沒用過IDEA工具,聽說跟Eclipse差不多,sbt在Idea其實就等於maven在Eclipse。Spark運行在JVM中,所以要在Idea下運行spark,就先要安裝JDK 1.8+ 然後加入Scala和Spark的依賴包就可以進行開發了,不要安裝低版本的JDK。 先下載Idea的社區版 ht ...
  • 原文地址:http://www.cnblogs.com/clownkings/p/4950865.html 解決辦法: 1、首先要備份好mdf文件,如果他沒了經理非吃了你不可。都不吐骨頭的。 2、在資料庫中新建一個需要附加同名的資料庫。例如【testdb】 3、停止SQL Server服務 4、找到... ...
  • 這個問題,原因是UTF-8編碼有可能是兩個、三個、四個位元組。Emoji表情或者某些特殊字元是4個位元組,而MySQL的utf8編碼最多3個位元組,所以數據插不進去。 我的解決方案是這樣的 1.在mysql的安裝目錄下找到my.ini,作如下修改: [mysqld] character-set-serve ...
  • 適用場景:用於判斷集合中元素,進一步縮小範圍。 Any 說明:用於判斷集合中是否有元素滿足某一條件;不延遲。(若條件為空,則集合只要不為空就返回True,否則為False)。有2種形式,分別為簡單形式和帶條件形式。 1.簡單形式: 僅返回沒有訂單的客戶: 生成SQL語句為: 2.帶條件形式: 僅返回 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...