中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

2、Grafana-Prometheus學習筆記

一(yi)、時序數據庫(ku):

時序數據庫(Time Series Database, TSDB)是專門為處理和存儲時序數據而設計的數據庫。時(shi)序(xu)數據(ju)是(shi)帶有時(shi)間戳的(de)數據(ju),通(tong)常用于表示隨時(shi)間變(bian)化的(de)測(ce)量值。時序數(shu)據庫(ku)在許(xu)多應(ying)用(yong)領域中具(ju)有關鍵作用(yong),包括(kuo)物聯網(IoT)、應(ying)用(yong)性能監控(APM)、金(jin)融(rong)市場分析、環(huan)境監測、工業(ye)自動化(hua)等。

當前主流的時序數據庫

二、InfluxDBPrometheusGraphite

 

InfluxDB

Prometheus

Graphite

官方文檔

簡介

一個開源的時序數據庫,專門用于存儲(chu)和查(cha)詢時序數據(metrics)。

一個開源的系統監控和報警工具,專注于時序數據收集、存儲和查詢。

一個開源的監控系統和圖表展示工具,專注于時序數據存儲和可視化

主要特點

- 高(gao)效存儲時序數據

- 支持復(fu)雜的查詢(xun)和聚合(he)

- 提供內置的存儲引擎(qing)(TSI, TSI2)

- 支持標簽(qian)查詢(xun)和數據索引(yin)

- 內置圖形化儀(yi)表盤工具(Chronograf)

- 自動(dong)發現和抓(zhua)取目標

- 支持多(duo)維度數據(ju)模型(標簽)

- 高效(xiao)的拉取式數據(ju)收集模型

- 提(ti)供豐富的報(bao)警(jing)機(ji)制

- 強大的查詢語言PromQL

- 采用推(tui)送模式來收集數(shu)據

- 數據(ju)(ju)存儲使用時間序列數據(ju)(ju)庫

- 基于Cassandra或其他數據(ju)庫存儲(chu)

- 主(zhu)要使(shi)用 Graphite-web 展示數(shu)據(ju)

性能特點

高(gao)寫入吞吐量、低延遲查(cha)詢,支持高(gao)效(xiao)的數據(ju)壓縮(suo)

高效的時間序列數(shu)(shu)據存儲,適合(he)高頻率數(shu)(shu)據收集

存儲性(xing)能(neng)較為有(you)限,適合(he)小(xiao)規(gui)模和低頻(pin)率的(de)數據存儲

查詢語言

InfluxQL(類似SQL)或(huo)Flux

PromQL(Prometheus Query Language)

使用(yong)簡單(dan)的查詢(xun)語(yu)言(通(tong)過Graphite-web展示)

數據存儲

時(shi)序數據專(zhuan)用(yong)存儲(chu)引(yin)擎(qing),支持壓縮和高效查(cha)詢(xun)

存(cun)儲(chu)為 TSDB 格式,支持自定義(yi)存(cun)儲(chu)后端

使用基(ji)于(yu) Whisper 的文件系統存儲(或者 Cassandra)

數據收集方式

推送或拉取(qu),支(zhi)持客戶端庫以(yi)及HTTP API

主要(yao)為拉取方式(shi),支持自定義的(de)抓取方式(shi)

推(tui)送模式(shi),使(shi)用(yong)Carbon收集數據(ju)

數據模型

時序數據(時間戳、測量、標簽、字段、值)

時序(xu)數據(ju)(時間戳、指標、標簽)

時(shi)序(xu)數據(時(shi)間戳(chuo)、指標、值)

擴展性

支持集(ji)群擴展(Enterprise版本),單實例(li)有一定(ding)限(xian)制

支(zhi)持水平擴(kuo)展和分布式(shi)架構,適合大規模(mo)數據存儲和查(cha)詢(xun)

擴展性有(you)限,基于(yu)單一節點(dian)或分布(bu)式(shi)的配置方式(shi)

報警與告警

內(nei)置告(gao)警機制(Kapacitor),支持定義復雜的告(gao)警規(gui)則

強大的告警(jing)功能,支持多種告警(jing)接(jie)收方式

通過(guo)第三方工具(如 Nagios、Alertmanager)實(shi)現告警(jing)功能

社區與支持

活躍的開源社區,有付費(fei)版本的支持

強大(da)的(de)開源社(she)區,有豐富的(de)文檔和支持(chi)

較(jiao)為成(cheng)熟(shu)的(de)社(she)區(qu),使用(yong)歷(li)史(shi)較(jiao)長,但社(she)區(qu)活躍度(du)相對(dui)較(jiao)低

應用場景

- IoT 數據監(jian)控

- 企(qi)業級時序(xu)數據分(fen)析(xi)

- 日志分析與度(du)量收集

- 容器和微服務監控

- 集群和(he)系統(tong)資源(yuan)監控

- 高(gao)頻數據收集和(he)報(bao)警

- 基礎設施監控

- 網絡性能監控

- 存儲和(he)服務器狀態監控

優點

- 高效存儲與查詢

- 豐富的(de)查(cha)詢(xun)語言(yan)(InfluxQL 和 Flux)

- 內置的(de)可視化和報警支持

- 強大的(de)自動發現與抓取機制

- 強大的查(cha)詢(xun)語(yu)言 PromQL

- 與 Grafana 深度集成

- 簡單易(yi)用,安裝配置容易(yi)

- 適用(yong)于較小規模的監控項目

缺點

- 大規模(mo)集群和高可用性(xing)配置相對復雜

- 依賴(lai)企業版本的某些高級功(gong)能

- 存儲層無(wu)內建高可用(yong)特性,主(zhu)要依賴于外部存儲

- 缺少內建的(de)可視化工具,Prometheus Web UI,僅適用基礎(chu)的(de)查詢和展示

- 可擴(kuo)展(zhan)性差,不適合大(da)規模部署

- 存儲性能不(bu)足,不(bu)能處理非常高頻的(de)數(shu)據

1、InfluxDB 是一個高效的(de)時序數(shu)據庫,適合于存儲大(da)規(gui)模時序數(shu)據,提供了強大(da)的(de)查詢語(yu)言(yan)和內置的(de)可視(shi)化工具。

2、Prometheus 適合(he)于動(dong)態環境(jing)和微(wei)服務架構,提供強大的(de)數據抓(zhua)取和報(bao)警能(neng)力(li),常與 Grafana 配合(he)使(shi)用來進行可視化展示(shi)。

3、Graphite 是一(yi)個(ge)較為成(cheng)熟的(de)監控(kong)工具,適合(he)(he)小規模的(de)時(shi)序數據存(cun)儲和展(zhan)示(shi),通常與 Grafana 配合(he)(he)使用來(lai)進行數據可視化。

三、Prometheus相關架構:

Prometheus 通(tong)過 Pushgateway 或 Job/exporters 的(de)(de)方(fang)式(shi),定期從被監控的(de)(de)服務中(zhong)拉取指標(biao)數(shu)據(ju)。這些服務通(tong)常通(tong)過 HTTP 暴露一個 /metrics 端點(dian),Prometheus 通(tong)過該端點(dian)收集指標(biao)數(shu)據(ju)并(bing)存(cun)儲在本地磁盤(pan)中(zhong)。用戶可以通(tong)過 PromQL 查(cha)詢存(cun)儲在 Prometheus 中(zhong)的(de)(de)時(shi)序數(shu)據(ju)。Prometheus 還可以根據(ju)設定的(de)(de)告(gao)警(jing)規則(ze),自動檢查(cha)采集的(de)(de)數(shu)據(ju),生成告(gao)警(jing)并(bing)觸發相(xiang)應操(cao)作。如果某個指標(biao)超出閾值或不符合特定條件,Prometheus 會發送告(gao)警(jing)到(dao) Alertmanager,進行處理(li)和轉(zhuan)發。

1、Prometheus Server:

Prometheus Server 是 Prometheus 的(de)核(he)心組件,負責從被監控的(de)目標(biao)(targets)收(shou)集(scrape)數據、存儲數據、并(bing)提(ti)供(gong)查詢和(he)告警功(gong)能。

2、Pushgateway:

Pushgateway 是 Prometheus 的一個組件,用(yong)于接(jie)收從臨時任務(wu)(如(ru)批處(chu)理任務(wu))推送(song)過來(lai)的指(zhi)標(biao)數據(ju)。與 Prometheus 通常(chang)的拉(la)取模式不同,Pushgateway 采用(yong)推送(song)(push)方式將數據(ju)發送(song)給 Prometheus。

由于Prometheus的拉取(pull)模(mo)式要(yao)求目標服務(wu)必須始終(zhong)在線并持續暴(bao)露指標接口(kou)。然而,一(yi)些服務(wu)可(ke)能只(zhi)存(cun)在一(yi)段很短的時間(例(li)如批處理作業、定時任務(wu)或(huo)一(yi)次性任務(wu)),在它們執行完(wan)后,服務(wu)就會終(zhong)止(zhi)并且不再提(ti)供 HTTP 服務(wu)。這(zhe)時候,Prometheus就無(wu)法(fa)拉取到數據(ju)。因此,當網絡情(qing)況無(wu)法(fa)直接滿足時,可(ke)以使(shi)用 pushgateway 來進行中轉,將此類數據(ju)主動push到pushgateway里面去,而 prometheus 采(cai)用pull方式拉取 pushgateway 中數據(ju)。

3、Job/Exporters:

Job,即標(biao)(biao)(biao)簽,通常是(shi)用來(lai)定義一(yi)組被監控(kong)目(mu)(mu)標(biao)(biao)(biao)的名(ming)稱和配(pei)置(zhi)。Job是(shi) Prometheus配(pei)置(zhi)文件(jian)(prometheus.yml)中(zhong)的一(yi)個(ge)重(zhong)要概念,每個(ge) Job對(dui)應(ying)一(yi)個(ge)或多個(ge)監控(kong)目(mu)(mu)標(biao)(biao)(biao)(Exporter),這(zhe)些目(mu)(mu)標(biao)(biao)(biao)會定期暴(bao)露(lu)其性能指標(biao)(biao)(biao),Prometheus通過拉取這(zhe)些指標(biao)(biao)(biao)來(lai)進行(xing)監控(kong)。

Exporter是一個(ge)暴露 Prometheus可抓取(qu)的指標數據的程序或(huo)服務(wu)(wu)。Exporter 通(tong)常負責從(cong)應用程序或(huo)系統收集(ji)性能指標,并將這些數據以HTTP服務(wu)(wu)的形式暴露給 Prometheus。

Exporter

備注

Node_Exporter

用于(yu)暴露系統級別的指標數據(如 CPU、內存、磁盤(pan)使用情況(kuang))

MySQL_Exporter

用于暴露數據庫指標

4、Metrics:

Metrics,即指標(biao),是 Prometheus 用來描(miao)述(shu)和衡量系(xi)統(tong)狀態或性能的數(shu)字數(shu)據載體,通常以時(shi)間序列的形式存儲(chu)。每個指標(biao)表示(shi)系(xi)統(tong)的某個度量值,比(bi)如(ru)請求數(shu)、內存使用量、響應時(shi)間等。

Metrics類型

定義

Counter

計數器類型的指標,值只(zhi)能遞增,用于記(ji)錄事件發生的(de)次(ci)數

Gauge

可以增加也可以減少的指標,通常用來記錄(lu)當(dang)前(qian)值(zhi)(如內存使用、溫度等)

Histogram

記錄觀察值的分布情(qing)況,通(tong)過將觀察值劃分為不同的桶進行計數

Summary

與 Histogram 類似,但可以預(yu)計(ji)算一些分位數(shu),如 50%、95% 等

Untyped

沒有明確類型的指標,適用于用戶自定義的特殊指標

5PromQL

PromQL 是 Prometheus 的查詢語言,用于(yu)從 Prometheus 中(zhong)存儲的時序數據中(zhong)查詢、分析和(he)操(cao)作(zuo)數據。通過(guo)PromQL可以(yi)根(gen)據需求對 Metrics數據進行過(guo)濾、聚(ju)合、轉換等操(cao)作(zuo)。

6、Alertmanager:

Alertmanager 是 Prometheus 的(de)組件(jian)之一,負責(ze)管理(li)、分發告(gao)(gao)警(jing)。它接收 Prometheus 生成的(de)告(gao)(gao)警(jing)信(xin)息,并根據(ju)配置將(jiang)告(gao)(gao)警(jing)通知發送(song)到用戶指定的(de)通知渠道(如郵(you)件(jian)、Slack、Webhook 等)。

四、Docker-Prometheus安裝:

1、Node Exporter:

用于從主機收(shou)集硬(ying)件(jian)和系統級別的(de)指標(biao)

# 拉取Node_Exporter鏡(jing)像:

docker pull prom/node-exporter

# 啟動容器:

docker run -d --name node-exporter \

-p 9100:9100 \

-v /proc:/host/proc:ro \

-v /sys:/host/sys:ro \

-v /:/rootfs:ro \

prom/node-exporter

# 備注:

1、-p 9100:9100

將(jiang)宿主機的 9100 端口映射到容(rong)器的 9100(node-exporter 默認)端口。node-exporter默認會(hui)在該端口上暴露(lu)監控指(zhi)標。

2、-v /proc:/host/proc:ro

掛(gua)載(zai)宿(su)主機的 /proc 目錄到容(rong)器中的 /host/proc。/proc 目錄包含了(le)操作系統內核(he)和進程的信(xin)息(xi),node-exporter 需(xu)要訪問這(zhe)些信(xin)息(xi)來收(shou)集系統級別的性能指標。掛(gua)載(zai)時使用了(le) ro(只(zhi)讀)權限,確(que)保容(rong)器無法(fa)修改宿(su)主機的文(wen)件。

3、-v /sys:/host/sys:ro

類似地,掛(gua)載宿主機的(de) /sys 目(mu)錄(lu)到容器中的(de) /host/sys。/sys 目(mu)錄(lu)包含(han)了與(yu)系統硬件相關(guan)的(de)信息,node-exporter 也需要這些信息來收集指(zhi)標。

4、-v /:/rootfs:ro

掛載宿主機的(de)(de)根文(wen)件系(xi)統到(dao)容器(qi)中的(de)(de) /rootfs。node-exporter 需要訪(fang)問宿主機的(de)(de)文(wen)件系(xi)統以收集一些額外的(de)(de)指標(如磁盤、文(wen)件系(xi)統的(de)(de)相關信息(xi))。同樣(yang)使用了只(zhi)讀權限(xian)。

# Metrics數(shu)據訪(fang)問:

2Pushgateway:

允許短期任(ren)務將其指(zhi)標推送到 Prometheus

# 拉取(qu)Pushgateway鏡像(xiang):

docker pull prom/pushgateway

# 自定義數據(ju)存儲文件夾:

/opt/install/data/pushgateway-data

# 修改文件夾權限(xian):

chmod 777 -R /opt/install/data/pushgateway-data

# 啟動容器:

docker run -d --name=pushgateway   \

-p 9091:9091   \

-v /opt/install/data/pushgateway-data:/pushgateway_data  \

prom/pushgateway

# Pushgateway管(guan)理訪問:

# PUSH推送(song)自定義測試Metric指(zhi)標數(shu)據(不指(zhi)定,默(mo)認(ren)untyped 類(lei)型):

echo "# TYPE <指(zhi)標> <Metric類型>\n<指(zhi)標{標簽(qian)}> <值>" | curl --data-binary @-

# 案例一

echo "example_metric 1" | curl --data-binary @- //localhost:9091/metrics/job/test_job

# 案例二

echo "example_metric{status=\"success\"} 1" | curl --data-binary @- //localhost:9091/metrics/job/test2_job

# 案例三

echo -e "# TYPE test_metric counter\ntest_metric 2" | curl --data-binary @- //localhost:9091/metrics/job/test3_job

# 清理指定Job數據:

curl -X DELETE

curl -X DELETE //localhost:9091/metrics/job/test_job

3、Alertmanager:

處(chu)理(li)并(bing)路由(you) Prometheus 發出的(de)告警通(tong)知(zhi)

# 拉取Alertmanager鏡像:

docker pull prom/alertmanager

# 自定義數據存儲文件夾:

/opt/install/data/alertmanager-data/config

/opt/install/data/alertmanager-data/template

# 修改文(wen)件夾權限:

chmod 777 -R /opt/install/data/alertmanager-data/config

chmod 777 -R /opt/install/data/alertmanager-data/template

# 編輯告(gao)警配置文件alertmanager.yml:

cat > /opt/install/data/alertmanager-data/config/alertmanager.yml << \EOF

# 全局配置

global:

  # 設置報警(jing)解(jie)決超時時間,單位(wei):分鐘

  resolve_timeout: 5m

  # 發件人郵(you)箱配置(zhi)

  smtp_from: 'xx@xx.com'

  # 郵箱(xiang)服務(wu)器的主機配置(zhi),smtp.qq.com,端口為 465 或 587

  smtp_smarthost: 'smtp.qq.com:465'

  # 郵箱賬戶名

  smtp_auth_username: 'xx'

  # 郵箱授權(quan)碼(ma)(不是(shi)密碼(ma))

  smtp_auth_password: '授權碼(ma)'

  # 是否啟(qi)用 TLS(此處不啟(qi)用)

  smtp_require_tls: false

  # SMTP 主機的 HELO 域名

  smtp_hello: 'qq.com'

 

# 告警模板配置

templates:

  - '/opt/install/data/alertmanager-data/template/email.tmpl'

 

# 抑制規則配置

# 當存在 severity 為(wei) critical 的告(gao)警時(shi),抑(yi)制 severity 為(wei) warning 的告(gao)警

# 源告警(jing)和目(mu)標告警(jing)必(bi)須(xu)在(zai) alertname、dev 和 instance 標簽(qian)上相等

inhibit_rules:

  - source_match:

    &nbsp; severity: 'critical'

    target_match:

      severity: 'warning'

    equal: ['alertname', 'dev', 'instance']

 

# 路由配置

route:

  # 根(gen)據告警(jing)名稱分組

  group_by: ['alertname']

 &nbsp;# 等待(dai)時(shi)間,用于(yu)等待(dai)同一組內的其他(ta)告警

  group_wait: 5s

  # 分組(zu)后發送告警(jing)的時(shi)間間隔

  group_interval: 5m

  # 發送(song)告警間(jian)隔(ge)時間(jian) s/m/h,如(ru)果指定時間(jian)內沒有修復,則重(zhong)新(xin)發送(song)告警

  repeat_interval: 1h

&nbsp; # 默認(ren)接收(shou)器,自定義接收(shou)器名default-receiver,用于處(chu)理沒(mei)有(you)匹配(pei)到其他(ta)路由(you)規則的告警

  receiver: 'default-receiver'

  routes:

  &nbsp; # 使用正(zheng)則表(biao)達式匹配 alarmClassify 標簽(qian)為 critical 的告警

    - match_re:

        alarmClassify: '^critical$'

      # 自(zi)定義(yi)critical-alerts 接收(shou)器名,接收(shou) critical 的告(gao)警(jing)

      receiver: 'critical-alerts'

    # 使(shi)用正則(ze)表(biao)達式(shi)匹(pi)配 alarmClassify 標(biao)簽為 warning 的告(gao)警

    - match_re:

&nbsp;       alarmClassify: '^warning$'

      # 自(zi)定義warning-alerts 接收(shou)器名,接收(shou) warning 的告警(jing)

      ;receiver: 'warning-alerts'

 

# 接收器配置

receivers:

  # 默(mo)認接收器

  - name: 'default-receiver'

    email_configs:

      # 默認接收(shou)器的收(shou)件人,多個(ge)人就以(yi) ',' 做分割

      - to: 'default-receiver@example.com'

        ;# 發(fa)送已(yi)解決的告警(jing)通知(zhi)

     ;   send_resolved: true

        # 接(jie)收郵件(jian)的標(biao)題

&nbsp;       headers: {Subject: "alertmanager默認告警郵(you)件"}

    # 嚴重告警接收器

  - name: 'critical-alerts'         

    email_configs:

     &nbsp;- to: 'critical-alerts@example.com'

     &nbsp;  send_resolved: true

  ;      # 接收郵件的標題

&nbsp;&nbsp;      headers: {Subject: "alertmanager嚴(yan)重告警郵(you)件"}  

    # 警告(gao)告(gao)警接收(shou)器

  - name: 'warning-alerts'      &nbsp;   &nbsp;     

    email_configs:

      - to: 'warning-alerts@example.com'

 ;       send_resolved: true

      &nbsp; # 接(jie)收郵件的標題

       &nbsp;headers: {Subject: "alertmanager警(jing)告告警(jing)郵件(jian)"}

EOF

# 編輯(ji)告警模板配置文件email.tmpl:

cat > /opt/install/data/alertmanager-data/template/email.tmpl << \EOF

{{ define "email.html" }}

<table border="1">

    <tr>

  &nbsp;     <td>報警項</td>

  &nbsp;     <td>實例(li)</td>

        <td>報警閥值</td>

&nbsp;    &nbsp;  <td>開始時間(jian)</td>

        &lt;td>告警信息</td&gt;

    </tr>

    {{ range $i, $alert := .Alerts }}

    <tr>

         <td>{{ index $alert.Labels "alertname" }}</td>

      &nbsp;  <td>{{ index $alert.Labels "instance" }}</td>

  &nbsp;    &nbsp; <td>{{ index $alert.Annotations "value" }}</td>

       &nbsp; <td>{{ $alert.StartsAt }}</td>

 &nbsp;       <td>{{ index $alert.Annotations "description" }}</td>

     </tr>

   {{ end }}

</table>

{{ end }}   

EOF

# 啟動容器:

docker run -d --name=alertmanager   \

-p 9093:9093    \

-v /etc/localtime:/etc/localtime:ro \

-v /opt/install/data/alertmanager-data/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml  \

-v /opt/install/data/alertmanager-data/template:/etc/alertmanager/template    \

prom/alertmanager

# Alertmanager管(guan)理(li)訪問:

 

4、Prometheus Server:

核心組件,負責采集、存儲指(zhi)標數據,并生成告警

# 拉取Prometheus鏡像:

docker pull prom/prometheus

# 自(zi)定(ding)義數據存儲文(wen)件夾:

/opt/install/data/prometheus-data

# 修(xiu)改文件(jian)夾(jia)權限:

chmod 777 -R /opt/install/data/prometheus-data

# 編輯(ji)prometheus.yml配置信(xin)息:

cat > /opt/install/data/prometheus-data/prometheus.yml << \EOF

# prometheus.yml

global:

  # 設(she)置(zhi)抓取目標間隔為(wei) 60 秒

  scrape_interval: 60s  

  # 設置評估規則(ze)(如報警規則(ze)等)間隔為 60 秒    

  evaluation_interval: 60s

 

# job_name: 自定(ding)義抓取目標(biao)的名(ming)稱

scrape_configs:

  # 配置 Prometheus 作(zuo)為數據源(yuan)

  - job_name: 'prometheus'

    static_configs:

&nbsp;     # Prometheus 本身

      - targets: ['localhost:9090']

 

  # 配置 Node Exporter

  - job_name: 'node_exporter'

    static_configs:

      # 指(zhi)定(ding) Node Exporter 的目標(可以(yi)是(shi)多(duo)個(ge)節點(dian)),修改localhost

      - targets: ['localhost:9100']

 

  # 配(pei)置 Pushgateway

  - job_name: 'pushgateway'

    static_configs:

      # Pushgateway 的(de)目(mu)標,修改localhost

    &nbsp; - targets: ['localhost:9091']

 

  # 配(pei)置 Alertmanager

  - job_name: 'alertmanager'

    static_configs:

      # Alertmanager 的目(mu)標,修(xiu)改localhost

  &nbsp;   - targets: ['localhost:9093']

EOF

# 啟動容器:

docker run  -d --name prometheus   \

-p 9090:9090    \

-v /opt/install/data/prometheus-data/prometheus.yml:/etc/prometheus/prometheus.yml    \

prom/prometheus

# Prometheus管理(li)訪問:

查看啟動信息:

查詢監控指標數據:

Metric指標{標簽}

五、Grafana-Prometheus可(ke)視化配置:

1、Prometheus數據源導入:

2、添加新的儀表板:

六、PromQL數(shu)據查詢:

Prometheus 通過指(zhi)標(biao)名(ming)稱(metrics name)以(yi)及對(dui)應的(de)一組標(biao)簽(qian)(labelset)唯一定義一條時間序(xu)列。指(zhi)標(biao)名(ming)稱反映了監控樣(yang)本的(de)基(ji)本標(biao)識(shi),而 label 則在這個基(ji)本特(te)(te)征(zheng)上為采集到的(de)數據提供了多種特(te)(te)征(zheng)維(wei)度。用戶可以(yi)基(ji)于這些特(te)(te)征(zheng)維(wei)度過濾(lv),聚合,統計從而產生新(xin)的(de)計算后的(de)一條時間序(xu)列。

PromQL是(shi) Prometheus內(nei)置的(de)數(shu)據(ju)(ju)查(cha)(cha)詢(xun)語言,用(yong)于從Prometheus中存儲(chu)的(de)時序(xu)數(shu)據(ju)(ju)中查(cha)(cha)詢(xun)、分析(xi)和操(cao)作數(shu)據(ju)(ju)。通(tong)過(guo)PromQL可以(yi)根據(ju)(ju)需求對 Metrics指標數(shu)據(ju)(ju)進行過(guo)濾(lv)、聚(ju)合(he)、轉(zhuan)換(huan)等(deng)操(cao)作。

1、匹配方式:

功能

示例

說明

完全匹配模式

label=value

根(gen)據(ju)標簽匹(pi)配滿(man)足表達(da)式的時間序列

label!=value

根(gen)據標簽(qian)匹(pi)配排除時間(jian)序列

正則匹配模式

label=~value1|value2

根據標簽匹(pi)配滿足value1或(huo)value2的時間序列(lie)

label!~value1|value2

根(gen)據標(biao)簽(qian)匹配排(pai)除滿足value1或(huo)value2的時間序列

2、基礎查詢:

功能

示例

說明

查詢單個指標

up

表(biao)示(shi)(shi)實(shi)例(li)是否在(zai)正常運行(1表(biao)示(shi)(shi)正常,0表(biao)示(shi)(shi)異常)

查詢指(zhi)定實例的指(zhi)標值

up{instance="localhost:9090"}

表(biao)示(shi)指定實例是否在正常(chang)運行(1表(biao)示(shi)正常(chang),0表(biao)示(shi)異常(chang))

獲取時間序列

指標名

獲取指(zhi)定指(zhi)標的所有時間(jian)序列數據(ju)

使用標簽篩選

指標{標簽(qian)=”值”}

獲取帶有指定(ding)標簽值的(de)時間序列數據

3、聚合操作:

功能

示例

說明

求和

sum(指標)

對指定指標進行求和

計算平均值

avg(指標)

對指(zhi)定指(zhi)標計算平均值

計算最大值

max(指標)

獲取指(zhi)定指(zhi)標的最大值

計算最小值

min(指標)

獲取(qu)指定指標的最(zui)小值

計數

count(指標)

計(ji)算指(zhi)(zhi)定指(zhi)(zhi)標的時(shi)間序列數目(mu)

按標簽聚合

sum(指標) by (標簽code)

按(an)照指(zhi)定code標簽(qian)進行(xing)聚合,計算每個(ge)job 的總(zong)請求數。

排除某些標簽

sum(指標(biao)) without (標(biao)簽code)

對指(zhi)標按標簽聚合,但排除指(zhi)定code標簽。

4、時間范圍操作:

功能

示例

說明

最近值

指標[5m]

獲取過去(qu) 5 分(fen)鐘(zhong)內(nei)的(de)時間序列(lie)數據

過去平均值

avg_over_time(指標[1h])

計算過去 1 小時(shi)的平均值

過去最大值

max_over_time(指(zhi)標(biao)[1d])

計算(suan)過去 1 天的(de)最大值(zhi)

過去最小值

min_over_time(指標[1d])

計算過去 1 天的最小值

5、數學和函數操作:

功能

示例

說明

加法

指標 + 10

對指(zhi)定(ding)指(zhi)標加上一個常數

乘法

指標 * 2

對(dui)指定指標乘以一個(ge)常數

取對數

log2(指標)

對指定指標取對數

6、變化率計算:

功能

示例

說明

增量計算

rate(指標[5m])

計算(suan)過去 5 分鐘內(nei)指(zhi)標的(de)增(zeng)量(liang)

速率計算

irate(指標[5m])

計算每秒的增量速率

變化率

increase(指標[1h])

計算過去(qu) 1 小時(shi)內的(de)指標總變化量

7、條件判斷:

功能

示例

說明

判斷條件

指標 > 100

過濾出(chu)指標值大于 100 的時間序列數(shu)據

和條件結合

指標{標簽="值"} > 100

過濾出指定指標(biao)且值大于 100 的(de)時間序列數據(ju)

8、排序與限制:

功能

示例

說明

排序

topk(5, 指標)

獲取值(zhi)前 5 名的時(shi)間序列

排序

bottomk(5, 指標(biao))

獲取(qu)值后 5 名的時間序(xu)列(lie)

七、SpringBoot-Prometheus監(jian)控埋(mai)點:

Micrometer 是 Spring Boot 的(de)度量系統(tong)(tong),它用(yong)于收(shou)集應(ying)用(yong)程序運(yun)行時(shi)的(de)各種指標數據,并(bing)將這些數據發(fa)送(song)(song)到(dao)外部監(jian)控系統(tong)(tong)(例如 Prometheus、Graphite、Datadog 等(deng))。它為Spring應(ying)用(yong)提(ti)供了(le)統(tong)(tong)一的(de)API來定義(yi)、收(shou)集和發(fa)送(song)(song)這些指標。

Spring Boot 中的(de)(de) spring-boot-starter-actuator 依賴已(yi)經集成了對 Micrometer 的(de)(de)支持,通過暴(bao)露 Prometheus 監控端(duan)點(如(ru) /actuator/prometheus),使得(de)Spring Boot應用作(zuo)為(wei) Prometheus 的(de)(de)客戶(hu)端(duan),允許 Prometheus(作(zuo)為(wei)服務端(duan))定期(qi)抓取(qu)該(gai)端(duan)點提供(gong)的(de)(de) Micrometer 指標(biao)數據,并將其存儲在時間序列(lie)數據庫中,最終(zhong)通過 Grafana 從 Prometheus 獲取(qu)數據并進(jin)行可視化展示。

1、添加依賴:

<!--SpringBoot監控系統-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--用于導出prometheus系統類型的指標數據-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

2、YML配置:

# actuator服務監控端點配置
management:
  endpoints.web.exposure.include: "*"   # actuator 服務監控 應包含的端點ID或所有的“*”, 默認只開放了info、health
  endpoint:
    health.show-details: ALWAYS         # 健康信息顯示詳情(qing).
    shutdown.enabled: false             # 允許應用以優(you)雅(ya)的方式關閉(默認情況下(xia)不啟用)
  # Actuator端(duan)點將通(tong)過(guo) http://localhost:18081/actuator/prometheus 訪問Metrics信息
  server:
    port: 18081

3、指標配置管理:

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @description: 普羅米修斯監控配置
 */
@Component
public class PromConfig {

    /**
     * CollectorRegistry容器:負責(ze)收集和(he)管(guan)理所(suo)有注冊到其中的指標
     */
    @Autowired
    private CollectorRegistry collectorRegistry;

    /**
     * Metrics類型(xing): Counter
     * 設置(zhi)指標名稱: http_requests_total
     * 設置(zhi)添(tian)加(jia)兩個標簽(qian):functionName、status
     * 設置(zhi)指標描(miao)述性(xing)幫助信息(xi):Counter測試監(jian)控
     * @return
     */
    @Bean(name = "prometheusMetricsCounter")
    public Counter prometheusMetricsCounter(){
        return Counter.build()
                .name("http_requests_total")
                .labelNames("functionName","status")
                .help("Counter測試監控")
                .register(collectorRegistry);
    }

}

4、監控埋點:

    @Resource(name = "prometheusMetricsCounter")
    private Counter prometheusMetricsCounter;

    @PostMapping(value = "/demo")
    public String monitorPointTest() {
        String status = "success";
        if("success".equals(status)) {
            //監控埋點:inc()方法增加(jia) Counter 指(zhi)標(biao)的值(zhi)
            prometheusMetricsCounter.labels("monitorPointTest", status).inc();
        }
        return status;
    }

5、Prometheus-Grafana管理:

(1)、查看Actuator端點的Metrics信息:

(2)、配置Prometheus抓取Spring Boot應(ying)用的指標:

Prometheus.yml配置文(wen)件聲明:

scrape_configs:

  # 配置 SpringBoot監控埋點

  - job_name: 'springboot_actuator_to_prometheus_demo'

    metrics_path: '/actuator/prometheus'

    static_configs:

      # springboot監控的目標

      - targets: ['localhost:18081']

(3)、Prometheus查(cha)看http_requests_total指標信息:

(4)、Grafana可視(shi)化管理:

 

posted on 2025-01-14 23:08  愛文(Iven)  閱讀(698)  評論(0)    收藏  舉報

導航