Prometheus學習系列(二十六)之集成

根據咱們的穩定承諾,Prometheus 2.0版本包含許多向後不兼容的更改。 本文檔提供了從Prometheus 1.8遷移到Prometheus 2.0的指導。linux

1、標誌

Prometheus命令行標誌的格式已更改。如今全部標誌都使用雙破折號而不是單個破折號。公共標誌(--config.file--web.listen-address--web.external-url)仍然相同,但除此以外,幾乎全部與存儲相關的標誌都已被刪除。git

一些值得注意的標誌已刪除:github

  • -alertmanager.url在Prometheus 2.0中,已刪除用於配置靜態Alertmanager URL的命令行標誌。如今必須經過服務發現來發現Alertmanager,請參閱Alertmanager服務發現。web

  • -log.format在Prometheus 2.0中,日誌只能流式傳輸到標準錯誤。docker

  • -query.staleness-delta已重命名爲--query.lookback-delta; Prometheus 2.0引入了一種處理陳舊性的新機制,請參見陳舊性。api

  • -storage.local.* Prometheus 2.0引入了一個新的存儲引擎,所以刪除了與舊引擎相關的全部標誌。有關新引擎的信息,請參閱存儲。安全

  • -storage.remote.* Prometheus 2.0刪除了已經棄用的遠程存儲標誌,若是提供它們將沒法啓動。要寫入InfluxDB,Graphite或OpenTSDB,請使用相關的存儲適配器。bash

2、Alertmanager服務發現

在Prometheus 1.4中引入了Alertmanager服務發現,容許Prometheus使用與刮擦目標相同的機制動態發現Alertmanager複製品。 在Prometheus 2.0中,已刪除靜態Alertmanager配置的命令行標誌,所以如下命令行標誌:服務器

./prometheus -alertmanager.url=http://alertmanager:9093/frontend

將在prometheus.yml配置文件中替換爲如下內容:

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
複製代碼

您還能夠在Alertmanager配置中使用全部經常使用的Prometheus服務發現集成和從新標記。 此代碼段指示Prometheus使用name: alertmanger:alertmanager和非空端口在default命名空間中搜索Kubernetes pod。

alerting:
  alertmanagers:
  - kubernetes_sd_configs:
      - role: pod
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels: [__meta_kubernetes_pod_label_name]
      regex: alertmanager
      action: keep
    - source_labels: [__meta_kubernetes_namespace]
      regex: default
      action: keep
    - source_labels: [__meta_kubernetes_pod_container_port_number]
      regex:
      action: drop
複製代碼
3、記錄規則和報警

配置警報和錄製規則的格式已更改成YAML。 舊格式的錄製規則和警報示例:

job:request_duration_seconds:histogram_quantile99 =
  histogram_quantile(0.99, sum(rate(request_duration_seconds_bucket[1m])) by (le, job))

ALERT FrontendRequestLatency
  IF job:request_duration_seconds:histogram_quantile99{job="frontend"} > 0.1
  FOR 5m
  ANNOTATIONS {
    summary = "High frontend request latency",
  }
複製代碼

看起來像這樣:

groups:
- name: example.rules
  rules:
  - record: job:request_duration_seconds:histogram_quantile99
    expr: histogram_quantile(0.99, sum(rate(request_duration_seconds_bucket[1m]))
      BY (le, job))
  - alert: FrontendRequestLatency
    expr: job:request_duration_seconds:histogram_quantile99{job="frontend"} > 0.1
    for: 5m
    annotations:
      summary: High frontend request latency
複製代碼

爲了幫助進行更改,promtool工具具備自動執行規則轉換的模式。 給定.rules文件,它將以新格式輸出.rules.yml文件。 例如:

$ promtool update rules example.rules
複製代碼

請注意,您須要使用2.0中的promtool,而不是1.8。

4、存儲

Prometheus 2.0中的數據格式已徹底改變,而且不向後兼容1.8。 爲了保持對歷史監控數據的訪問,咱們建議您運行至少與Prometheus 2.0實例並行運行至少版本1.8.1的非刮擦Prometheus實例,並讓新服務器經過遠程讀取協議從舊服務器讀取現有數據。

您的Prometheus 1.8實例應該使用如下標誌和僅包含external_labels設置(若是有)的配置文件啓動:

$ ./prometheus-1.8.1.linux-amd64/prometheus -web.listen-address ":9094" -config.file old.yml

而後可使用如下標誌啓動Prometheus 2.0(在同一臺機器上):

$ ./prometheus-2.0.0.linux-amd64/prometheus --config.file prometheus.yml

除了完整的現有配置以外,prometheus.yml還包含哪些節:

remote_read:
  - url: "http://localhost:9094/api/v1/read"
複製代碼
5、PromQL

從PromQL中刪除了如下功能:

  • drop_common_labels函數 - 應該使用不使用聚合修飾符。
  • keep_common聚合修飾符 - 應該使用修飾符。
  • count_scalar函數 - absent()或在操做中正確傳播標籤能夠更好地處理用例。

有關詳細信息,請參閱issue#3060

6、雜項
6.1 普羅米修斯非root用戶

Prometheus Docker鏡像如今能夠做爲非root用戶運行Prometheus。 若是您但願Prometheus UI / API偵聽低端口號(例如,端口80),則須要覆蓋它。 對於Kubernetes,您將使用如下YAML:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-2
spec:
  securityContext:
    runAsUser: 0
...
複製代碼

有關更多詳細信息,請參閱爲Pod或容器配置安全上下文

若是您使用的是Docker,則會使用如下代碼段:

docker run -u root -p 80:80 prom/prometheus:v2.0.0-rc.2  --web.listen-address :80
複製代碼
6.2 普羅米修斯生命週期

若是您使用Prometheus /-/reload加載HTTP端點在更改時自動從新加載Prometheus配置,則出於安全緣由,默認狀況下會禁用這些端點,這是Prometheus 2.0中的。 要啓用它們,請設置--web.enable-lifecycle標誌。

7、連接

Prometheus官網地址:prometheus.io/ 個人Github:github.com/Alrights/pr…

相關文章
相關標籤/搜索