# 全局配置 global: # 默認抓取周期,可用單位ms、smhdwy #設置每15s采集數據一次,默認1分鍾 [ scrape_interval: <duration> | default = 1m ] # 默認抓取超時 [ scrape_timeout: <duration> | default = 10s ] # 估算規則的默認周期 # 每15秒計算一次規則。默認1分鍾 [ evaluation_interval: <duration> | default = 1m ] # 和外部系統(例如AlertManager)通信時為時間序列或者警情(Alert)強制添加的標簽列表 external_labels: [ <labelname>: <labelvalue> ... ] # 規則文件列表 rule_files: [ - <filepath_glob> ... ] # 抓取配置列表 scrape_configs: [ - <scrape_config> ... ] # Alertmanager相關配置 alerting: alert_relabel_configs: [ - <relabel_config> ... ] alertmanagers: [ - <alertmanager_config> ... ] # 遠程讀寫特性相關的配置 remote_write: [ - <remote_write> ... ] remote_read: [ - <remote_read> ... ]
global:
scrape_interval: 15s
#默認值為 15s,收集數據的時間間隔,每隔15s收集一次數據,scrape_interval可以基於全局或基於單個metric定義
scrape_timeout: 10s
#采集數據的超時時間,默認為10s
evaluation_interval: 1m
#默認為1m,對告警規則做定期計算,然后更新告警狀態,evaluation_interval只有全局值,告警狀態如下三種
inactive:沒有觸發閾值
pending:已觸發閾值但未滿足告警持續時間
firing:已觸發閾值且滿足告警持續時間
prometheus默認是采用pull方式拉取監控數據的,也就是定時去目標主機上抓取metrics數據,每一個被抓取的目標需要暴露一個HTTP接口,prometheus通過這個暴露的接口就可以獲取到相應的指標數據,這種方式需要由目標服務決定采集的目標有哪些,通過配置在scrape_configs中的各種job來實現,無法動態感知新服務,如果后面增加了節點或者組件信息,就得手動修promrtheus配置,並重啟 promethues,很不方便,所以出現了動態服務發現,動態服務發現能夠自動發現集群中的新端點,並加入到配置中,通過服務發現,Prometheus能查詢到需要監控的Target列表,然后輪詢這些Target獲取監控數據。
prometheus獲取數據源target的方式有多種,如靜態配置和服務發現配置,prometheus支持多種服務發現,在prometheus中的服務發現主要分為以下幾種:
- static_configs:靜態服務發現
- kubernetes_sd_configs: 基於Kubernetes的服務發現,這章講的內容
- consul_sd_configs: Consul 服務發現
- dns_sd_configs: DNS 服務發現
- file_sd_configs: 文件服務發現
promethues的靜態靜態服務發現static_configs:每當有一個新的目標實例需要監控,我們都需要手動配置目標target
promethues的consul服務發現consul_sd_configs:Prometheus 一直監視consul服務,當發現在consul中注冊的服務有變化,prometheus就會自動監控到所有注冊到consul中的目標資源
promethues的k8s服務發現kubernetes_sd_configs:Prometheus與Kubernetes的API進行交互,動態的發現Kubernetes中部署的所有可監控的目標資源。
Prometheus的relabel_configs:
promethues的relabeling(重新修改標簽)功能很強大,它能夠在抓取到目標實例之前把目標實例的元數據標簽動態重新修改,動態添加或者覆蓋標簽
prometheus加載target成功之后,在Target實例中,都包含一些Metadata標簽信息,默認的標簽有:
__address__:以<host>:<port> 格式顯示目標targets的地址
__scheme__:采集的目標服務地址的Scheme形式,HTTP或者HTTPS
__metrics_path__:采集的目標服務的訪問路徑
Prometheus怎么從Target實例中獲取監控數據就是通過上面這些標簽獲取得,上面列舉的是一些默認標簽,我們還可以為Target添加一些自定義的標簽,我們可以在配置文件中設置relabeling重寫規則
relabel_configs配置詳細說明:
- source_labels:源標簽,沒有經過relabel處理之前的標簽名字
- target_label:通過action處理之后的新的標簽名字
- regex:正則表達式,匹配源標簽
- replacement:replacement指定的替換后的標簽(target_label)對應的數值
- action:action定義了relabel的動作,action支持多種,如下
- replace: 替換標簽值,根據regex正則匹配到源標簽的值,並把匹配的值寫入到目的標簽中
- keep: 滿足regex正則條件的實例進行采集,把source_labels中沒有匹配到regex正則內容的Target實例丟掉
- drop: 滿足regex正則條件的實例不采集,把source_labels中匹配到regex正則內容的Target實例丟掉
- labeldrop: 對抓取到的符合過濾規則的target標簽進行刪除
- labelkeep: 對抓取到的符合過濾規則的target標簽進行保留
- labelmap會根據regex的定義去匹配Target實例所有標簽的名稱,並且以匹配到的內容為新的標簽名稱,其值作為新標簽的值
- hashmod 設置target_label為modulus連接的哈希值source_labels
promtool針對Prometheus配置文件檢查
# promtool check config <PATH>/prometheus.yml