Linkerd 2.10(Step by Step)—4. 如何配置外部 Prometheus 例項

為少發表於2021-06-16

Linkerd 2.10 系列

Linkerd 2.10 中文手冊持續修正更新中:

儘管 linkerd-viz 擴充套件帶有自己的 Prometheus 例項,
但在某些情況下,由於各種原因使用外部例項更有意義。

請注意,此方法要求您在 Prometheus 配置中手動新增和維護額外的抓取配置。

本教程展示瞭如何配置外部 Prometheus 例項,
以使用者和 Linkerd 控制平面元件(如 web 等)均
可使用的格式抓取控制平面和代理的指標。

這裡有兩個重要的點需要解決。

  • 配置外部 Prometheus 例項以獲取 Linkerd 指標。
  • 配置 linkerd-viz 擴充套件以使用該 Prometheus

Prometheus 抓取配置

以下抓取配置必須應用於外部 Prometheus 例項。

下面的抓取配置是 linkerd-prometheus
抓取配置的一個子集

在應用之前,重要的是將模板值(templated values)(存在於 {{}} 中)替
換為直接值(direct values),以使以下配置正常工作。

    - job_name: 'linkerd-controller'
      kubernetes_sd_configs:
      - role: pod
        namespaces:
          names:
          - '{{.Values.linkerdNamespace}}'
          - '{{.Values.namespace}}'
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_pod_container_port_name
        action: keep
        regex: admin-http
      - source_labels: [__meta_kubernetes_pod_container_name]
        action: replace
        target_label: component

    - job_name: 'linkerd-service-mirror'
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_pod_label_linkerd_io_control_plane_component
        - __meta_kubernetes_pod_container_port_name
        action: keep
        regex: linkerd-service-mirror;admin-http$
      - source_labels: [__meta_kubernetes_pod_container_name]
        action: replace
        target_label: component

    - job_name: 'linkerd-proxy'
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_pod_container_name
        - __meta_kubernetes_pod_container_port_name
        - __meta_kubernetes_pod_label_linkerd_io_control_plane_ns
        action: keep
        regex: ^{{default .Values.proxyContainerName "linkerd-proxy" .Values.proxyContainerName}};linkerd-admin;{{.Values.linkerdNamespace}}$
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: pod
      # special case k8s' "job" label, to not interfere with prometheus' "job"
      # label
      # __meta_kubernetes_pod_label_linkerd_io_proxy_job=foo =>
      # k8s_job=foo
      - source_labels: [__meta_kubernetes_pod_label_linkerd_io_proxy_job]
        action: replace
        target_label: k8s_job
      # drop __meta_kubernetes_pod_label_linkerd_io_proxy_job
      - action: labeldrop
        regex: __meta_kubernetes_pod_label_linkerd_io_proxy_job
      # __meta_kubernetes_pod_label_linkerd_io_proxy_deployment=foo =>
      # deployment=foo
      - action: labelmap
        regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
      # drop all labels that we just made copies of in the previous labelmap
      - action: labeldrop
        regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
      # __meta_kubernetes_pod_label_linkerd_io_foo=bar =>
      # foo=bar
      - action: labelmap
        regex: __meta_kubernetes_pod_label_linkerd_io_(.+)
      # Copy all pod labels to tmp labels
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
        replacement: __tmp_pod_label_$1
      # Take `linkerd_io_` prefixed labels and copy them without the prefix
      - action: labelmap
        regex: __tmp_pod_label_linkerd_io_(.+)
        replacement:  __tmp_pod_label_$1
      # Drop the `linkerd_io_` originals
      - action: labeldrop
        regex: __tmp_pod_label_linkerd_io_(.+)
      # Copy tmp labels into real labels
      - action: labelmap
        regex: __tmp_pod_label_(.+)

內建 prometheus 的執行配置可以作為參考。

kubectl -n linkerd-viz  get configmap prometheus-config -o yaml

Linkerd-Viz 擴充套件配置

Linkerd 的視覺化擴充套件元件(如 metrics-api 等)依賴
Prometheus 例項來為儀表板和 CLI 提供支援。

prometheusUrl 欄位為您提供了一個位置,
所有這些元件都可以通過該位置配置為外部 Prometheus URL
這可以通過 CLIHelm 實現。

CLI

這可以通過將具有上述欄位的檔案傳遞給 values 標誌來完成,
該標誌可通過 linkerd viz install 命令獲得。

prometheusUrl: existing-prometheus.xyz:9090

一旦應用,此配置在安裝中不會持久化(persistent)。
在重新安裝、升級等過程中,使用者必須再次傳遞相同的資訊。

當使用外部 Prometheus 並配置 prometheusUrl 欄位時,
LinkerdPrometheus 仍將包含在安裝中。
如果您想禁用它,請確保同時包含以下配置:

prometheus:
  enabled: false

Helm

使用 Helm 時,可以通過 values.yaml 應用相同的配置。
應用後,Helm 會確保配置在升級過程中保持不變。

我是為少
微信:uuhells123
公眾號:黑客下午茶
加我微信(互相學習交流),關注公眾號(獲取更多學習資料~)

相關文章