㈠ 【實踐】2.Prometheus命令和配置詳解
Prometheus配置方式有兩種:
(1)命令行,用來配置不可變命令參數,主要是Prometheus運行參數,比如數據存儲位置
(2)配置文件,用來配置Prometheus應用參數,比如數據採集,報警對接
不重啟進程配置生效方式也有兩種:
(1)對進程發送信號SIGHUP
(2)HTTP POST請求,需要開啟--web.enable-lifecycle選項curl -X POST http://192.168.66.112:9091/-/reload
配置文件格式是yaml格式,說明:
.yml或者.yaml 都是 yaml格式的文件,
yaml格式的好處: 和json交互比較容易
python/go/java/php 有yaml格式庫,方便語言之間解析,並且這種格式存儲的信息量很大。
命令行可用配置可通過prometheus -h來查看。
配置文件使用yml格式,配置文件中一級配置項如下,說明參考#備注內容。
配置文件中通用欄位值格式
<boolean>: 布爾類型值為true和false
<scheme>: 協議方式包含http和https
原始配置文件內容:
全局默認的數據拉取間隔
全局默認的單次數據拉取超時,當報context deadline exceeded錯誤時需要在特定的job下配置該欄位。
全局默認的規則(主要是報警規則)拉取間隔
該服務端在與其他系統對接所攜帶的標簽
該欄位配置與Alertmanager進行對接的配置
樣例:
上面的配置中的 alert_relabel_configs 是指警報重新標記在發送到Alertmanager之前應用於警報。 它具有與目標重新標記相同的配置格式和操作,外部標簽標記後應用警報重新標記,主要是針對集群配置。
這個設置的用途是確保具有不同外部label的HA對Prometheus服務端發送相同的警報信息。
Alertmanager 可以通過 static_configs 參數靜態配置,也可以使用其中一種支持的服務發現機制動態發現,我們上面的配置是靜態的單實例。
此外, relabel_configs 允許從發現的實體中選擇 Alertmanager,並對使用的API路徑提供高級修改,該路徑通過 __alerts_path__ 標簽公開。
完成以上配置後,重啟Prometheus服務,用以載入生效,也可以使用熱載入功能,使其配置生效。然後通過瀏覽器,訪問 http://192.168.1.220:19090/alerts 就可以看 inactive pending firing 三個狀態,沒有警報信息是因為我們還沒有配置警報規則 rules 。
這里定義和prometheus集成的alertmanager插件,用於監控報警。後續會單獨進行alertmanger插件的配置、配置說明、報警媒介以及route路由規則記錄。
此項配置和 scrape_configs 欄位中 relabel_configs 配置一樣,用於對需要報警的數據進行過濾後發向 Alertmanager
說明
relabel-configs的配置允許你選擇你想抓取的目標和這些目標的標簽是什麼。所以說如果你想要抓取這種類型的伺服器而不是那種,可以使用relabel_configs
相比之下,metric_relabel_configs是發生在抓取之後,但在數據被插入存儲系統之前使用。因此如果有些你想過濾的指標,或者來自抓取本身的指標(比如來自/metrics頁面)你就可以使用metric_relabel_configs來處理。
該項目主要用來配置不同的 alertmanagers 服務,以及Prometheus服務和他們的鏈接參數。 alertmanagers 服務可以靜態配置也可以使用服務發現配置。Prometheus以pushing 的方式向alertmanager傳遞數據。
alertmanager 服務配置和target配置一樣,可用欄位如下
這個主要是用來設置告警規則,基於設定什麼指標進行報警(類似觸發器trigger)。這里設定好規則以後,prometheus會根據全局global設定的evaluation_interval參數進行掃描載入,規則改動後會自動載入。其報警媒介和route路由由alertmanager插件實現。
樣例:
"first_rules.yml"樣例:
Prometheus 支持兩種類型的 Rules ,可以對其進行配置,然後定期進行運算:recording rules 記錄規則 與 alerting rules 警報規則,規則文件的計算頻率與警報規則計算頻率一致,都是通過全局配置中的 evaluation_interval 定義。
不論是recording rules還是alerting rules都要在組裡面。
要在Prometheus中使用Rules規則,就必須創建一個包含必要規則語句的文件,並讓Prometheus通過Prometheus配置中的rule_files欄位載入該文件,前面我們已經講過了。 其實語法都一樣,除了 recording rules 中的收集的指標名稱 record: <string> 欄位配置方式略有不同,其他都是一樣的。
配置範例:
recording rules 是提前設置好一個比較花費大量時間運算或經常運算的表達式,其結果保存成一組新的時間序列數據。當需要查詢的時候直接會返回已經計算好的結果,這樣會比直接查詢快,同時也減輕了PromQl的計算壓力,同時對可視化查詢的時候也很有用,可視化展示每次只需要刷新重復查詢相同的表達式即可。
在配置的時候,除卻 record: <string> 需要注意,其他的基本上是一樣的,一個 groups 下可以包含多條規則 rules ,Recording 和 Rules 保存在 group 內,Group 中的規則以規則的配置時間間隔順序運算,也就是全局中的 evaluation_interval 設置。
配置範例:
上面的規則其實就是根據 record 規則中的定義,Prometheus 會在後台完成 expr 中定義的 PromQL 表達式周期性運算,以 job 為維度使用 sum 聚合運算符 計算 函數rate 對http_requests_total 指標區間 10m 內的增長率,並且將計算結果保存到新的時間序列 job:http_requests_total:rate10m 中, 同時還可以通過 labels 為樣本數據添加額外的自定義標簽,但是要注意的是這個 lables 一定存在當前表達式 Metrics 中。
模板是在警報中使用時間序列標簽和值展示的一種方法,可以用於警報規則中的注釋(annotation)與標簽(lable)。模板其實使用的go語言的標准模板語法,並公開一些包含時間序列標簽和值的變數。這樣查詢的時候,更具有可讀性,也可以執行其他PromQL查詢 來向警報添加額外內容,ALertmanager Web UI中會根據標簽值顯示器警報信息。
{{ $lable.<lablename>}} 可以獲取當前警報實例中的指定標簽值
{{ $value }} 變數可以獲取當前PromQL表達式的計算樣本值。
調整好rules以後,我們可以使用 curl -XPOST http://localhost:9090/-/reload 或者 對Prometheus服務重啟,讓警報規則生效。
這個時候,我們可以把閾值調整為 50 來進行故障模擬操作,這時在去訪問UI的時候,當持續1分鍾滿足警報條件,實際警報狀態已轉換為 Firing,可以在 Annotations中看到模板信息 summary 與 description 已經成功顯示。
規則檢查
拉取數據配置,在配置欄位內可以配置拉取數據的對象(Targets),job以及實例
定義job名稱,是一個拉取單元。每個job_name都會自動引入默認配置如
這些也可以在單獨的job中自定義
服務端拉取過來的數據也會存在標簽,配置文件中也會有標簽,這樣就可能發生沖突。
true就是以抓取數據中的標簽為准
false就會重新命名抓取數據中的標簽為「exported」形式,然後添加配置文件中的標簽
切換抓取數據所用的協議
定義可選的url參數
每次抓取數據請求的認證信息
password和password_file互斥只可以選擇其一
bearer_token和bearer_token_file互斥只可以選擇其一
抓取ssl請求時證書配置
通過代理去主去數據
Prometheus支持多種服務現工具,詳細配置這里不再展開
更多參考官網: https://prometheus.io/docs/prometheus/latest/configuratio n/configuration/
服務發現來獲取抓取目標為動態配置,這個配置項目為靜態配置,靜態配置為典型的targets配置,在改配置欄位可以直接添加標簽
採集器所採集的數據都會帶有label,當使用服務發現時,比如consul所攜帶的label如下:
這些lable是數據篩選與聚合計算的基礎。
抓取數據很繁雜,尤其是通過服務發現添加的target。所以過濾就顯得尤為重要,我們知道抓取數據就是抓取target的一些列metrics,Prometheus過濾是通過對標簽操作操現的,在欄位relabel_configs和metric_relabel_configs裡面配置,兩者的配置都需要relabel_config欄位。該欄位需要配置項如下
target配置示例
target中metric示例
target中metric示例
使用示例
由以上可知當使用服務發現consul會帶入標簽__meta_consul_dc,現在為了表示方便需要將該標簽變為dc
需要做如下配置,這裡面action使用的replacement
過濾採集target
為了防止Prometheus服務過載,使用該欄位限制經過relabel之後的數據採集數量,超過該數字拉取的數據就會被忽略
Prometheus可以進行遠程讀/寫數據。欄位remote_read和remote_write
(1)Prometheus 配置詳解
https://www.dazhuanlan.com/2019/12/12/5df11ada207ce/
(2)Prometheus配置文件prometheus.yml 四個模塊詳解
http://www.21yunwei.com/archives/7321
(3)官方文檔說明
https://prometheus.io/docs/prometheus/latest/configuration/configuration/
(4)Prometheus監控神器-Rules篇
https://zhuanlan.hu.com/p/179295676
(5)Prometheus監控神器-Alertmanager篇(1)
https://zhuanlan.hu.com/p/179292686
(6)Prometheus監控神器-Alertmanager篇(2)
https://zhuanlan.hu.com/p/179294441