這篇文章的內(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)和警報提供動力(賦能)。
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從工具化的作業(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.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是一個監(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
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))
Grafana支持查詢Prometheus
下面是Grafana dashboard查詢Prometheus數(shù)據(jù)的例子:
使用
默認(rèn)情況下,Grafana監(jiān)聽http://localhost:3000,默認(rèn)用admin/admin登錄
創(chuàng)建一個Prometheus數(shù)據(jù)源,接著創(chuàng)建面板并定義查詢的指標(biāo)
剛開始,如果不知道PromeQL怎么寫,可以去Prometheus上去找 http://localhost:9090/graph
感謝你的閱讀,相信你對“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)