Prometheus如何理解

這篇文章的內(nèi)容主要圍繞Prometheus如何理解進行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

十余年的新鄉(xiāng)網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整新鄉(xiāng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“新鄉(xiāng)網(wǎng)站設(shè)計”,“新鄉(xiāng)網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

Prometheus(譯:普羅米修斯)用領(lǐng)先的開源監(jiān)控解決方案為你的指標(biāo)和警報提供動力(賦能)。

Prometheus如何理解

1 概述

1.1. Prometheus是什么?

Prometheus是一個開源的系統(tǒng)監(jiān)控和警報工具包。自2012年啟動以來,許多公司和組織都采用了Prometheus,該項目擁有非?;钴S的開發(fā)人員和用戶社區(qū)。它現(xiàn)在是一個獨立的開源項目,獨立于任何公司進行維護。Prometheus于2016年加入云原生計算基金會,成為繼Kubernetes之后的第二個托管項目。

1.1.1. Prometheus的主要特性:

一個多維數(shù)據(jù)模型,包含由指標(biāo)名稱和鍵/值對(Tag)標(biāo)識的時間序列數(shù)據(jù)

PromQL是一種靈活的查詢語音,用于查詢并利用這些維度數(shù)據(jù) 不依賴分布式存儲,單個服務(wù)器節(jié)點是自治的

時間序列收集是通過HTTP上的pull模型進行的(支持Pull)

推送時間序列是通過一個中間網(wǎng)關(guān)來支持的(也支持Push)

目標(biāo)是通過服務(wù)發(fā)現(xiàn)或靜態(tài)配置發(fā)現(xiàn)的

多種模式的圖形和儀表盤支持

總結(jié)一下,就是多維數(shù)據(jù)模型、PromQL查詢語言、節(jié)點自治、HTTP主動拉取或者網(wǎng)關(guān)主動推送的方式獲取時間序列數(shù)據(jù)、自動發(fā)現(xiàn)目標(biāo)、多種儀表盤支持

1.1.2. 組件:

Prometheus server,它負(fù)責(zé)抓取和存儲時間序列數(shù)據(jù),是最主要的組件

client libraries,用于檢測應(yīng)用程序代碼的客戶端庫

push gateway,用于支持短期的jobs

exporters,用于支持HAProxy等第三方

alertmanager,用于處理告警

各種支持工具

大多數(shù)Prometheus組件都是用Go編寫的,這使得它們易于作為靜態(tài)二進制文件構(gòu)建和部署

1.1.3. 架構(gòu):

這張圖展示了架構(gòu)及其生態(tài)系統(tǒng)的一些組成部分: Prometheus如何理解

Prometheus從工具化的作業(yè)中獲取指標(biāo),要么直接獲取,要么通過中介推送網(wǎng)關(guān)獲取短期作業(yè)。它在本地存儲所有抓取的樣本,并對這些數(shù)據(jù)應(yīng)用規(guī)則將這些數(shù)據(jù)進行聚合,并記錄新的時間序列,或者生成警報??梢杂肎rafana或其他API來可視化收集的數(shù)據(jù)。

1.2. 什么時候用它合適

Prometheus可以很好地記錄任何純數(shù)字時間序列。它既適合以機器為中心的監(jiān)視,也適合高度動態(tài)的面向服務(wù)的體系結(jié)構(gòu)的監(jiān)視。在微服務(wù)的世界中,它對多維數(shù)據(jù)收集和查詢的支持是一個特別的優(yōu)勢。

Prometheus是為可靠性而設(shè)計的,在你的服務(wù)宕機的時候,你可以快速診斷問題。每臺Prometheus服務(wù)器都是獨立的,不依賴于網(wǎng)絡(luò)存儲或其他遠(yuǎn)程服務(wù)。

1.3. 什么時候用它不合適

Prometheus的值的可靠性。你總是可以查看有關(guān)系統(tǒng)的統(tǒng)計信息,即使在出現(xiàn)故障的情況下也是如此。如果你需要100%的準(zhǔn)確性,例如按請求計費,Prometheus不是一個好的選擇,因為收集的數(shù)據(jù)可能不夠詳細(xì)和完整。在這種情況下,最好使用其他系統(tǒng)來收集和分析用于計費的數(shù)據(jù),并使用Prometheus來完成剩下的監(jiān)視工作。

1.4. Prometheus VS InfluxDB

InfluxDB是一個開源的時間序列數(shù)據(jù)庫,具有擴展和集群的商業(yè)選項。InfluxDB項目是在Prometheus開發(fā)開始將近一年后發(fā)布的,所以當(dāng)時無法考慮將其作為替代方案。盡管如此,Prometheus和fluxdb之間仍然存在顯著的差異。二者有許多相似之處。兩者都有標(biāo)簽(在InfluxDB中稱為tags)來有效地支持多維度度量。它們基本上使用相同的數(shù)據(jù)壓縮算法。兩者都具有廣泛的集成,包括彼此之間的集成。兩者都有掛鉤,允許進一步擴展它們,例如在統(tǒng)計工具中分析數(shù)據(jù)或執(zhí)行自動化操作。

下列情況,用InfluxDB更好:

如果你正在進行事件日志記錄

商業(yè)選項為InfluxDB提供集群,這對于長期數(shù)據(jù)存儲也更好

最終實現(xiàn)副本之間數(shù)據(jù)的一致性

下列情況,用Prometheus更好:

如果你主要做的是度量

如果你需要更強大的查詢語言、警報和通知功能

更高的可用性和正常運行時間,用于繪圖和報警

InfluxDB由一家遵循開放核心模型的商業(yè)公司維護,提供高級特性,如閉源集群、托管和支持。

Prometheus是一個完全開源和獨立的項目,由許多公司和個人維護,其中一些還提供商業(yè)服務(wù)和支持。

2. 基本概念

2.1. 數(shù)據(jù)模型

Prometheus基本上將所有數(shù)據(jù)存儲為時間序列:屬于同一指標(biāo)和同一組標(biāo)記維度的時間戳值流。除了存儲時間序列外,Prometheus還可以根據(jù)查詢結(jié)果生成臨時派生的時間序列。

(PS:這里對時間序列的解釋是這樣的,

time series: streams of timestamped values belonging to the same metric and the same set of labeled dimensions

2.1.1. Metric names and labels

Every time series is uniquely identified by its metric name and optional key-value pairs called labels.

(每個時間序列都由其指標(biāo)名稱和稱為標(biāo)簽的可選鍵值對唯一標(biāo)識)

指標(biāo)名稱指定要度量的系統(tǒng)的一般特性(例如,http_requests_total表示接收的HTTP請求的總數(shù))。它可能包含ASCII字母和數(shù)字,以及下劃線和冒號。它必須匹配正則表達(dá)式[a-zA-Z_:][a-zA-Z0-9_:]*

標(biāo)簽名稱可以包含ASCII字母、數(shù)字和下劃線。它們必須匹配正則表達(dá)式[a-zA-Z_][a-zA-Z0-9_]*。以__開頭的標(biāo)簽名稱保留內(nèi)部使用。

標(biāo)簽值可以包含任何Unicode字符。

2.1.2. Sample(樣本)

樣本構(gòu)成實際的時間序列數(shù)據(jù)。每個樣本包括:

a float64 value
a millisecond-precision timestamp

2.1.3. notation(記法)

給定一個度量名稱和一組標(biāo)簽,時間序列通常使用以下符號標(biāo)識:

<metric name>{<label name>=<label value>,...}

例如,有這樣一個時間序列,指標(biāo)名稱是api_http_requests_total,有兩個標(biāo)簽method="POST"和handler="/messages",那么這個時間序列可以這樣寫:

api_http_requests_total{method="POST", handler="/messages"}

2.2. metric types(指標(biāo)類型)

2.2.1. Counter(計數(shù)器)

計數(shù)器是一個累積指標(biāo),它表示一個單調(diào)遞增的計數(shù)器,其值只能在重啟時遞增或重置為零。例如,可以使用計數(shù)器來表示已服務(wù)的請求數(shù)、已完成的任務(wù)數(shù)或錯誤數(shù)。不要使用計數(shù)器來反映一個可能會減小的值。例如,不要使用計數(shù)器表示當(dāng)前正在運行的進程的數(shù)量,這種情況下,你應(yīng)該用gauge。

2.2.2. Gauge(計量器)

計量器表示一個可以任意上下移動的數(shù)值。

計量器通常用于測量溫度或當(dāng)前內(nèi)存使用量等,也用于“計數(shù)”,比如并發(fā)請求的數(shù)量。

2.2.3. Histogram(直方圖、柱狀圖)

直方圖對觀察結(jié)果(通常是請求持續(xù)時間或響應(yīng)大小之類的東西)進行采樣,并在可配置的桶中計數(shù)。它還提供了所有觀測值的和。

直方圖用一個基本的指標(biāo)名<basename>暴露在一個抓取期間的多個時間序列:

觀察桶的累積計數(shù)器,格式為<basename>_bucket{le="<upper inclusive bound>"} 所有觀測值的總和,格式為<basename>_sum 已觀察到的事件的計數(shù),格式為<basename>_count

2.2.4. Summary(摘要)

與柱狀圖類似,摘要樣例觀察結(jié)果(通常是請求持續(xù)時間和響應(yīng)大小之類的內(nèi)容)。雖然它還提供了觀測值的總數(shù)和所有觀測值的總和,但它計算了一個滑動時間窗口上的可配置分位數(shù)。

2.3. Jobs AND Instances(作業(yè)與實例)

在Prometheus的術(shù)語中,可以抓取的端點稱為實例,通常對應(yīng)于單個進程。具有相同目的的實例集合稱為作業(yè)。

例如,一個API Server job 有4個副本instances:

job: api-server

instance 1: 1.2.3.4:5670
instance 2: 1.2.3.4:5671
instance 3: 5.6.7.8:5670
instance 4: 5.6.7.8:5671

2.3.1. 自動生成標(biāo)簽和時間序列

當(dāng)Prometheus抓取目標(biāo)時,它會自動在抓取的時間序列上附加一些標(biāo)簽,用來識別被抓取的目標(biāo):

job:目標(biāo)所屬的已配置作業(yè)名稱 instance:<host>:<port>是被抓取的目標(biāo)URL的一部分 3. 快速開始 Prometheus是一個開源的系統(tǒng)監(jiān)控和警報工具包,具有活躍的生態(tài)系統(tǒng)。

3.1. 下載與安裝Prometheus如何理解

Prometheus是一個監(jiān)控平臺,它通過抓取這些目標(biāo)上的HTTP端點來收集被監(jiān)控目標(biāo)的指標(biāo)。

需要下載、安裝并運行Prometheus。還需要下載并安裝一個exporter,它是將主機和服務(wù)上的時間序列數(shù)據(jù)導(dǎo)出的工具。

https://prometheus.io/download/

在運行Prometheus之前,我們先配置一下

3.1.1. 配置Prometheus監(jiān)視它自己

Prometheus通過抓取目標(biāo)上的HTTP端點數(shù)據(jù)來從被監(jiān)控的目標(biāo)收集數(shù)據(jù)。由于Prometheus也以同樣的方式公開自己的數(shù)據(jù),因此它還可以抓取和監(jiān)測自己的健康狀況。

雖然Prometheus服務(wù)器在實踐中只收集關(guān)于自己的數(shù)據(jù)不是很有用,但是它是一個很好的開始示例。將以下基本的Prometheus配置保存為一個名為Prometheus.yml的文件:

1 global:

 2   scrape_interval:     15s # By default, scrape targets every 15 seconds.
 3 
 4   # Attach these labels to any time series or alerts when communicating with
 5   # external systems (federation, remote storage, Alertmanager).
 6   external_labels:
 7     monitor: 'codelab-monitor'
 8 
 9 # A scrape configuration containing exactly one endpoint to scrape:
10 # Here it's Prometheus itself.
11 scrape_configs:
12   # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
13   - job_name: 'prometheus'
14 
15     # Override the global default and scrape targets from this job every 5 seconds.
16     scrape_interval: 5s
17 
18     static_configs:
19       - targets: ['localhost:9090']

3.1.2. 啟動Prometheus

1 # Start Prometheus.
2 # By default, Prometheus stores its database in ./data (flag --storage.tsdb.path).
3 ./prometheus --config.file=prometheus.yml

Prometheus如何理解 Prometheus如何理解

Prometheus如何理解

3.2. 配置

Prometheus可以通過命令行和配置文件進行配置。配置文件定義了與抓取作業(yè)及其實例相關(guān)的所有內(nèi)容,以及要加載哪些規(guī)則文件。

運行./prometheus -h可以查看所有支持的命令

為了指定要加載哪個配置文件,請使用--config選項

配置文件是YAML格式的

配置項太多,不一一列舉,自行查看

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

global:

   # How frequently to scrape targets by default.
   [ scrape_interval: <duration> | default = 1m ]
 
   # How long until a scrape request times out.
   [ scrape_timeout: <duration> | default = 10s ]
 
   # How frequently to evaluate rules.
   [ evaluation_interval: <duration> | default = 1m ]
 
   # The labels to add to any time series or alerts when communicating with
   # external systems (federation, remote storage, Alertmanager).
   external_labels:
     [ <labelname>: <labelvalue> ... ]
 
 # Rule files specifies a list of globs. Rules and alerts are read from
 # all matching files.
 rule_files:
   [ - <filepath_glob> ... ]
 
 # A list of scrape configurations.
 scrape_configs:
   [ - <scrape_config> ... ]
 
 # Alerting specifies settings related to the Alertmanager.
 alerting:
   alert_relabel_configs:
     [ - <relabel_config> ... ]
   alertmanagers:
     [ - <alertmanager_config> ... ]
 
 # Settings related to the remote write feature.
 remote_write:
   [ - <remote_write> ... ]
 
 # Settings related to the remote read feature.
 remote_read:
   [ - <remote_read> ... ]

這里有一個有效的示例配置文件

3.3. 查詢

Prometheus提供了一種名為PromQL(Prometheus查詢語言)的函數(shù)式查詢語言,允許用戶實時選擇和聚合時間序列數(shù)據(jù)。表達(dá)式的結(jié)果既可以顯示為圖形,也可以在Prometheus的表達(dá)式瀏覽器中作為表格數(shù)據(jù)查看,或者通過HTTP API由外部系統(tǒng)使用。

3.3.1. 表達(dá)式數(shù)據(jù)類型

在Prometheus的表達(dá)式語言中,表達(dá)式或子表達(dá)式可以計算為以下四種類型之一:

Instant vector(瞬時向量):一組時間序列,每個時間序列包含一個樣本,所有樣本共享相同的時間戳

Range vector(范圍向量):一組時間序列,其中包含每個時間序列隨時間變化的數(shù)據(jù)點范圍

Scalar(標(biāo)量):一個簡單的數(shù)值浮點值

String(字符串):一個簡單的字符串值,目前未使用

3.3.2. 字面值

字符串字面值

字符串可以指定為單引號、雙引號或反引號中的文字。例如:

1 "this is a string"
2 'these are unescaped: \n \\ \t'
3 `these are not unescaped: \n ' " \t`

浮點數(shù)字面值

例如:-2.34

3.3.3. 時間序列選擇器

瞬時向量選擇器

瞬時向量選擇器允許在給定的時間戳(瞬時)上為每個時間序列選擇一組時間序列和一個樣本值:在最簡單的形式中,只指定一個度量名稱。這樣一個向量就會包含這個度量名稱的所有時間序列元素。

下面的例子,選擇指標(biāo)名稱是http_requests_total的所有時間序列:

 http_requests_total

通過在花括號({ })中添加一組匹配的標(biāo)簽,可以進一步過濾這些時間序列。

下面的例子,選擇指標(biāo)名稱是http_requests_total,并且有job標(biāo)簽值是prometheus,并且group標(biāo)簽值是canary的時間序列:

 http_requests_total{job="prometheus",group="canary"}

標(biāo)簽匹配操作符:

= : 選擇與提供的字符串完全相同的標(biāo)簽(等于) != :選擇不等于提供的字符串的標(biāo)簽(不等于) =~ :正則匹配 !~ : 非正則匹配

下面的例子,選擇所有staging, testing, development環(huán)境,并且HTTP請求方式不是GET的http_requests_total時間序列

http_requests_total{environment=~"staging|testing|development",method!="GET"} 不要匹配空標(biāo)簽

 {job=~".+"}              # Good!
 {job=~".*",method="get"} # Good!

3.3.4. 范圍向量選擇器

范圍向量字面量的工作原理與瞬時向量字面量類似,只是它們從當(dāng)前瞬時量中選擇一個樣本范圍。從語法上講,范圍持續(xù)時間被添加到向量選擇器末尾的方括號([ ])中,以指定應(yīng)該為每個結(jié)果范圍向量元素獲取多少時間值。

時間期限指定為一個數(shù)字,緊接其后的是下列單位之一:s(秒)、m(分鐘)、h(小時)、d(天) 、w(周)、y(年)

下面的例子,選擇指標(biāo)名是http_requests_total,且job標(biāo)簽值是prometheus的已經(jīng)記錄的最近5分鐘內(nèi)的時間序列:

http_requests_total{job="prometheus"}[5m] Offset修飾符

下面的表達(dá)式返回http_requests_total在過去5分鐘相對于當(dāng)前查詢計算時間的值:

http_requests_total offset 5m 注意,offset總是緊跟在選擇器后面的

sum(http_requests_total{method="GET"} offset 5m) 下面的例子,返回一周前的最近5分鐘http_requests_total的時間序列

rate(http_requests_total[5m] offset 1w)

3.3.5. 子查詢

Syntax: <instant_query> '[' <range> ':' [<resolution>] ']' [ offset <duration> ]

3.3.5. 運算符

Prometheus的查詢語言支持基本的邏輯運算符和算術(shù)運算符。

算術(shù)二元運算符

+(加)、-(減)、*(乘)、/(除)、%(余數(shù))、^(指數(shù))

二進制算術(shù)運算符定義在標(biāo)量/標(biāo)量、向量/標(biāo)量和向量/向量值對之間

比較二元運算符

== 、!= 、> 、< 、>= 、<=

邏輯運算符

and 、or 、unless

聚合運算符

sum(求和)、min(最小值)、max(最大值)、avg(求平均)、stddev(標(biāo)準(zhǔn)偏差)、stdvar(方差)、count(個數(shù))、count_values(相同值的元素個數(shù))、bottomk(樣本值的最小元素)、topk(樣本值的最大元素)、quantile(0 ≤ φ ≤ 1)

這些操作符既可以用于聚合所有標(biāo)簽維度,也可以通過包含without子句或by子句來保存不同的維度。

1 <aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]

例如,假設(shè)http_requests_total有application 、 instance 、 group三個標(biāo)簽,那么下面兩個是等價的:

1 sum(http_requests_total) without (instance)
2 sum(http_requests_total) by (application, group)

3.3.6. 函數(shù)

https://prometheus.io/docs/prometheus/latest/querying/functions/

3.3.7. 示例

 1 # 返回http_requests_total的所有時間序列
 2 http_requests_total
 3 
 4 # 返回http_requests_total的且限定了job和handler標(biāo)簽的時間序列
 5 http_requests_total{job="apiserver", handler="/api/comments"}
 6 http_requests_total{job="apiserver", handler="/api/comments"}[5m]
 7 
 8 # 正則表達(dá)式
 9 http_requests_total{job=~".*server"}
10 http_requests_total{status!~"4.."}
11 
12 # 過去的5分鐘內(nèi)每秒HTTP請求速率
13 rate(http_requests_total{job="api-server"}[5m])
14 # 過去的30分鐘內(nèi)每5分鐘
15 rate(http_requests_total[5m])[30m:1m]
16 # 過去5分鐘的所有請求速率求和,保留job維度
17 sum(rate(http_requests_total[5m])) by (job)
18 # cpu使用率最高的前3個
19 topk(3, sum(rate(instance_cpu_time_ns[5m])) by (app, proc))

4. Grafana支持

Grafana支持查詢Prometheus

下面是Grafana dashboard查詢Prometheus數(shù)據(jù)的例子: Prometheus如何理解

使用

默認(rèn)情況下,Grafana監(jiān)聽http://localhost:3000,默認(rèn)用admin/admin登錄

創(chuàng)建一個Prometheus數(shù)據(jù)源,接著創(chuàng)建面板并定義查詢的指標(biāo) Prometheus如何理解

Prometheus如何理解 Prometheus如何理解 Prometheus如何理解

Prometheus如何理解

Prometheus如何理解

剛開始,如果不知道PromeQL怎么寫,可以去Prometheus上去找 http://localhost:9090/graph

Prometheus如何理解 Prometheus如何理解

Prometheus如何理解

感謝你的閱讀,相信你對“Prometheus如何理解”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關(guān)知識點,可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站!小編會繼續(xù)為大家?guī)砀玫奈恼拢?/p>

名稱欄目:Prometheus如何理解
文章轉(zhuǎn)載:http://muchs.cn/article8/iepcip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護網(wǎng)站設(shè)計、做網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站排名、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作