Prometheus數據源的設定主要分爲靜態設定和動態發現, 常用的爲以下幾類:
Prometheus.yaml組態檔:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'grafana'
static_configs:
- targets:
- 'grafana-service.ns-monitor:3000'
- job_name: 'kubernetes-apiservers'
基於檔案的服務發現方式不需要依賴其他平臺與第三方服務,使用者只需將要新的target資訊以yaml或json檔案格式新增到target檔案中 ,prometheus會定期從指定檔案中讀取target資訊並更新。
target檔案:
vim targets.json
[
{
"targets": [ "192.168.20.136:9100"],
"labels": {
"instance": "nodeone",
"job": "expor_test1"
}
},
{
"targets": [ "192.168.20.137:9100"],
"labels": {
"instance": "nodetwo",
"job": "expor_test2"
}
}
]
Prometheus.yaml組態檔:
scrape_configs:
- job_name: 'file_sd' #此處定義了自動發現的採集任務
file_sd_configs:
- files:
- targets.json #採集檔名
檢視web介面targets 出現targets.json 所定義的2個job。
忽略
對於kubernetes而言,Promethues通過與Kubernetes API互動,然後輪詢資源端點。目前主要支援5種服務發現模式,分別是:
1: Node、
2 :Service、
3 :Pod、
4 :Endpoints、
5 :Ingress
對應組態檔中的role: node / role:service
動態獲取所有節點node的資訊,可以新增如下設定:
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
對應的service、pod也是同樣的方式。
需要注意的是,爲了能夠讓Prometheus能夠存取收到Kubernetes API,我們要對Prometheus進行存取授權,即serviceaccount。否則就算設定了,也沒有許可權獲取。
source_labels:源標籤,沒有經過relabel處理之前的標籤名字
target_label:通過action處理之後的新的標籤名字
regex:正則表達式,匹配源標籤
replacement:replacement指定的替換後的標籤(target_label)對應的數值
action:action定義了relabel的動作,action支援多種,如下:
Consul 是基於 GO 語言開發的開源工具,主要面向分佈式,服務化的系統提供服務註冊、服務發現和設定管理的功能。
Consul 提供服務註冊/發現、健康檢查、Key/Value儲存、多數據中心和分佈式一致性保證等功能。
之前我們通過 Prometheus 實現監控,當新增一個 Target 時,需要變更伺服器上的組態檔,即使使用 file_sd_configs 設定,也需要登錄伺服器修改對應 Json 檔案,會非常麻煩。
略
- job_name: 'consul-prometheus'
consul_sd_configs:
- server: '172.30.12.167:8500'
services: []
說明一下:這裏需要使用 consul_sd_configs 來設定使用 Consul 服務發現型別,server 爲 Consul 的服務地址。 設定完畢後,重新啓動 Prometheus 服務。