Prometheus(轉載)

Prometheus 系統監控方案 一

https://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.htmlhtml

 

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

Prometheus 是什麼?

Prometheus是一套開源的監控&報警&時間序列數據庫的組合,起始是由SoundCloud公司開發的。隨着發展,愈來愈多公司和組織接受採用Prometheus,社區也十分活躍,他們便將它獨立成開源項目,而且有公司來運做。google SRE的書內也曾提到跟他們BorgMon監控系統類似的實現是Prometheus。如今最多見的Kubernetes容器管理系統中,一般會搭配Prometheus進行監控。sql

Prometheus 的優勢

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

Prometheus 的特性

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

等等docker

相對於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上抓取數據。api

若是有使用過statsd的用戶,則會以爲這十分類似,只是statsd是直接發送給服務器端,而Prometheus主要仍是靠進程主動去抓取。服務器

Prometheus 的數據模型

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

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安裝過程。

相關文章
相關標籤/搜索