按照设计,Linkerd
仅在较短的固定时间窗口(目前为 6
小时)内保留指标数据。这意味着如果 Linkerd
的指标数据对您很有价值,您可能希望将其导出到成熟的指标存储中。
在内部,Linkerd
将其指标存储在作为 Viz
扩展的一部分运行的 Prometheus
实例中。以下教程需要在启用 prometheus
的情况下安装可视化扩展。从 Linkerd
导出指标数据有几种基本方法:
- 将数据联合到您自己的
Prometheus
集群 - 使用
Prometheus
集成 - 通过
Prometheus
的API
提取数据 - 直接从代理收集数据
使用 Prometheus 联邦(federation) API
如果您使用 Prometheus
作为您自己的指标存储,我们建议利用 Prometheus
的 federation
API, 该 API
专为将数据从一个 Prometheus
复制到另一个的用例而设计。
只需将以下项目添加到 Prometheus
配置文件中的 scrape_configs
(将 {{.Namespace}}
替换为运行 Linkerd Viz
扩展的命名空间):
- job_name: 'linkerd' kubernetes_sd_configs: - role: pod namespaces: names: ['{{.Namespace}}'] relabel_configs: - source_labels: - __meta_kubernetes_pod_container_name action: keep regex: ^prometheus$ honor_labels: true metrics_path: '/federate' params: 'match[]': - '{job="linkerd-proxy"}' - '{job="linkerd-controller"}'
或者,如果您更喜欢使用 Prometheus
的 ServiceMonitors
来配置您的 Prometheus
, 您可以使用此 ServiceMonitor YAML
(将 {{.Namespace}}
替换为运行 Linkerd Viz 扩展的命名空间):
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: linkerd-prometheus release: monitoring name: linkerd-federate namespace: {{.Namespace}} spec: endpoints: - interval: 30s scrapeTimeout: 30s params: match[]: - '{job="linkerd-proxy"}' - '{job="linkerd-controller"}' path: /federate port: admin-http honorLabels: true relabelings: - action: keep regex: '^prometheus$' sourceLabels: - '__meta_kubernetes_pod_container_name' jobLabel: app namespaceSelector: matchNames: - {{.Namespace}} selector: matchLabels: component: prometheus
就是这样!您的 Prometheus
集群现已配置为从 Linkerd
的 内部 Prometheus
实例联合 Linkerd
的指标。
一旦指标在您的 Prometheus
中, Linkerd 的代理指标将带有标签 job="linkerd-proxy"
, Linkerd 的控制平面指标将带有标签 job="linkerd-controller"
。有关特定指标和标签定义的更多信息,请查看代理指标。
有关 Prometheus 的 /federate
端点的更多信息, 请查看 Prometheus federation 文档。
使用 Prometheus 集成
如果您不使用 Prometheus 作为您自己的长期数据存储, 您可以利用 Prometheus 的众多 集成 之一自动将 Linkerd 的 Prometheus 实例中 的数据提取到您选择的数据存储中。有关详细信息,请参阅 Prometheus 文档。
通过 Prometheus 的 API 提取数据
如果 Prometheus federation
和 Prometheus
集成都不适合您, 则可以调用 Prometheus
的 API
从 Linkerd
中提取数据。
例如,您可以通过以下命令直接调用联邦 API
:
curl -G \ --data-urlencode 'match[]={job="linkerd-proxy"}' \ --data-urlencode 'match[]={job="linkerd-controller"}' \ http://prometheus.linkerd-viz.svc.cluster.local:9090/federate
如果您的数据存储在 Kubernetes
集群之外, 您可能希望在您选择的域名上设置 ingress 并进行身份验证。
与 /federate
API 类似,Prometheus
提供了一个 JSON 查询 API 来检索所有指标:
curl http://prometheus.linkerd-viz.svc.cluster.local:9090/api/v1/query?query=request_total
直接从 Linkerd 代理收集数据
最后,如果您想完全避免 Linkerd
的 Prometheus
, 您可以直接在其 /metrics
端点上查询 Linkerd
代理。
例如,要从在 linkerd
命名空间中运行的单个 Linkerd 代理查看 /metrics
:
kubectl -n linkerd port-forward \ $(kubectl -n linkerd get pods \ -l linkerd.io/control-plane-ns=linkerd \ -o jsonpath='{.items[0].metadata.name}') \ 4191:4191
然后:
curl localhost:4191/metrics
或者,linkerd diagnostics proxy-metrics
可用于检索 给定工作负载(workload
)的代理指标(proxy metrics
)。