Traefik 日志与访问日志
日志(Logs)
日志涉及 Traefik 本身发生的一切(启动、配置、事件、关闭等)。
配置示例
要在 Traefik Proxy 中启用和配置日志,你可以使用静态配置文件,或者使用 Helm chart 时使用 Helm values。
YAML 格式:
yaml
log:
filePath: "/path/to/log-file.log"
format: json
level: INFOTOML 格式:
toml
[log]
filePath = "/path/to/log-file.log"
format = "json"
level = "INFO"Helm Chart Values:
yaml
logs:
general:
filePath: "/path/to/log-file.log"
format: json
level: INFO配置选项
| 字段 | 描述 | 默认值 |
|---|---|---|
log.level | 日志级别(DEBUG、INFO、WARN、ERROR、FATAL、PANIC)。 | ERROR |
log.filePath | 日志文件路径。 | ""(stdout) |
log.format | 日志格式(common、json、logfmt)。 | common |
log.noColor | 禁用 ANSI 颜色代码。 | false |
log.syslog | syslog 配置。 | - |
log.fields | 附加到每条日志的字段。 | - |
log.maxSize | 日志文件最大大小(轮转前)。 | 0 |
log.maxBackups | 保留的旧日志文件数。 | 0 |
log.maxAge | 旧日志文件最大保留天数。 | 0 |
log.compress | 压缩轮转的旧日志文件。 | false |
访问日志(Access Logs)
访问日志涉及 Traefik 处理的请求所发生的一切。
YAML 格式:
yaml
accesslog:
filePath: "/path/to/access.log"
format: json
bufferingSize: 100
filters:
statusCodes:
- "200"
- "300-302"
retryAttempts: true
minDuration: "10ms"
fields:
defaultMode: keep
names:
RequestHost: drop
RequestMethod: keep
RequestPath: keepHelm Chart Values:
yaml
logs:
access:
enabled: true
filePath: "/path/to/access.log"
format: json配置选项
| 字段 | 描述 | 默认值 |
|---|---|---|
accesslog.enabled | 启用访问日志。 | true |
accesslog.filePath | 访问日志文件路径。 | ""(stdout) |
accesslog.format | 日志格式(common、json、logfmt)。 | common |
accesslog.bufferingSize | 缓冲区大小(行数)。 | 0 |
accesslog.filters.statusCodes | 包含的状态码列表。 | [] |
accesslog.filters.retryAttempts | 包含重试尝试。 | false |
accesslog.filters.minDuration | 包含的最短持续时间。 | 0 |
accesslog.fields.defaultMode | 字段的默认模式(keep、drop、redirect)。 | keep |
accesslog.fields.names | 字段名到模式的映射。 | - |
accesslog.fields.headers.defaultMode | 请求/响应头的默认模式。 | drop |
accesslog.fields.headers.names | 头到模式的映射。 | - |
访问日志字段
请求字段
RequestMethod、RequestPath、RequestHostRequestScheme、RequestUserAgent、RequestRefererRequestProtocol、RequestLine、RequestContentTypeRequestContentLength、RequestAccept、RequestCount
响应字段
ResponseStatus、ResponseCode、ResponseContentTypeResponseContentLength、ResponseDuration、ResponseCount
客户端字段
ClientHost、ClientPort、ClientUsernameClientAddr
代理字段
RouterName、ServiceName、ServiceURLBackendName、BackendURL、BackendAddressEntryPointName、TLSVersion、TLSCipher
适用场景
- 生产环境监控:将访问日志发送到 ELK、Loki 等日志聚合系统
- 审计:记录所有访问以便审计
- 调试:启用 DEBUG 级别获取详细日志
- 性能分析:通过访问日志分析慢请求
- 安全分析:检测异常访问模式
最佳实践
- 使用 JSON 格式:便于日志聚合系统解析
- 配置过滤:过滤掉不需要的请求(如健康检查)
- 重定向敏感头:使用
redirect模式重定向头到另一字段 - 启用缓冲:使用
bufferingSize减少 I/O - 配置轮转:防止日志文件无限增长
- 使用全局访问日志:将访问日志输出到 stdout,由容器平台(如 Docker、Kubernetes)收集
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。