Linkerd 2.10(Step by Step)(四) 如何配置外部 Prometheus 實(shí)例
Linkerd 2.10 中文手冊(cè)持續(xù)修正更新中:
https://linkerd.hacker-linner.com
盡管 linkerd-viz 擴(kuò)展帶有自己的 Prometheus 實(shí)例, 但在某些情況下,由于各種原因使用外部實(shí)例更有意義。
請(qǐng)注意,此方法要求您在 Prometheus 配置中手動(dòng)添加和維護(hù)額外的抓取配置。
本教程展示了如何配置外部 Prometheus 實(shí)例, 以用戶和 Linkerd 控制平面組件(如 web 等)均 可使用的格式抓取控制平面和代理的指標(biāo)。
這里有兩個(gè)重要的點(diǎn)需要解決。
- 配置外部 Prometheus 實(shí)例以獲取 Linkerd 指標(biāo)。
 - 配置 linkerd-viz 擴(kuò)展以使用該 Prometheus。
 
Prometheus 抓取配置
以下抓取配置必須應(yīng)用于外部 Prometheus 實(shí)例。
下面的抓取配置是 linkerd-prometheus 抓取配置的一個(gè)子集。
https://github.com/linkerd/linkerd2/blob/bc5bdeb834f571d92937fe5c2ead6bf88e37823a/viz/charts/linkerd-viz/templates/prometheus.yaml#L47-L151
在應(yīng)用之前,重要的是將模板值(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_(.+)
 
內(nèi)置 prometheus 的運(yùn)行配置可以作為參考。
- kubectl -n linkerd-viz get configmap prometheus-config -o yaml
 
Linkerd-Viz 擴(kuò)展配置
Linkerd 的可視化擴(kuò)展組件(如 metrics-api 等)依賴 于 Prometheus 實(shí)例來為儀表板和 CLI 提供支持。
prometheusUrl 字段為您提供了一個(gè)位置, 所有這些組件都可以通過該位置配置為外部 Prometheus URL。這可以通過 CLI 和 Helm 實(shí)現(xiàn)。
CLI
這可以通過將具有上述字段的文件傳遞給 values 標(biāo)志來完成, 該標(biāo)志可通過 linkerd viz install 命令獲得。
- prometheusUrl: existing-prometheus.xyz:9090
 
一旦應(yīng)用,此配置在安裝中不會(huì)持久化(persistent)。在重新安裝、升級(jí)等過程中,用戶必須再次傳遞相同的信息。
當(dāng)使用外部 Prometheus 并配置 prometheusUrl 字段時(shí), Linkerd 的 Prometheus 仍將包含在安裝中。如果您想禁用它,請(qǐng)確保同時(shí)包含以下配置:
- prometheus:
 - enabled: false
 
Helm
使用 Helm 時(shí),可以通過 values.yaml 應(yīng)用相同的配置。應(yīng)用后,Helm 會(huì)確保配置在升級(jí)過程中保持不變。















 
 
 




 
 
 
 