簡(jiǎn)介:?
Prometheus是一個(gè)開源的系統(tǒng)監(jiān)控和告警系統(tǒng),由Google的BorgMon監(jiān)控系統(tǒng)發(fā)展而來。它主要用于監(jiān)控和度量各種時(shí)間序列數(shù)據(jù),比如系統(tǒng)性能、網(wǎng)絡(luò)延遲、應(yīng)用程序錯(cuò)誤等。Prometheus通過采集監(jiān)控?cái)?shù)據(jù)并存儲(chǔ)在時(shí)間序列數(shù)據(jù)庫中,然后使用PromQL查詢語言進(jìn)行數(shù)據(jù)分析和可視化。
以下是Prometheus基本使用的一些技術(shù):
- 安裝和配置:了解如何安裝和配置Prometheus,包括Prometheus Server、Exporters和Pushgateway等組件。
- 數(shù)據(jù)采集:學(xué)習(xí)如何使用Prometheus采集各種監(jiān)控?cái)?shù)據(jù),包括系統(tǒng)性能、網(wǎng)絡(luò)延遲、應(yīng)用程序錯(cuò)誤等。
- 數(shù)據(jù)存儲(chǔ):了解Prometheus如何將采集的監(jiān)控?cái)?shù)據(jù)存儲(chǔ)在時(shí)間序列數(shù)據(jù)庫中,以及如何使用本地磁盤、遠(yuǎn)程存儲(chǔ)等不同的存儲(chǔ)后端。
- 數(shù)據(jù)查詢和分析:學(xué)習(xí)如何使用PromQL查詢語言對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行查詢和分析,以及如何通過可視化工具進(jìn)行數(shù)據(jù)展示。
- 告警規(guī)則:學(xué)習(xí)如何創(chuàng)建和管理告警規(guī)則,以及如何將告警發(fā)送給不同的接收器,比如電子郵件、Slack、PagerDuty等。
- 數(shù)據(jù)可視化:了解如何使用Prometheus提供的儀表盤界面展示監(jiān)控?cái)?shù)據(jù)和告警狀態(tài),以及如何通過拖放和自定義配置來創(chuàng)建自己的儀表盤。
- 服務(wù)發(fā)現(xiàn):學(xué)習(xí)如何使用各種服務(wù)發(fā)現(xiàn)機(jī)制,比如Kubernetes、EC2、GCE等,以自動(dòng)發(fā)現(xiàn)和監(jiān)控服務(wù)的運(yùn)行狀態(tài)。
- 安全和權(quán)限控制:了解Prometheus如何提供安全和權(quán)限控制的機(jī)制,如身份驗(yàn)證、授權(quán)等,以確保數(shù)據(jù)的訪問安全。
基本使用以及認(rèn)識(shí)配置:
安裝和配置:了解如何安裝和配置Prometheus,包括Prometheus Server、Exporters和Pushgateway等組件。
Prometheus Server
????????Prometheus Server是Prometheus組件中的核心部分,負(fù)責(zé)實(shí)現(xiàn)對(duì)監(jiān)控?cái)?shù)據(jù)的獲取、存儲(chǔ)以及查詢。
????????首先,Prometheus Server可以通過靜態(tài)配置管理監(jiān)控目標(biāo),也可以配合使用Service Discovery的方式動(dòng)態(tài)管理監(jiān)控目標(biāo),并從這些監(jiān)控目標(biāo)中獲取數(shù)據(jù)。這意味著Prometheus Server可以根據(jù)預(yù)設(shè)的規(guī)則發(fā)現(xiàn)并監(jiān)控各種服務(wù)和目標(biāo),無論是靜態(tài)配置的目標(biāo)還是動(dòng)態(tài)發(fā)現(xiàn)的目標(biāo)。
????????其次,Prometheus Server需要對(duì)采集到的數(shù)據(jù)進(jìn)行存儲(chǔ)。Prometheus Server本身就是一個(gè)時(shí)序數(shù)據(jù)庫,它將采集到的監(jiān)控?cái)?shù)據(jù)按照時(shí)間序列的方式存儲(chǔ)在本地磁盤當(dāng)中。這種存儲(chǔ)方式使得Prometheus Server可以有效地保存大量的時(shí)間序列數(shù)據(jù),并且可以在后續(xù)進(jìn)行快速的數(shù)據(jù)查詢和分析。
????????最后,Prometheus Server提供了自定義的PromQL語言,用戶可以使用PromQL實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢以及分析。同時(shí),Prometheus Server還提供了HTTP API,用戶可以使用這些API通過編程方式查詢數(shù)據(jù)。另外,Prometheus Server的聯(lián)邦集群能力可以使其從其他的Prometheus Server實(shí)例中獲取數(shù)據(jù),從而實(shí)現(xiàn)監(jiān)控?cái)?shù)據(jù)的共享和統(tǒng)一管理。
????????總之,Prometheus Server是Prometheus生態(tài)圈中的核心組件,它負(fù)責(zé)采集、存儲(chǔ)和查詢監(jiān)控?cái)?shù)據(jù),為用戶提供了一個(gè)全面和實(shí)時(shí)的監(jiān)控解決方案
Exporters
????????Exporters是Prometheus中的一個(gè)組件,負(fù)責(zé)將特定應(yīng)用程序或服務(wù)的監(jiān)控?cái)?shù)據(jù)暴露給Prometheus。Exporters可以將應(yīng)用程序的監(jiān)控?cái)?shù)據(jù)轉(zhuǎn)換為Prometheus能夠識(shí)別的格式,并通過HTTP或其他方式將數(shù)據(jù)發(fā)送給Prometheus。
????????Exporters的主要作用是擴(kuò)展Prometheus的監(jiān)控能力,使其能夠監(jiān)控到更多類型的應(yīng)用程序和服務(wù)。由于不同類型的應(yīng)用程序和服務(wù)的監(jiān)控?cái)?shù)據(jù)格式可能不同,因此需要不同的Exporters來實(shí)現(xiàn)對(duì)它們的監(jiān)控。
????????Prometheus的生態(tài)系統(tǒng)提供了許多常見的Exporters,比如Node Exporter用于監(jiān)控系統(tǒng)性能,Redis Exporter用于監(jiān)控Redis數(shù)據(jù)庫,MySQL Exporter用于監(jiān)控MySQL數(shù)據(jù)庫等。用戶可以根據(jù)需要選擇合適的Exporters來擴(kuò)展Prometheus的監(jiān)控能力。
????????除了使用現(xiàn)有的Exporters,用戶還可以根據(jù)需要自定義自己的Exporters。自定義的Exporters可以根據(jù)應(yīng)用程序的特定需求來實(shí)現(xiàn)對(duì)監(jiān)控?cái)?shù)據(jù)的采集和轉(zhuǎn)換。
????????總之,Exporters是Prometheus中非常重要的組件,它們擴(kuò)展了Prometheus的監(jiān)控能力,使其能夠監(jiān)控更多類型的應(yīng)用程序和服務(wù)。用戶可以根據(jù)需要選擇使用現(xiàn)有的Exporters,或者自定義自己的Exporters來實(shí)現(xiàn)對(duì)特定應(yīng)用程序的監(jiān)控。
? ? ? ? 本專欄中會(huì)更新部署Exporters的方式方法。
Pushgateway
????????Pushgateway是Prometheus的一種組件,用于接收來自短期作業(yè)的指標(biāo)數(shù)據(jù)。
????????由于Prometheus主要通過pull模式獲取監(jiān)控?cái)?shù)據(jù),但是某些短時(shí)作業(yè)可能不支持輪詢,或者因?yàn)榫W(wǎng)絡(luò)原因無法被Prometheus直接拉取數(shù)據(jù),這時(shí)就可以使用Pushgateway。用戶可以通過編寫自定義的腳本將需要監(jiān)控的數(shù)據(jù)發(fā)送給Pushgateway,然后Pushgateway再將數(shù)據(jù)推送給對(duì)應(yīng)的Prometheus服務(wù)。
????????Pushgateway可以單獨(dú)運(yùn)行在任何節(jié)點(diǎn)上,不需要運(yùn)行在被監(jiān)控的客戶端。它可以將接收到的監(jiān)控?cái)?shù)據(jù)存儲(chǔ)在本地磁盤中,并且支持自定義的時(shí)間序列存儲(chǔ)方式。同時(shí),Pushgateway還提供了HTTP API,用戶可以使用這些API通過編程方式將數(shù)據(jù)推送到Pushgateway中。
????????總之,Pushgateway是Prometheus中一個(gè)重要的組件,它主要用于接收來自短期作業(yè)的指標(biāo)數(shù)據(jù),解決了Prometheus無法直接獲取這些數(shù)據(jù)的問題。
了解配置文件書寫:
要根據(jù)我們現(xiàn)實(shí)的配置文件來進(jìn)行定制化的書寫
要注意的是在docker中使用這些配置的時(shí)候,最好還是掛載數(shù)據(jù)卷的形式來掛載出來。
Prometheus的配置文件通常包含以下幾種類型:
-
rule_files
:規(guī)則文件,用于配置告警規(guī)則和數(shù)據(jù)聚合配置。 -
scrape_configs
:采集配置,用于指定要采集的目標(biāo)列表和采集規(guī)則。 -
static_configs
:靜態(tài)配置,用于指定要采集的目標(biāo)列表。 -
global
:全局配置,包含全局默認(rèn)配置,如抓取監(jiān)控?cái)?shù)據(jù)的間隔、抓取業(yè)務(wù)數(shù)據(jù)接口的超時(shí)時(shí)間、告警規(guī)則執(zhí)行周期等。 -
alerting
:告警配置,用于配置告警發(fā)送到的Alertmanager的地址。 -
remote_write
?和?remote_read
:遠(yuǎn)程寫入和讀取配置,用于將數(shù)據(jù)投遞到遠(yuǎn)程地址或者從遠(yuǎn)程地址讀取數(shù)據(jù)。
上述的配置文件都是在prometheus.yml中去進(jìn)行書寫的。
下面分別介紹一下這些配置文件的作用:
-
rule_files
:該配置文件用于指定告警規(guī)則文件的位置。告警規(guī)則文件包含用于觸發(fā)告警的條件和操作。這些規(guī)則文件可以基于聚合的數(shù)據(jù)進(jìn)行定義,以便進(jìn)行更復(fù)雜的告警邏輯。 -
scrape_configs
:該配置文件用于指定要采集的目標(biāo)列表和采集規(guī)則。它包含每個(gè)目標(biāo)的服務(wù)地址、端口、請(qǐng)求超時(shí)等信息,以及如何從目標(biāo)中抓取數(shù)據(jù)和數(shù)據(jù)處理規(guī)則等。 -
static_configs
:該配置文件是靜態(tài)配置,用于手動(dòng)指定要采集的目標(biāo)列表。與scrape_configs
不同,這里的配置不能動(dòng)態(tài)添加或刪除目標(biāo),因此適用于穩(wěn)定的環(huán)境。 -
global
:該配置文件包含全局默認(rèn)配置,如抓取監(jiān)控?cái)?shù)據(jù)的間隔、抓取業(yè)務(wù)數(shù)據(jù)接口的超時(shí)時(shí)間、告警規(guī)則執(zhí)行周期等。這些配置會(huì)影響整個(gè)Prometheus系統(tǒng)的運(yùn)行方式。 -
alerting
:該配置文件用于指定告警發(fā)送到的Alertmanager的地址。Alertmanager是一個(gè)獨(dú)立的組件,用于處理和發(fā)送告警信息。通過配置該文件,Prometheus可以將告警信息發(fā)送給Alertmanager進(jìn)行處理。 -
remote_write
?和?remote_read
:這兩個(gè)配置文件用于將數(shù)據(jù)投遞到遠(yuǎn)程地址或者從遠(yuǎn)程地址讀取數(shù)據(jù)。這使得Prometheus可以與其他系統(tǒng)進(jìn)行集成,實(shí)現(xiàn)更強(qiáng)大的數(shù)據(jù)分析和處理能力。例如,可以將采集到的監(jiān)控?cái)?shù)據(jù)遠(yuǎn)程寫入到其他的存儲(chǔ)系統(tǒng),或者從遠(yuǎn)程地址讀取數(shù)據(jù)進(jìn)行進(jìn)一步的分析和處理。
需要注意的是,Prometheus的配置文件通常需要在使用前進(jìn)行適當(dāng)?shù)男薷暮驼{(diào)整,以滿足特定環(huán)境和需求的要求。
配置文件基本案例
rule_files:
rule_files用于指定告警規(guī)則文件的位置。這些規(guī)則文件包含用于觸發(fā)告警的條件和操作。例如,可以基于聚合的數(shù)據(jù)進(jìn)行定義,以便進(jìn)行更復(fù)雜的告警邏輯。
rule_files:
- "first_rules.yml"
- "second_rules.yml"
上述配置指定了兩個(gè)規(guī)則文件,分別是"first_rules.yml"和"second_rules.yml"。Prometheus會(huì)加載這些規(guī)則文件并應(yīng)用其中的告警規(guī)則。
具體案例:
當(dāng)提到?rule_files
?時(shí),是指在使用某個(gè)特定系統(tǒng)或應(yīng)用程序時(shí),用于定義告警規(guī)則的文件。這些文件通常使用特定的格式和語法,以便根據(jù)條件觸發(fā)告警。
以下是一個(gè)示例?first_rules.yml
?文件的內(nèi)容,其中包含一個(gè)告警規(guī)則的示例:
# first_rules.yml
rules:
- name: "Example Rule"
conditions:
- metric: "CPU Usage"
operator: "<"
threshold: 80
actions:
- email: "example@example.com"
subject: "High CPU Usage Alert"
message: "The CPU usage has exceeded the threshold of 80%."
在上述示例中,規(guī)則文件包含一個(gè)名為 "Example Rule" 的規(guī)則。該規(guī)則定義了一個(gè)條件,該條件監(jiān)視 "CPU Usage" 指標(biāo),并使用 "<" 運(yùn)算符檢查是否小于閾值 80。如果條件滿足,則執(zhí)行相應(yīng)的操作。在此示例中,操作包括發(fā)送電子郵件給指定的電子郵件地址,主題為 "High CPU Usage Alert",消息包含有關(guān)告警的詳細(xì)信息。
請(qǐng)注意,具體的規(guī)則文件格式和語法可能因使用的系統(tǒng)或應(yīng)用程序而有所不同。上述示例僅用于說明目的,并可能需要根據(jù)所使用的特定工具進(jìn)行調(diào)整。
scrape_configs:
方式1使用配置書寫配置文件的方式來發(fā)現(xiàn)服務(wù)等:
scrape_configs用于指定要采集的目標(biāo)列表和采集規(guī)則。它包含每個(gè)目標(biāo)的服務(wù)地址、端口、請(qǐng)求超時(shí)等信息,以及如何從目標(biāo)中抓取數(shù)據(jù)和數(shù)據(jù)處理規(guī)則等。
scrape_configs:
- job_name: 'example_app'
scrape_interval: 5s
static_configs:
- targets: ['app1.example.com:8080', 'app2.example.com:8080']
上述配置定義了一個(gè)名為"example_app"的采集任務(wù),使用靜態(tài)配置指定了兩個(gè)目標(biāo)服務(wù)地址,分別為"app1.example.com:8080"和"app2.example.com:8080"。同時(shí),設(shè)置了抓取間隔為5秒。
方式2使用額外的配置文件來發(fā)現(xiàn)服務(wù):
scrape_configs:
- job_name: "服務(wù)發(fā)現(xiàn)"
file_sd_configs:
- files:
- /prometheus/ClientAll/*.json # 用json格式文件方式發(fā)現(xiàn)服務(wù),下面的是用yaml格式文件方式,都可以
refresh_interval: 10m
- files:
- /prometheus/ClientAll/*.yaml # 用yaml格式文件方式發(fā)現(xiàn)服務(wù)
refresh_interval: 10m
?配置文件解讀:
這個(gè)配置文件是一個(gè)Prometheus的配置文件片段,用于配置服務(wù)發(fā)現(xiàn)(Service Discovery)。服務(wù)發(fā)現(xiàn)是一種自動(dòng)檢測(cè)和跟蹤系統(tǒng)中的服務(wù)及其關(guān)系的方法,這樣Prometheus就可以自動(dòng)發(fā)現(xiàn)并監(jiān)控這些服務(wù)。
在配置文件中,scrape_configs
是一個(gè)數(shù)組,其中包含一個(gè)或多個(gè)配置項(xiàng)。每個(gè)配置項(xiàng)都是一個(gè)字典,包含了一些鍵值對(duì)來定義一個(gè)特定的服務(wù)發(fā)現(xiàn)配置。
在這個(gè)例子中,有兩個(gè)配置項(xiàng):
-
job_name: "服務(wù)發(fā)現(xiàn)"
?- 這個(gè)配置項(xiàng)定義了監(jiān)控任務(wù)的名稱為"服務(wù)發(fā)現(xiàn)"。 -
file_sd_configs
?- 這個(gè)鍵對(duì)應(yīng)的值是一個(gè)數(shù)組,其中包含兩個(gè)字典,每個(gè)字典都定義了一種不同的服務(wù)發(fā)現(xiàn)方式。
a. 第一個(gè)字典:
* `files` - 這個(gè)鍵對(duì)應(yīng)的值是一個(gè)列表,其中包含一個(gè)文件路徑`/prometheus/ClientAll/*.json`。這表示Prometheus將從該路徑下查找所有滿足正則表達(dá)式`*.json`的JSON文件。這些文件通常包含了關(guān)于服務(wù)的元數(shù)據(jù)和配置信息。
* `refresh_interval` - 這個(gè)鍵對(duì)應(yīng)的值是一個(gè)字符串`10m`,表示每隔10分鐘刷新一次服務(wù)發(fā)現(xiàn)配置。
* 總的來說,這個(gè)配置告訴Prometheus從指定的路徑下讀取JSON文件,然后根據(jù)這些文件的內(nèi)容來自動(dòng)發(fā)現(xiàn)并監(jiān)控服務(wù),并且每隔10分鐘刷新一次服務(wù)發(fā)現(xiàn)配置。
b. 第二個(gè)字典:
* `files` - 這個(gè)鍵對(duì)應(yīng)的值是一個(gè)列表,其中包含一個(gè)文件路徑`/prometheus/ClientAll/*.yaml`。這表示Prometheus將從該路徑下查找所有滿足正則表達(dá)式`*.yaml`的YAML文件。這些文件通常也包含了關(guān)于服務(wù)的元數(shù)據(jù)和配置信息。
* `refresh_interval` - 這個(gè)鍵對(duì)應(yīng)的值也是`10m`,表示每隔10分鐘刷新一次服務(wù)發(fā)現(xiàn)配置。
* 總的來說,這個(gè)配置告訴Prometheus從指定的路徑下讀取YAML文件,然后根據(jù)這些文件的內(nèi)容來自動(dòng)發(fā)現(xiàn)并監(jiān)控服務(wù),并且每隔10分鐘刷新一次服務(wù)發(fā)現(xiàn)配置。
通過這樣的配置,Prometheus可以根據(jù)不同的文件格式(JSON或YAML)和服務(wù)描述信息自動(dòng)發(fā)現(xiàn)并監(jiān)控服務(wù)。這對(duì)于動(dòng)態(tài)環(huán)境或需要自動(dòng)擴(kuò)展的服務(wù)非常有用,因?yàn)楫?dāng)服務(wù)發(fā)生變化時(shí),Prometheus可以自動(dòng)更新其監(jiān)控配置并開始監(jiān)控新的服務(wù)
static_configs:
static_configs是靜態(tài)配置,用于手動(dòng)指定要采集的目標(biāo)列表。與scrape_configs不同,這里的配置不能動(dòng)態(tài)添加或刪除目標(biāo),因此適用于穩(wěn)定的環(huán)境。
static_configs:
- targets: ['target1.example.com:8080']
上述配置手動(dòng)指定了一個(gè)目標(biāo)服務(wù)地址為"target1.example.com:8080",不能動(dòng)態(tài)添加或刪除目標(biāo)。
global:
global包含全局默認(rèn)配置,如抓取監(jiān)控?cái)?shù)據(jù)的間隔、抓取業(yè)務(wù)數(shù)據(jù)接口的超時(shí)時(shí)間、告警規(guī)則執(zhí)行周期等。這些配置會(huì)影響整個(gè)Prometheus系統(tǒng)的運(yùn)行方式。
global:
scrape_interval: 10s
evaluation_interval: 10s
上述配置設(shè)置了全局的抓取間隔為10秒,告警規(guī)則執(zhí)行周期也為10秒。
alerting:
在使用這個(gè)的時(shí)候要提前準(zhǔn)備好并安裝好?alertmanager這個(gè)組件
假裝有連接
alerting用于指定告警發(fā)送到的Alertmanager的地址。Alertmanager是一個(gè)獨(dú)立的組件,用于處理和發(fā)送告警信息。通過配置該文件,Prometheus可以將告警信息發(fā)送給Alertmanager進(jìn)行處理。
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager1.example.com:9093']
上述配置指定了告警發(fā)送到的Alertmanager地址為"alertmanager1.example.com:9093"。
看到這里有同志會(huì)出現(xiàn)疑惑了?
我使用的是Prometheus+Grafana那么到底我使用誰來給我發(fā)送告警呢?
我解讀一下子
在這兩個(gè)組合中的Grafana是一個(gè)可視化平臺(tái),是沒有發(fā)送預(yù)警的能力的所以,發(fā)送告警的只能是Prometheus。
Alertmanager是一個(gè)獨(dú)立的組件,用于處理和發(fā)送告警信息。在Prometheus中,Alertmanager被用于接收Prometheus發(fā)送的告警信息,然后對(duì)這些信息進(jìn)行處理,例如將告警信息路由到不同的接收者、對(duì)告警進(jìn)行靜默或抑制等操作,最后將告警信息發(fā)送給接收者。
在配置文件中,alerting
部分用于指定告警發(fā)送到的Alertmanager的地址。上述配置中的alerting: alertmanagers: - static_configs: - targets: ['alertmanager1.example.com:9093']
指定了告警發(fā)送到的Alertmanager地址為"alertmanager1.example.com:9093"。
在這個(gè)配置中,alertmanagers
是一個(gè)列表,其中每個(gè)元素都包含了一個(gè)static_configs
部分。static_configs
是一個(gè)字典,其中的targets
鍵對(duì)應(yīng)的值是一個(gè)列表,包含了Alertmanager的地址。在這個(gè)例子中,只有一個(gè)地址'alertmanager1.example.com:9093'
。
通過這樣的配置,Prometheus可以將告警信息發(fā)送給指定的Alertmanager進(jìn)行處理。
一個(gè)使用Alertmanager這個(gè)獨(dú)立組件進(jìn)行發(fā)送郵件和釘釘?shù)母婢咐?/h4>
Alertmanager提供了一種方式來配置接收告警信息的通知接收器(receiver)。通知接收器定義了一組與告警相關(guān)的操作,例如發(fā)送電子郵件、發(fā)送短信、將告警信息存儲(chǔ)到某個(gè)系統(tǒng)等。通過配置通知接收器,您可以指定在Prometheus觸發(fā)告警時(shí)應(yīng)該執(zhí)行的操作。
以下是一個(gè)示例Alertmanager配置文件的一部分,用于配置一個(gè)發(fā)送電子郵件的通知接收器:
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alertmanager@example.com'
smtp_auth_username: 'alertmanager'
smtp_auth_password: 'password'
smtp_require_tls: false
receivers:
- name: 'email'
email_configs:
- to: 'alerts@example.com'
from: 'alertmanager@example.com'
subject: '[Alertmanager] Alerts for {{ .接收器的名字 }}'
smtp_auth:
username: 'alertmanager'
password: 'password'
smtp_smarthost: 'smtp.example.com:587'
require_tls: false
在這個(gè)配置中,我們定義了一個(gè)名為"email"的通知接收器,并指定了一個(gè)發(fā)送電子郵件的配置。您可以根據(jù)您的需求修改這個(gè)配置,例如修改郵件的接收者、發(fā)件人、主題等。
然后,您需要在Alertmanager的配置文件中指定這個(gè)通知接收器。以下是一個(gè)示例Alertmanager配置文件的一部分:
route:
receiver: 'email'
在這個(gè)配置中,我們指定了當(dāng)Alertmanager接收到告警信息時(shí),應(yīng)該將它們發(fā)送到名為"email"的通知接收器。
最后,您需要將Alertmanager的配置文件部署到Alertmanager所在的服務(wù)器上,并確保Alertmanager可以讀取和加載這個(gè)配置文件。然后,當(dāng)Prometheus觸發(fā)告警時(shí),Alertmanager將根據(jù)配置發(fā)送相應(yīng)的郵件通知。
Alertmanager和rule_files之間存在關(guān)聯(lián)
Alertmanager是一個(gè)用于管理和發(fā)送告警信息的組件,而rule_files是配置告警規(guī)則的文件。
在Prometheus中,告警規(guī)則是基于Prometheus表達(dá)式語言的表達(dá)式進(jìn)行定義的,用于檢測(cè)特定情況并觸發(fā)告警。這些規(guī)則被存儲(chǔ)在rule_files中。Alertmanager通過讀取rule_files中的規(guī)則,對(duì)Prometheus發(fā)送的告警信息進(jìn)行匹配和后續(xù)處理。
Alertmanager的配置文件可以指定多個(gè)rule_files,每個(gè)文件包含一組告警規(guī)則。通過將這些規(guī)則文件與Alertmanager的配置文件進(jìn)行關(guān)聯(lián),可以實(shí)現(xiàn)對(duì)告警信息的處理和通知。
以下是一個(gè)示例Alertmanager配置文件中的相關(guān)部分,用于指定rule_files的路徑:
global:
# rule_files字段指定了告警規(guī)則文件的路徑
rule_files:
- 'rules/basic_rules.yml'
- 'rules/complex_rules.yml'
在這個(gè)配置中,我們指定了兩個(gè)規(guī)則文件:basic_rules.yml和complex_rules.yml。Alertmanager將讀取這兩個(gè)文件中的告警規(guī)則,并根據(jù)這些規(guī)則對(duì)接收到的告警信息進(jìn)行匹配和后續(xù)處理。
通過配置rule_files,可以根據(jù)您的需求定義和管理告警規(guī)則,并將這些規(guī)則與Alertmanager的配置文件進(jìn)行關(guān)聯(lián),以便在Prometheus觸發(fā)告警時(shí)執(zhí)行相應(yīng)的操作。
在這些告警中怎么去指定我要使用哪一個(gè) rule_files
在Alertmanager的配置文件中,可以通過指定rule_files
字段來選擇要使用的告警規(guī)則文件。rule_files
字段接受一個(gè)字符串列表,每個(gè)字符串表示一個(gè)規(guī)則文件的路徑??梢栽谂渲梦募刑砑踊蛐薷?code>rule_files字段來指定要使用的規(guī)則文件。
以下是一個(gè)示例Alertmanager配置文件的部分內(nèi)容,展示了如何指定要使用的規(guī)則文件:
global:
# rule_files字段指定了告警規(guī)則文件的路徑
rule_files:
- 'path/to/rule_file_1.yml'
- 'path/to/rule_file_2.yml'
route:
# route字段指定了告警處理和通知的路由規(guī)則
receiver: 'ReceiverName'
在這個(gè)示例中,我們指定了兩個(gè)規(guī)則文件:'path/to/rule_file_1.yml'和'path/to/rule_file_2.yml'。Alertmanager將按照在rule_files
中定義的順序讀取這些規(guī)則文件??梢愿鶕?jù)需要修改或添加更多的規(guī)則文件,只需將它們的路徑添加到rule_files
列表中即可。
請(qǐng)確保在修改Alertmanager的配置文件后,將其部署到Alertmanager所在的服務(wù)器上,并確保Alertmanager可以讀取和加載這個(gè)配置文件。這樣,當(dāng)Prometheus觸發(fā)告警時(shí),Alertmanager將根據(jù)指定的規(guī)則文件進(jìn)行匹配和處理。
告警的使用Alertmanager的案例
????????當(dāng)使用Alertmanager發(fā)送告警時(shí),可以通過配置rule_files來實(shí)現(xiàn)針對(duì)特定情況的告警規(guī)則。下面是一個(gè)示例,展示了如何使用Alertmanager和rule_files來發(fā)送告警,包括將告警信息發(fā)送到釘釘和郵件中。
????????首先,確保已經(jīng)安裝并配置了Alertmanager和Prometheus,并已經(jīng)創(chuàng)建了用于發(fā)送釘釘和郵件的接收者。
創(chuàng)建規(guī)則文件:
創(chuàng)建一個(gè)名為rules/alerting_rules.yml
的規(guī)則文件,其中包含以下內(nèi)容:
groups:
- name: alerting_rules
interval: 1m
rules:
- alert: AlertName
expr: some_metric > 100
for: 1m
labels:
severity: high
annotations:
summary: High value detected
description: An alert has been triggered for the 'some_metric' metric exceeding 100.
在這個(gè)規(guī)則文件中,我們定義了一個(gè)名為AlertName
的告警規(guī)則,使用了表達(dá)式some_metric > 100
來檢測(cè)超過100的值。告警會(huì)在指標(biāo)超過100持續(xù)1分鐘的情況下觸發(fā)。我們?yōu)楦婢O(shè)置了標(biāo)簽severity: high
和注釋信息summary
和description
。
配置Alertmanager的接收者:
根據(jù)您的需求,配置Alertmanager的接收者以接收并處理告警信息。例如,如果您使用了釘釘作為接收者,請(qǐng)按照釘釘接收者的配置進(jìn)行設(shè)置。如果您使用了電子郵件作為接收者,請(qǐng)按照電子郵件接收者的配置進(jìn)行設(shè)置。確保接收者的配置正確并已啟用。
以下是一個(gè)示例Alertmanager配置文件(alertmanager.yml)中的相關(guān)部分,用于指定釘釘接收者:
global:
# 其他配置項(xiàng)...
receivers:
- name: 'DingTalkReceiver'
dingtalk_config:
webhook_url: 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token'
send_resolved: true
route:
receiver: 'DingTalkReceiver'
在這個(gè)示例中,我們創(chuàng)建了一個(gè)名為DingTalkReceiver
的接收者,并配置了釘釘?shù)南嚓P(guān)信息,包括webhook URL和發(fā)送已解決的告警。我們還將該接收者指定為默認(rèn)的接收者(receiver: 'DingTalkReceiver'
)。
配置Prometheus的告警規(guī)則:
在Prometheus中,您需要將規(guī)則文件中的告警規(guī)則導(dǎo)入到Prometheus中。使用以下命令將規(guī)則文件導(dǎo)入到Prometheus:
kubectl apply -f rules/alerting_rules.yml
-
啟動(dòng)Alertmanager和Prometheus:
啟動(dòng)Alertmanager和Prometheus服務(wù),確保它們正在運(yùn)行。您可以使用以下命令啟動(dòng)Alertmanager:
kubectl apply -f alertmanager.yml
-
觸發(fā)告警:
為了觸發(fā)告警,您可以手動(dòng)觸發(fā)滿足告警規(guī)則的條件。在Prometheus中,您可以使用pushgateway
來模擬數(shù)據(jù)并觸發(fā)告警規(guī)則。例如,使用以下命令將模擬數(shù)據(jù)推送到pushgateway
:
curl -X POST -H "Content-Type: application/json" --data '{"some_metric": 200}' http://<pushgateway_address>:<pushgateway_port>/metrics/job/alerting_rules/instance/prometheus-k8s-01/prometheus-k8s-01/default/alerting_rules/DingTalkReceiver/alertname/AlertName/severity/high/summary/High value detected/description/An alert has been triggered for the 'some_metric' metric exceeding 100. --header "Content-Type: application/json"
-
查看告警信息:
一旦滿足告警規(guī)則的條件,P·1·1·1·1·1rometheus將發(fā)送告警信息給Alertmanager。Alertmanager將根據(jù)配置的接收者發(fā)送告警信息。在本例中,我們將通過釘釘接收告警信息。您可以在釘釘中查看收到的告警信息。
以上是一個(gè)簡(jiǎn)單的示例,展示了如何使用Alertmanager和rule_files發(fā)送告警信息到釘釘和郵件中。您可以根據(jù)實(shí)際需求進(jìn)行相應(yīng)的調(diào)整和配置。
本專欄中會(huì)專門出關(guān)于組件Alertmanager的講解文章。
remote_write 和 remote_read:
remote_write和remote_read用于將數(shù)據(jù)投遞到遠(yuǎn)程地址或者從遠(yuǎn)程地址讀取數(shù)據(jù)。這使得Prometheus可以與其他系統(tǒng)進(jìn)行集成,實(shí)現(xiàn)更強(qiáng)大的數(shù)據(jù)分析和處理能力。例如,可以將采集到的監(jiān)控?cái)?shù)據(jù)遠(yuǎn)程寫入到其他的存儲(chǔ)系統(tǒng),或者從遠(yuǎn)程地址讀取數(shù)據(jù)進(jìn)行進(jìn)一步的分析和處理。
remote_write:
- url: "http://remote-write-url"
write_relabel_configs:
- source_labels: ['__address__']
regex: '^localhost:(.*)$'
target_label: '__address__'
replacement: '${1}'
- url: "https://another-remote-write-url"
...
remote_read:
- url: "http://remote-read-url"
params: {'match[]': 'some_metric'}
- url: "https://another-remote-read-url"
...
上述配置使用remote_write將采集到的監(jiān)控?cái)?shù)據(jù)遠(yuǎn)程寫入到兩個(gè)不同的地址,使用write_relabel_configs對(duì)目標(biāo)地址進(jìn)行重寫。同時(shí),使用remote_read從兩個(gè)不同的遠(yuǎn)程地址讀取數(shù)據(jù),并指定了匹配的指標(biāo)名。文章來源:http://www.zghlxwxcb.cn/news/detail-640796.html
個(gè)人案例:
案例總結(jié):
? ? ? ? 在使用的時(shí)候需要指定配置文件的路徑文章來源地址http://www.zghlxwxcb.cn/news/detail-640796.html
global:
scrape_interval: 15s # 設(shè)置抓取間隔為每15秒。
evaluation_interval: 15s # 每隔15秒評(píng)估規(guī)則。
rule_files:
- /prometheus/rules/*.yml # 這里匹配指定目錄下所有的.rules文件
scrape_configs:
- job_name: "阿丹服務(wù)器" #使用配置來發(fā)現(xiàn)服務(wù)
static_configs:
- targets: ['ip:9090']
labels:
instance: prometheus
- job_name: "服務(wù)發(fā)現(xiàn)"
file_sd_configs:
- files:
- /prometheus/ClientAll/*.json # 用json格式文件方式發(fā)現(xiàn)服務(wù),下面的是用yaml格式文件方式,都可以
refresh_interval: 10m
- files:
- /prometheus/ClientAll/*.yaml # 用yaml格式文件方式發(fā)現(xiàn)服務(wù)
refresh_interval: 10m
到了這里,關(guān)于Prometheus技術(shù)文檔-基本使用-配置文件全解?。。。?!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!