Traefik Metrics 概览
Metrics
Traefik 以 OpenTelemetry 格式以及以下特定供应商后端提供指标:
Traefik Proxy 为 on-premises 和 Kubernetes 部署提供了官方 Grafana 仪表板。
OpenTelemetry
默认协议
OpenTelemetry 导出器默认使用 HTTP 将指标导出到 collector,目标地址为 https://localhost:4318/v1/metrics。
配置示例
要启用 OpenTelemetry 指标:
metrics:
otlp: {}[metrics]
[metrics.otlp]--metrics.otlp=trueHelm Chart Values
# values.yaml
metrics:
# 禁用 Prometheus(默认启用)
prometheus: null
# 启用提供 OTel 指标
otlp:
enabled: true
http:
enabled: true主要配置选项
| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
metrics.addInternals | 启用内部资源的指标。 | false | 否 |
metrics.otlp.serviceName | service name resource 属性。 | "traefik" | 否 |
metrics.otlp.resourceAttributes | 其它 resource 属性。 | [] | 否 |
metrics.otlp.addEntryPointsLabels | 在 entry points 上启用指标。 | true | 否 |
metrics.otlp.addRoutersLabels | 在 routers 上启用指标。 | false | 否 |
metrics.otlp.addServicesLabels | 在 services 上启用指标。 | true | 否 |
metrics.otlp.explicitBoundaries | Histogram 显式边界。 | ".005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10" | 否 |
metrics.otlp.pushInterval | 发送指标到 OpenTelemetry Collector 的间隔。 | 10s | 否 |
metrics.otlp.http.endpoint | HTTP 端点。 | "https://localhost:4318/v1/metrics" | 是 |
metrics.otlp.http.headers | 其它请求头。 | - | 否 |
metrics.otlp.http.tls.* | TLS 配置(ca、cert、key、insecureSkipVerify)。 | 否 | |
metrics.otlp.grpc.endpoint | gRPC 端点。 | "localhost:4317" | 是 |
metrics.otlp.grpc.headers | 其它请求头。 | - | 否 |
metrics.otlp.grpc.insecure | 允许使用不安全协议。 | false | 是 |
metrics.otlp.grpc.tls.* | gRPC TLS 配置。 | 否 |
resourceAttributes
resourceAttributes 选项允许设置与 traces 一起发送的 resource 属性。Traefik 也支持 OTEL_RESOURCE_ATTRIBUTES 环境变量。
Kubernetes Resource Attributes Detection
此外,在 Kubernetes 集群中运行时,Traefik 会自动发现以下 Kubernetes resource attributes:
k8s.namespace.namek8s.pod.uidk8s.pod.name
供应商
Datadog
metrics:
datadog: {}[metrics]
[metrics.datadog]--metrics.datadog=true| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
datadog.address | 发送指标到 datadog-agent 的地址。 | 127.0.0.1:8125 | 是 |
datadog.addEntryPointsLabels | 在 entry points 上启用指标。 | true | 否 |
datadog.addRoutersLabels | 在 routers 上启用指标。 | false | 否 |
datadog.addServicesLabels | 在 services 上启用指标。 | true | 否 |
datadog.pushInterval | 推送间隔。 | 10s | 否 |
datadog.prefix | 指标前缀。 | "traefik" | 否 |
address
指示导出器将指标发送到此地址的 datadog-agent。此地址可以是 Unix Domain Socket (UDS),格式为
unix:///path/to/datadog.socket。当 prefix 设置为unix时,socket 类型将自动确定。要显式定义 socket 类型,可以分别使用前缀unixgram(SOCK_DGRAM)和unixstream(SOCK_STREAM)。
InfluxDB v2
metrics:
influxDB2:
address: http://localhost:8086[metrics]
[metrics.influxDB2]
address = "http://localhost:8086"--metrics.influxdb2=true| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
metrics.influxDB2.addEntryPointsLabels | 在 entry points 上启用指标。 | true | 否 |
metrics.influxDB2.addRoutersLabels | 在 routers 上启用指标。 | false | 否 |
metrics.influxDB2.addServicesLabels | 在 services 上启用指标。 | true | 否 |
metrics.influxDB2.additionalLabels | 其它 InfluxDB 标签。 | - | 否 |
metrics.influxDB2.pushInterval | 推送间隔。 | 10s | 否 |
metrics.influxDB2.address | InfluxDB v2 实例地址。 | "http://localhost:8086" | 是 |
metrics.influxDB2.token | 认证 token。 | - | 是 |
metrics.influxDB2.org | 组织名称。 | - | 是 |
metrics.influxDB2.bucket | 存储桶。 | - | 是 |
Prometheus
metrics:
prometheus:
buckets:
- 0.1
- 0.3
- 1.2
- 5.0[metrics]
[metrics.prometheus]
[metrics.prometheus.buckets]
- 0.1
- 0.3
- 1.2
- 5.0--metrics.prometheus=true| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
metrics.prometheus.addEntryPointsLabels | 在 entry points 上启用指标。 | true | 否 |
metrics.prometheus.addRoutersLabels | 在 routers 上启用指标。 | false | 否 |
metrics.prometheus.addServicesLabels | 在 services 上启用指标。 | true | 否 |
metrics.prometheus.buckets | 延迟指标的桶。 | "0.100000, 0.300000, 1.200000, 5.000000" | 否 |
metrics.prometheus.manualRouting | 禁用默认内部路由器,以便为 prometheus@internal service 创建自定义路由器。 | false | 否 |
metrics.prometheus.entryPoint | 用于暴露指标的 Traefik Entrypoint 名称。 | "traefik" | 否 |
metrics.prometheus.headerLabels | 从请求头提取的额外标签。 | 是 |
headerLabels
定义
requests_total指标的额外标签。如果请求中不存在该 header,则会添加具有空值的标签。该标签必须是 Prometheus 指标的有效标签名称。由于 Go 的处理,
Hostheader 永远不会出现在请求的 Header map 中。要获取请求的 Host 作为标签,请改用X-Forwarded-Hostheader。
StatsD
metrics:
statsD:
address: localhost:8125[metrics]
[metrics.statsD]
address = "localhost:8125"--metrics.statsd=true| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
metrics.statsD.addEntryPointsLabels | 在 entry points 上启用指标。 | true | 否 |
metrics.statsD.addRoutersLabels | 在 routers 上启用指标。 | false | 否 |
metrics.statsD.addServicesLabels | 在 services 上启用指标。 | true | 否 |
metrics.statsD.pushInterval | 推送间隔。 | 10s | 否 |
metrics.statsD.address | 发送指标到 statsd 的地址。 | "127.0.0.1:8125" | 是 |
metrics.statsD.prefix | 指标前缀。 | "traefik" | 否 |
提供的指标
全局指标
每个后端都提供以下全局指标(名称因后端而异,例如 Prometheus 的是 traefik_config_reloads_total,Datadog 的是 config.reload.total):
| 指标(Prometheus 名称) | 类型 | 描述 |
|---|---|---|
traefik_config_reloads_total | Count | 配置重新加载的总次数。 |
traefik_config_last_reload_success | Gauge | 上次成功重新加载配置的时间戳。 |
traefik_open_connections | Gauge(标签:entrypoint、protocol) | 按 entrypoint 和 protocol 当前的开放连接数。 |
traefik_tls_certs_not_after | Gauge | 证书的过期日期。 |
EntryPoint 指标
| 指标 | 类型 | 标签 |
|---|---|---|
traefik_entrypoint_requests_total | Count | code、method、protocol、entrypoint |
traefik_entrypoint_requests_tls_total | Count | tls_version、tls_cipher、entrypoint |
traefik_entrypoint_request_duration_seconds | Histogram | code、method、protocol、entrypoint |
traefik_entrypoint_requests_bytes_total | Count | code、method、protocol、entrypoint |
traefik_entrypoint_responses_bytes_total | Count | code、method、protocol、entrypoint |
Router 指标
| 指标 | 类型 | 标签 |
|---|---|---|
traefik_router_requests_total | Count | code、method、protocol、router、service |
traefik_router_requests_tls_total | Count | tls_version、tls_cipher、router、service |
traefik_router_request_duration_seconds | Histogram | code、method、protocol、router、service |
traefik_router_requests_bytes_total | Count | code、method、protocol、router、service |
traefik_router_responses_bytes_total | Count | code、method、protocol、router、service |
Service 指标
| 指标 | 类型 | 标签 |
|---|---|---|
traefik_service_requests_total | Count | code、method、protocol、service |
traefik_service_requests_tls_total | Count | tls_version、tls_cipher、service |
traefik_service_request_duration_seconds | Histogram | code、method、protocol、service |
traefik_service_retries_total | Count | service |
traefik_service_server_up | Gauge | service、url |
traefik_service_requests_bytes_total | Count | code、method、protocol、service |
traefik_service_responses_bytes_total | Count | code、method、protocol、service |
标签
可用的标签:entrypoint(处理连接的 entrypoint)、protocol(连接协议)、cn(证书通用名称)、code(请求状态码)、method(请求方法)、router(处理请求的 router)、sans(证书 SANs)、serial(证书序列号)、service(处理请求的 service)、tls_cipher、tls_version、url(service server url)。
method标签值如果请求上的 HTTP 方法动词不是 HTTP/1.1 中定义的一组常见方法,也不是 PRI 动词(用于
HTTP/2),则 method 标签的值将变为EXTENSION_METHOD。
OpenTelemetry 语义约定
Traefik Proxy 遵循 官方 OpenTelemetry 语义约定 v1.23.1。
HTTP Server
http.server.request.duration- Histogram(标签:error.type、http.request.method、http.response.status_code、network.protocol.name、server.address、server.port、url.scheme)- HTTP 服务器请求的持续时间。
HTTP Client
http.client.request.duration- Histogram(标签:error.type、http.request.method、http.response.status_code、network.protocol.name、server.address、server.port、url.scheme)- HTTP 客户端请求的持续时间。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。