Access Logs

谁叫谁?

默认情况下,日志以文本格式写入标准输出.

Configuration

要启用访问日志:

[accessLog]
accessLog: {}
--accesslog=true

filePath

默认情况下,访问日志将写入标准输出. 要将日志写入日志文件,请使用filePath选项.

format

默认情况下,日志是使用通用日志格式(CLF)编写的. 要以JSON format写入日志,请在format选项中使用json . 如果不支持给定格式,则使用默认(CLF).

通用日志格式

<remote_IP_address> - <client_user_name_if_available> [<timestamp>] "<request_method> <request_path> <request_protocol>" <origin_server_HTTP_status> <origin_server_content_size> "<request_referrer>" "<request_user_agent>" <number_of_requests_received_since_Traefik_started> "<Traefik_frontend_name>" "<Traefik_backend_URL>" <request_duration_in_ms>ms 

bufferingSize

要以异步方式写入日志,请指定bufferingSize选项. 此选项表示Traefik在将日志行写入所选输出之前将保留在内存中的日志行数. 在某些情况下,此选项可以极大地提高演奏性能.

# Configuring a buffer of 100 lines
[accessLog]
  filePath = "/path/to/access.log"
  bufferingSize = 100
# Configuring a buffer of 100 lines
accessLog:
  filePath: "/path/to/access.log"
  bufferingSize: 100
# Configuring a buffer of 100 lines
--accesslog=true
--accesslog.filepath=/path/to/access.log
--accesslog.bufferingsize=100

Filtering

要过滤日志,您可以指定一组过滤器,这些过滤器在逻辑上是"或连接"的. 因此,指定多个过滤器将比仅指定一个保留更多的访问日志.

可用的过滤器是:

  • statusCodes ,以将访问日志限制为状态码在指定范围内的请求
  • retryAttempts ,在至少发生一次重试时保留访问日志
  • minDuration ,当请求花费的时间超过指定的持续时间时,保留访问日志
# Configuring Multiple Filters
[accessLog]
  filePath = "/path/to/access.log"
  format = "json"

  [accessLog.filters]    
    statusCodes = ["200", "300-302"]
    retryAttempts = true
    minDuration = "10ms"
# Configuring Multiple Filters
accessLog:
  filePath: "/path/to/access.log"
  format: json
  filters:    
    statusCodes:
      - "200"
      - "300-302"
    retryAttempts: true
    minDuration: "10ms"
# Configuring Multiple Filters
--accesslog=true
--accesslog.filepath=/path/to/access.log
--accesslog.format=json
--accesslog.filters.statuscodes=200,300-302
--accesslog.filters.retryattempts
--accesslog.filters.minduration=10ms

Limiting the Fields

您可以决定使用fields.namesfields.header选项将记录的字段/标题限制为给定列表

每个字段可以设置为:

  • keep价值
  • drop到下降的价值
  • redact ,以取代值"绝密"

The defaultMode for fields.header is drop .

# Limiting the Logs to Specific Fields
[accessLog]
  filePath = "/path/to/access.log"
  format = "json"

  [accessLog.fields]
    defaultMode = "keep"

    [accessLog.fields.names]
      "ClientUsername" = "drop"

    [accessLog.fields.headers]
      defaultMode = "keep"

      [accessLog.fields.headers.names]
        "User-Agent" = "redact"
        "Authorization" = "drop"
        "Content-Type" = "keep"
# Limiting the Logs to Specific Fields
accessLog:
  filePath: "/path/to/access.log"
  format: json
  fields:
    defaultMode: keep
    names:
      ClientUsername: drop
    headers:
      defaultMode: keep
      names:
          User-Agent: redact
          Authorization: drop
          Content-Type: keep
# Limiting the Logs to Specific Fields
--accesslog=true
--accesslog.filepath=/path/to/access.log
--accesslog.format=json
--accesslog.fields.defaultmode=keep
--accesslog.fields.names.ClientUsername=drop
--accesslog.fields.headers.defaultmode=keep
--accesslog.fields.headers.names.User-Agent=redact
--accesslog.fields.headers.names.Authorization=drop
--accesslog.fields.headers.names.Content-Type=keep
可用字段
Field Description
StartUTC 请求处理开始的时间.
StartLocal 请求处理开始的本地时间.
Duration 处理响应所花费的总时间(以纳秒为单位),包括原始服务器的时间,但不包括日志写入时间.
FrontendName Traefik前端的名称.
BackendName Traefik后端的名称.
BackendURL Traefik后端的URL.
BackendAddr Traefik后端的IP:端口(从BackendURL提取)
ClientAddr 原始形式的远程地址(通常为IP:port).
ClientHost 接收到客户端请求的远程IP地址.
ClientPort 接收客户端请求的远程TCP端口.
ClientUsername URL中提供的用户名(如果存在).
RequestAddr HTTP主机标头(通常为IP:port). Go API将其视为不是标头.
RequestHost HTTP主机服务器名称(不包括端口).
RequestPort HTTP主机的TCP端口.
RequestMethod HTTP方法.
RequestPath HTTP请求URI,不包括方案,主机或端口.
RequestProtocol 请求的HTTP版本.
RequestLine RequestMethod + RequestPath + RequestProtocol
RequestContentSize 客户端发送的请求实体(aka主体)中的字节数.
OriginDuration 原始服务器("上游")返回其响应所花费的时间.
OriginContentSize 原始服务器指定的内容长度;如果未指定,则为0.
OriginStatus 原始服务器返回的HTTP状态代码. 如果请求是由此Traefik实例处理的(例如,带有重定向),则该值将不存在.
OriginStatusLine OriginStatus +状态码说明
DownstreamStatus HTTP状态代码返回给客户端.
DownstreamStatusLine DownstreamStatus +状态码说明
DownstreamContentSize 返回给客户端的响应实体中的字节数. 这是" Content-Length"标头的补充,该标头可能出现在原始响应中.
RequestCount 自Traefik实例启动以来收到的请求数.
GzipRatio 实现了响应体的压缩率.
Overhead Traefik造成的处理时间开销.
RetryAttempts 重试请求的尝试次数.

Log Rotation

假定已配置,Traefik将在收到USR1信号后关闭并重新打开其日志文件. 这允许日志由外部程序(例如logrotate旋转和处理.

Warning

由于缺少USR信号,因此在Windows上不起作用.