15. 导出指标
按照设计,Linkerd
仅在较短的固定时间窗口(目前为 6
小时)内保留指标数据。
这意味着如果 Linkerd
的指标数据对您很有价值,您可能希望将其导出到成熟的指标存储中。
在内部,Linkerd
将其指标存储在作为 Viz
扩展的一部分运行的 Prometheus
实例中。
以下教程需要在启用 prometheus
的情况下安装 viz
扩展。 从 Linkerd
导出指标数据有几种基本方法:
使用 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
中提取数据。
例如,您可以通过以下命令直接调用 federation API
:
curl -G \
--data-urlencode 'match[]={job="linkerd-proxy"}' \
--data-urlencode 'match[]={job="linkerd-controller"}' \
http://prometheus.linkerd-viz.svc.cluster.local:9090/federate
与 /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
可用于检索给定工作负载
的代理指标
。