尽管 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
。这可以通过 CLI
和 Helm
实现。
CLI
这可以通过将具有上述字段的文件传递给 values
标志来完成, 该标志可通过 linkerd viz install
命令获得。
prometheusUrl: existing-prometheus.xyz:9090
一旦应用,此配置在安装中不会持久化(persistent
)。在重新安装、升级等过程中,用户必须再次传递相同的信息。
当使用外部 Prometheus
并配置 prometheusUrl
字段时, Linkerd
的 Prometheus
仍将包含在安装中。如果您想禁用它,请确保同时包含以下配置:
prometheus: enabled: false
Helm
使用 Helm 时,可以通过 values.yaml
应用相同的配置。应用后,Helm 会确保配置在升级过程中保持不变。