Logs & Access Logs
日志¶
日志记录 Traefik 自身发生的一切,包括启动、配置、事件、关闭等。
配置示例¶
要启用和配置 Traefik Proxy 日志,可以使用静态配置文件;如果使用 Helm chart,也可以通过 Helm values 配置。
log:
filePath: "/path/to/log-file.log"
format: json
level: INFO[log]
filePath = "/path/to/log-file.log"
format = "json"
level = "INFO"log:
filePath: "/path/to/log-file.log"
format: json
level: INFO访问日志¶
访问日志记录 Traefik 所处理请求的相关信息。
配置示例¶
要启用和配置 Traefik Proxy 访问日志,可以使用静态配置文件;如果使用 Helm chart,也可以通过 Helm values 配置。
以下示例启用 JSON 格式的访问日志,通过过滤仅保留特定状态码,并自定义保留或丢弃的字段。
accessLog:
format: json
filters:
statusCodes:
- "200"
- "400-404"
- "500-503"
fields:
names:
ClientUsername: drop
headers:
defaultMode: keep
names:
User-Agent: redact
Content-Type: keep[accessLog]
format = "json"
[accessLog.filters]
statusCodes = ["200", "400-404", "500-503"]
[accessLog.fields]
[accessLog.fields.names]
ClientUsername = "drop"
[accessLog.fields.headers]
defaultMode = "keep"
[accessLog.fields.headers.names]
"User-Agent" = "redact"
"Content-Type" = "keep"# values.yaml
accessLog:
enabled: true
format: json
filters:
statusCodes:
- "200"
- "400-404"
- "500-503"
fields:
names:
ClientUsername: drop
headers:
defaultMode: keep
names:
User-Agent: redact
Content-Type: keep按路由器配置访问日志¶
您可以为特定路由器启用或禁用访问日志。这适合在全局保持启用的同时,关闭产生大量日志的路由的日志记录。
下面是在特定路由器上禁用访问日志的示例:
http:
routers:
my-router:
rule: "Host(`example.com`)"
service: my-service
observability:
accessLogs: false[http.routers.my-router.observability]
accessLogs = false# ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: my-router
spec:
routes:
- kind: Rule
match: Host(`example.com`)
services:
- name: my-service
port: 80
observability:
accessLogs: falselabels:
- "traefik.http.routers.my-router.observability.accesslogs=false"{
// ...
"Tags": [
"traefik.http.routers.my-router.observability.accesslogs=false"
]
}如果路由器未定义 observability 选项,就会继承入口点的可观测性配置或全局配置。
日志格式¶
Traefik Proxy 支持以下日志格式:
common- Traefik 扩展的 CLF 格式(默认)genericCLF- 与标准日志分析器兼容的通用 CLF 格式json- 适用于结构化日志的 JSON 格式
源站状态与下游状态¶
访问日志记录两个状态码,其命名以 Traefik 为参照:
Client <---- DownstreamStatus ---- Traefik <---- OriginStatus ---- Backend
OriginStatus是将请求代理到后端的结果。它可以是后端返回的状态;如果无法访问后端或后端未正确响应,则为计算得到的状态码(502、504等)。DownstreamStatus是中间件链执行完成后,Traefik 返回给客户端的状态。
请求未经改动地代理时,两者相等。
如果两者均已设置但值不同,说明中间件改写了响应。
如果 OriginStatus 为空(记录为 0),说明请求从未被代理到后端:响应来自路由处理(没有匹配的路由器)或中间件(身份验证、速率限制、重定向)。
提示
这两个字段仅在 json 格式中可用。
common、genericCLF 格式以及 statusCodes 过滤器使用 DownstreamStatus 的值。
访问日志过滤器¶
您可以配置 Traefik Proxy,使其仅记录满足特定条件的请求访问日志。这有助于减少日志量并聚焦特定事件。
可用的过滤器包括:
- 状态码:仅保留具有特定 HTTP 状态码或状态码范围(例如
200、400-404)的请求日志。 - 重试次数:仅在请求发生重试时保留日志。
- 最短持续时间:仅保留处理时长超过指定时间的请求日志。
自定义日志字段¶
使用 json 格式时,可以自定义访问日志中包含的字段。
- 请求字段:可以对任意标准请求字段选择
keep、drop或redact。ClientHost、RequestMethod、Duration等可用字段的完整列表,请参阅参考文档。 - 请求头:还可以指定日志应包含哪些请求头,以及其值应该被
kept、dropped还是redacted。 - 请求查询参数:可以对请求的查询参数选择
keep或drop。
提示
详细配置选项请参阅参考文档。