본문 바로가기
WIKI 기술 지식 베이스

Traefik 로그 문서

원문 보기 위키 갱신

Traefik 로그 문서 (Traefik Logs Documentation)

출처: Traefik Logs Documentation

본문

로그 & 액세스 로그 (Logs & AccessLogs)

로그 (Logs)

로그(Logs)는 Traefik 자체에 일어나는 모든 일(시작, 설정, 이벤트, 종료 등)을 다뤄요.

설정 예시 (Configuration Example)

파일 (YAML)

log:
  filePath: "/path/to/log-file.log"
  format: json
  level: INFO

파일 (TOML)

[log]
  filePath = "/path/to/log-file.log"
  format = "json"
  level = "INFO"

CLI

--log.filePath=/path/to/log-file.log
--log.format=json
--log.level=INFO

설정 옵션 (Configuration Options)

아래 섹션은 정적 설정으로 Traefik 로그를 구성하는 방법을 설명해요.

| 필드 (Field) | 설명 (Description) | 기본값 (Default) | 필수 (Required) | | log.filePath | 기본적으로 로그는 표준 출력으로 작성돼요. 대신 filePath 옵션으로 파일 경로를 설정할 수 있어요. filePath가 지정되면 Traefik은 그 파일에만 로그를 써요 (표준 출력에는 안 씀). | - | 아니오 (No) | | log.format | 로그 형식(common 또는 json)이에요. common 형식으로 표시되는 필드는 커스터마이즈할 수 없어요. | "common" | 아니오 (No) | | log.level | 로그 레벨(TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC)이에요. | ERROR | 아니오 (No) | | log.noColor | 형식 common을 사용할 때 컬러 출력을 비활성화해요. | false | 아니오 (No) | | log.maxSize | 회전되기 전 로그 파일의 최대 크기(메가바이트)예요. | 100MB | 아니오 (No) | | log.maxAge | 파일 이름에 인코딩된 타임스탬프 기준으로 오래된 로그 파일을 보관할 최대 일수예요. 하루는 24시간으로 정의되며, 서머타임·윤초 등 때문에 달력 일수와 정확히 일치하지 않을 수 있어요. 기본적으로 파일은 나이에 따라 제거되지 않아요. | 0 | 아니오 (No) | | log.maxBackups | 보관할 최대 이전 로그 파일 수예요. 기본값은 모든 이전 로그 파일을 보관하는 거예요. | 0 | 아니오 (No) | | log.compress | 회전 후 로그 파일을 gzip으로 압축해요. 로그 회전이 활성화되면 압축은 항상 활성화됩니다. 이 필드는 효과가 없어요. | false | 아니오 (No) |

OpenTelemetry

Traefik은 로깅용 OpenTelemetry를 지원해요. OpenTelemetry를 활성화하려면 정적 설정에 다음을 설정해야 해요:

파일 (YAML)

experimental:
  otlpLogs: true

파일 (TOML)

[experimental]
  otlpLogs = true

CLI

--experimental.otlpLogs=true

경고 (Warning)

이것은 실험적 기능이에요.

Stdio 로그는 계속 사용 가능해요 (Stdio logs remain available)

OTLP 로깅이 활성화되면 표준 출력(stdio) 로그는 여전히 사용 가능하며 OTLP 내보내기와 함께 계속 작성돼요.

설정 예시 (Configuration Example)

파일 (YAML)

experimental:
  otlpLogs: true

log:
  otlp:
    http:
      endpoint: https://collector:4318/v1/logs
      headers:
        Authorization: Bearer auth_a...YRdL

파일 (TOML)

[experimental]
  otlpLogs = true

[log.otlp]
  http.endpoint = "https://collector:4318/v1/logs"
  http.headers.Authorization = "Bearer auth_asKXRhIMplM7El1JENjrotGouS1LYRdL"

CLI

--experimental.otlpLogs=true
--log.otlp.http.endpoint=https://collector:4318/v1/logs
--log.otlp.http.headers.Authorization=Bearer auth_asKXRhIMplM7El1JENjrotGouS1LYRdL

설정 옵션 (Configuration Options)

| 필드 (Field) | 설명 (Description) | 기본값 (Default) | 필수 (Required) | | log.otlp.serviceName | 선택된 백엔드에서 사용하는 서비스 이름이에요. | "traefik" | 아니오 (No) | | log.otlp.resourceAttributes | 컬렉터로 보낼 추가 리소스 속성을 정의해요. 자세한 내용은 resourceAttributes를 참고하세요. | [] | 아니오 (No) | | log.otlp.http | 익스포터가 HTTP를 사용해 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. | | 아니오 (No) | | log.otlp.http.endpoint | OpenTelemetry 컬렉터의 끝점이에요. (형식=://:) https://localhost:4318 | 아니오 (No) |

log.otlp.http.headers 익스포터가 로그와 함께 OpenTelemetry 컬렉터로 보내는 추가 헤더예요. [ ] | 아니오 (No) |

log.otlp.http.tls 익스포터가 로그를 OpenTelemetry 컬렉터로 보낼 때 사용하는 클라이언트 TLS 설정을 정의해요. | | 아니오 (No) |

log.otlp.http.tls.ca OpenTelemetry 컬렉터와의 보안 연결에 사용하는 인증 기관의 경로로, 기본값은 시스템 번들이에요. | | 아니오 (No) |

log.otlp.http.tls.cert OpenTelemetry 컬렉터에 사용할 인증서의 경로예요. | | 아니오 (No) |

log.otlp.http.tls.key OpenTelemetry 컬렉터에 사용할 키의 경로예요. | | 아니오 (No) |

log.otlp.http.tls.insecureSkipVerify OpenTelemetry 컬렉터가 인증서의 호스트 이름과 관계없이 서버가 제시하는 어떤 인증서든 수락하도록 지시해요. false | 아니오 (No) |

log.otlp.grpc 익스포터가 gRPC를 사용해 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. | | 아니오 (No) |

log.otlp.grpc.endpoint OpenTelemetry 컬렉터의 끝점이에요. (형식=:) localhost:4317 | 아니오 (No) |

log.otlp.grpc.headers 익스포터가 로그와 함께 OpenTelemetry 컬렉터로 보내는 추가 헤더예요. [ ] | 아니오 (No) |

log.otlp.grpc.insecure 익스포터가 안전하지 않은 프로토콜을 사용해 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. false | 아니오 (No) |

log.otlp.grpc.tls 익스포터가 로그를 OpenTelemetry 컬렉터로 보낼 때 사용하는 클라이언트 TLS 설정을 정의해요. | | 아니오 (No) |

log.otlp.grpc.tls.ca OpenTelemetry 컬렉터와의 보안 연결에 사용하는 인증 기관의 경로로, 기본값은 시스템 번들이에요. | | 아니오 (No) |

log.otlp.grpc.tls.cert OpenTelemetry 컬렉터에 사용할 인증서의 경로예요. | | 아니오 (No) |

log.otlp.grpc.tls.key OpenTelemetry 컬렉터에 사용할 키의 경로예요. | | 아니오 (No) |

log.otlp.grpc.tls.insecureSkipVerify OpenTelemetry 컬렉터가 인증서의 호스트 이름과 관계없이 서버가 제시하는 어떤 인증서든 수락하도록 지시해요. false | 아니오 (No) |

resourceAttributes

resourceAttributes 옵션은 트레이스와 함께 보내는 리소스 속성을 설정하게 해 줘요. Traefik은 리소스 속성을 설정하기 위해 OTEL_RESOURCE_ATTRIBUTES 환경 변수도 지원해요.

Kubernetes 리소스 속성 감지 (Kubernetes Resource Attributes Detection)

추가로 Traefik은 Kubernetes 클러스터에서 실행될 때 다음 Kubernetes 리소스 속성을 자동으로 발견해요:

  • k8s.namespace.name

  • k8s.pod.uid

  • k8s.pod.name

이 자동 감지는 예를 들어 Traefik 파드가 호스트 네트워크 모드로 실행되는 경우처럼 실패할 수 있다는 점을 주의하세요. 그런 경우 옵션이나 환경 변수로 속성을 직접 제공해야 해요.

액세스 로그 (AccessLogs)

액세스 로그(Access logs)는 Traefik이 처리한 요청(request)에 일어나는 모든 일을 다뤄요.

Stdio 로그는 OTLP 내보내기와 함께 기본적으로 활성화되지 않아요 (Stdio logs are not enabled by default alongside OTLP exports)

Stdio 액세스 로그를 사용하려면 accessLog.dualOutput 옵션을 사용하세요.

설정 예시 (Configuration Example)

파일 (YAML)

accessLog:
  # JSON format
  format: json
  # Filter on status codes, retry attempts and minimal duration
  filters:
    statusCodes:
      - "200"
      - "300-302"
    retryAttempts: true
    minDuration: "10ms"
  fields:
    # Keep all the fields by default
    defaultMode: keep
    names:
      # Drop the Field ClientUserName
      ClientUsername: drop
    headers:
      # Keep all the headers by default
      defaultMode: keep
      names:
        # Redact the User-Agent header value
        User-Agent: redact
        # Drop the Authorization header value
        Authorization: drop
    queryParameters:
      # Drop all query parameters
      defaultMode: drop

파일 (TOML)

[accessLog]
  format = "json"

  [accessLog.filters]
    statusCodes = [ "200", "300-302" ]
    retryAttempts = true
    minDuration = "10ms"

  [accessLog.fields]
    defaultMode = "keep"

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

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

      [accessLog.fields.headers.names]
        User-Agent = "redact"
        Authorization = "drop"

    [accessLog.fields.queryParameters]
      defaultMode = "drop"

CLI

--accesslog=true
--accesslog.dualoutput=true
--accesslog.format=json
--accesslog.filters.statuscodes=200,300-302
--accesslog.filters.retryattempts
--accesslog.filters.minduration=10ms
--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.queryparameters.defaultmode=drop

설정 옵션 (Configuration Options)

아래 섹션은 정적 설정으로 Traefik 액세스 로그를 구성하는 방법을 설명해요.

| 필드 (Field) | 설명 (Description) | 기본값 (Default) | 필수 (Required) | | accesslog.filePath | 기본적으로 액세스 로그는 표준 출력으로 작성돼요. 대신 filePath 옵션으로 파일 경로를 설정할 수 있어요. | | 아니오 (No) | | accesslog.dualOutput | OTLP가 설정되어 있어도 Stdio 로깅을 강제해요. 기본적으로 성능상의 이유로 OTLP가 활성화되면 Stdio 로깅은 비활성화돼요. | false | 아니오 (No) | | accesslog.format | 기본적으로 로그는 Traefik Common Log Format(CLF)으로 작성돼요. 사용 가능한 형식: common(Traefik 확장 CLF), genericCLF(분석기와 호환되는 표준 CLF), 또는 json. 주어진 형식이 지원되지 않으면 기본값(common)이 대신 사용돼요. | "common" | 아니오 (No) | | accesslog.bufferingSize | 액세스 로그를 비동기로 처리하려면 bufferingSize를 0보다 큰 값으로 설정하세요. 이 값은 메모리 내 큐의 용량(로그 줄 수)을 지정해요. Traefik은 큐에 있는 로그 줄을 계속 쓰며, 큐가 가득 찰 때까지 기다리지 않아요. 더 큰 큐는 부하가 있을 때 액세스 로깅이 요청을 막을 가능성을 줄여줘요. | 0 | 아니오 (No) | | accesslog.addInternals | 내부 리소스(예: ping@internal)에 대한 액세스 로그를 활성화해요. | false | 아니오 (No) | | accesslog.filters.statusCodes | 지정된 범위의 상태 코드를 가진 요청으로 액세스 로그를 제한해요. | [ ] | 아니오 (No) | | accesslog.filters.retryAttempts | 재시도가 한 번 이상 발생했을 때 액세스 로그를 유지해요. | false | 아니오 (No) | | accesslog.filters.minDuration | 요청이 지정된 시간보다 오래 걸릴 때 액세스 로그를 유지해요 (초 단위 또는 유효한 기간 형식으로 제공, time.ParseDuration 참고). | 0 | 아니오 (No) | | accesslog.fields.defaultMode | 액세스 로그 필드에 기본적으로 적용할 모드(keep 또는 drop)예요. | keep | 아니오 (No) | | accesslog.fields.names | 액세스 로그에 표시할 필드 목록을 설정해요 (형식 name:mode). 사용 가능한 필드 목록은 여기에서. | [ ] | 아니오 (No) | | accesslog.fields.headers.defaultMode | 액세스 로그 헤더에 기본적으로 적용할 모드(keep, redact 또는 drop)예요. | drop | 아니오 (No) | | accesslog.fields.headers.names | 액세스 로그에 표시할 헤더 목록을 설정해요 (형식 name:mode). | [ ] | 아니오 (No) | | accesslog.fields.queryParameters.defaultMode | 액세스 로그 쿼리 파라미터에 기본적으로 적용할 모드(keep 또는 drop)예요. | keep | 아니오 (No) |

OpenTelemetry

Traefik은 액세스 로그용 OpenTelemetry를 지원해요. OpenTelemetry를 활성화하려면 정적 설정에 다음을 설정해야 해요:

파일 (YAML)

experimental:
  otlpLogs: true

파일 (TOML)

[experimental]
  otlpLogs = true

CLI

--experimental.otlpLogs=true

경고 (Warning)

이것은 실험적 기능이에요.

설정 예시 (Configuration Example)

파일 (YAML)

experimental:
  otlpLogs: true

accesslog:
  # Keep Stdio logs alongside OTEL logging
  dualOutput: true
  otlp:
    http:
      endpoint: https://collector:4318/v1/logs
      headers:
        Authorization: Bearer auth_a...YRdL

파일 (TOML)

[experimental]
  otlpLogs = true

[accessLog]
  dualOutput = true

[accesslog.otlp]
  http.endpoint = "https://collector:4318/v1/logs"
  http.headers.Authorization = "Bearer auth_asKXRhIMplM7El1JENjrotGouS1LYRdL"

CLI

--experimental.otlpLogs=true
--accesslog.otlp.http.endpoint=https://collector:4318/v1/logs
--accesslog.otlp.http.headers.Authorization=Bearer auth_asKXRhIMplM7El1JENjrotGouS1LYRdL

설정 옵션 (Configuration Options)

| 필드 (Field) | 설명 (Description) | 기본값 (Default) | 필수 (Required) | | accesslog.otlp.serviceName | 서비스 이름 리소스 속성을 정의해요. | "traefik" | 아니오 (No) | | accesslog.otlp.resourceAttributes | 컬렉터로 보낼 추가 리소스 속성을 정의해요. 자세한 내용은 resourceAttributes를 참고하세요. | [] | 아니오 (No) | | accesslog.otlp.http | 익스포터가 HTTP를 사용해 액세스 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. | | 아니오 (No) | | accesslog.otlp.http.endpoint | OpenTelemetry 컬렉터의 끝점이에요. (형식=://:) https://localhost:4318 | 아니오 (No) |

accesslog.otlp.http.headers 익스포터가 액세스 로그와 함께 OpenTelemetry 컬렉터로 보내는 추가 헤더예요. [ ] | 아니오 (No) |

accesslog.otlp.http.tls 익스포터가 액세스 로그를 OpenTelemetry 컬렉터로 보낼 때 사용하는 클라이언트 TLS 설정을 정의해요. | | 아니오 (No) |

accesslog.otlp.http.tls.ca OpenTelemetry 컬렉터와의 보안 연결에 사용하는 인증 기관의 경로로, 기본값은 시스템 번들이에요. | | 아니오 (No) |

accesslog.otlp.http.tls.cert OpenTelemetry 컬렉터에 사용할 인증서의 경로예요. | | 아니오 (No) |

accesslog.otlp.http.tls.key OpenTelemetry 컬렉터에 사용할 키의 경로예요. | | 아니오 (No) |

accesslog.otlp.http.tls.insecureSkipVerify OpenTelemetry 컬렉터가 인증서의 호스트 이름과 관계없이 서버가 제시하는 어떤 인증서든 수락하도록 지시해요. false | 아니오 (No) |

accesslog.otlp.grpc 익스포터가 gRPC를 사용해 액세스 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. | | 아니오 (No) |

accesslog.otlp.grpc.endpoint OpenTelemetry 컬렉터의 끝점이에요. (형식=:) localhost:4317 | 아니오 (No) |

accesslog.otlp.grpc.headers 익스포터가 액세스 로그와 함께 OpenTelemetry 컬렉터로 보내는 추가 헤더예요. [ ] | 아니오 (No) |

accesslog.otlp.grpc.insecure 익스포터가 안전하지 않은 프로토콜을 사용해 액세스 로그를 OpenTelemetry 컬렉터로 보내도록 지시해요. false | 아니오 (No) |

accesslog.otlp.grpc.tls 익스포터가 액세스 로그를 OpenTelemetry 컬렉터로 보낼 때 사용하는 클라이언트 TLS 설정을 정의해요. | | 아니오 (No) |

accesslog.otlp.grpc.tls.ca OpenTelemetry 컬렉터와의 보안 연결에 사용하는 인증 기관의 경로로, 기본값은 시스템 번들이에요. | | 아니오 (No) |

accesslog.otlp.grpc.tls.cert OpenTelemetry 컬렉터에 사용할 인증서의 경로예요. | | 아니오 (No) |

accesslog.otlp.grpc.tls.key OpenTelemetry 컬렉터에 사용할 키의 경로예요. | | 아니오 (No) |

accesslog.otlp.grpc.tls.insecureSkipVerify OpenTelemetry 컬렉터가 인증서의 호스트 이름과 관계없이 서버가 제시하는 어떤 인증서든 수락하도록 지시해요. false | 아니오 (No) |

resourceAttributes

resourceAttributes 옵션은 트레이스와 함께 보내는 리소스 속성을 설정하게 해 줘요. Traefik은 리소스 속성을 설정하기 위해 OTEL_RESOURCE_ATTRIBUTES 환경 변수도 지원해요.

Kubernetes 리소스 속성 감지 (Kubernetes Resource Attributes Detection)

추가로 Traefik은 Kubernetes 클러스터에서 실행될 때 다음 Kubernetes 리소스 속성을 자동으로 발견해요:

  • k8s.namespace.name

  • k8s.pod.uid

  • k8s.pod.name

이 자동 감지는 예를 들어 Traefik 파드가 호스트 네트워크 모드로 실행되는 경우처럼 실패할 수 있다는 점을 주의하세요. 그런 경우 옵션이나 환경 변수로 속성을 직접 제공해야 해요.

Traefik CLF 형식 필드 (Traefik CLF format fields)

이것은 Traefik이 제공하는 기본 형식이에요. Traefik CLF 형식으로 표시되는 필드는 아래와 같아요:

 -  [] 
"  "   
"" "" 
"" "" ms

``은 다운스트림 상태(downstream status)예요.

두 CLF 형식 모두에서 ``은 DownstreamStatus, 즉 클라이언트로 보내는 상태예요. 백엔드 상태(OriginStatus)는 json 형식에서만 사용할 수 있어요.

Generic CLF 형식 필드 (Generic CLF format fields)

generic CLF 형식으로 표시되는 필드는 아래와 같아요:

 -  [] 
"  "   
"" ""

JSON 형식 필드 (JSON format fields)

| 필드 (Field) | 설명 (Description) | | StartUTC | 요청 처리가 시작된 시간이에요. | | StartLocal | 요청 처리가 시작된 로컬 시간이에요. | | Duration | 응답 처리에 걸린 총 시간(나노초)이에요. 오리진 서버의 시간을 포함하지만 로그 작성 시간은 포함하지 않아요. | | RouterName | Traefik 라우터의 이름이에요. | | ServiceName | Traefik 백엔드의 이름이에요. | | ServiceURL | Traefik 백엔드의 URL이에요. | | ServiceAddr | Traefik 백엔드의 IP:포트예요 (ServiceURL에서 추출). | | ClientAddr | 원래 형태의 원격 주소예요 (보통 IP:포트). | | ClientHost | 클라이언트 요청을 받은 원격 IP 주소예요. | | ClientPort | 클라이언트 요청을 받은 원격 TCP 포트예요. | | ClientUsername | URL에 제공된 사용자 이름이에요 (있을 경우). | | RequestAddr | HTTP Host 헤더예요 (보통 IP:포트). Go API는 이것을 헤더로 취급하지 않아요. | | RequestHost | HTTP Host 서버 이름이에요 (포트 제외). | | RequestPort | HTTP Host의 TCP 포트예요. | | RequestMethod | HTTP 메서드예요. | | RequestPath | 스킴, 호스트, 포트를 제외한 HTTP 요청 URI예요. | | RequestProtocol | 요청된 HTTP 버전이에요. | | RequestScheme | 요청된 HTTP 스킴 http 또는 https예요. | | RequestLine | RequestMethod + RequestPath + RequestProtocol이에요. | | RequestContentSize | 클라이언트가 보낸 요청 엔티티(본문)의 바이트 수예요. | | OriginDuration | 오리진 서버('업스트림')가 응답을 반환하는 데 걸린 시간(나노초)이에요. | | OriginContentSize | 오리진 서버가 지정한 콘텐츠 길이, 또는 지정되지 않으면 0이에요. | | OriginStatus | 요청을 백엔드로 프록시한 결과의 HTTP 상태 코드예요. 백엔드가 반환한 것이거나, 서버에 도달할 수 없을 때 계산된 것(502, 504, ...)이에요. Origin vs. Downstream Status 참고. | | OriginStatusLine | OriginStatus + 상태 코드 설명이에요. | | DownstreamStatus | 미들웨어 체인이 실행된 뒤 클라이언트로 보내는 HTTP 상태 코드예요. Origin vs. Downstream Status 참고. | | DownstreamStatusLine | DownstreamStatus와 상태 코드 설명이에요. | | DownstreamContentSize | 클라이언트로 반환된 응답 엔티티의 바이트 수예요. 이는 오리진 응답에 있을 수 있는 "Content-Length" 헤더에 추가되는 값이에요. | | RequestCount | Traefik 인스턴스가 시작된 이후 받은 요청 수예요. | | GzipRatio | 달성된 응답 본문 압축 비율이에요. | | Overhead | Traefik이 일으키는 처리 시간 오버헤드(나노초)예요. | | RetryAttempts | 요청이 재시도된 횟수예요. | | TLSVersion | 연결이 사용한 TLS 버전이에요 (예: 1.2) (연결이 TLS인 경우). | | TLSCipher | 연결이 사용한 TLS 암호화(cipher)예요 (예: TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA) (연결이 TLS인 경우). | | TLSClientSubject | TLS 클라이언트 인증서 Subject의 문자열 표현이에요 (예: CN=username,O=organization). | | KubernetesIngressNamespace | 라우터가 처리하는 Kubernetes Ingress 리소스의 네임스페이스예요. 라우터가 Kubernetes Ingress 또는 Kubernetes Ingress Nginx 프로바이더에서 비롯될 때 방출돼요. | | KubernetesIngressName | 라우터가 처리하는 Kubernetes Ingress 리소스의 이름이에요. 라우터가 Kubernetes Ingress 또는 Kubernetes Ingress Nginx 프로바이더에서 비롯될 때 방출돼요. | | KubernetesIngressRouteNamespace | 라우터가 처리하는 Kubernetes IngressRoute(CRD)의 네임스페이스예요. 라우터가 Kubernetes CRD 프로바이더에서 비롯될 때 방출돼요. | | KubernetesIngressRouteName | 라우터가 처리하는 Kubernetes IngressRoute(CRD)의 이름이에요. 라우터가 Kubernetes CRD 프로바이더에서 비롯될 때 방출돼요. | | KubernetesServiceNamespace | 요청을 처리한 Kubernetes Service의 네임스페이스예요. 모든 Kubernetes 프로바이더에서 사용 가능해요. 로드 밸런싱 전략이 선택한 실제 백엔드에서 요청별로 스탬프되므로, 다중 서비스 라우트, TraefikService 가중/미러링, 크로스 네임스페이스 참조에서도 실제 대상을 반영해요. | | KubernetesServiceName | 요청을 처리한 Kubernetes Service의 이름이에요. 요청별 의미는 KubernetesServiceNamespace 참고. | | KubernetesServicePort | 요청을 처리한 Kubernetes Service의 포트예요. 요청별 의미는 KubernetesServiceNamespace 참고. |

로그 회전 (Log Rotation)

Traefik은 액세스 로그 파일을 회전하지 않아요. Traefik이 USR1 신호를 받으면 액세스 로그 파일을 닫고 다시 연다. 이를 통해 logrotate 같은 외부 프로그램이 액세스 로그 파일을 회전할 수 있어요.

USR1 신호는 Traefik 로그 파일에는 효과가 없어요. Traefik은 log.maxSize, log.maxAge, log.maxBackups 옵션으로 Traefik 로그 파일을 회전해요.

경고 (Warning)

이것은 USR 신호가 없어서 Windows에서는 동작하지 않아요.

시간대 (Time Zones)

Traefik은 기본적으로 각 로그 줄을 UTC 시간으로 타임스탬프를 찍어요.

환경에서 다음 설정이 이루어졌는지 확인하면 Traefik이 특정 시간대로 타임스탬프를 찍도록 구성할 수 있어요:

  • /etc/localtime 또는 /usr/share/zoneinfo(배포판에 따라)에 시간대 데이터를 제공하거나, 환경 변수 TZ를 원하는 시간대로 설정하세요.

  • StartUTC라는 필드를 버리고 StartLocal 필드를 지정하세요 (기본 Common Log Format(CLF)과 JSON 모두에서 사용 가능): accesslog.fields.names.StartUTC=drop.

Docker Compose를 활용한 예시:

services:
  traefik:
    image: traefik:v3.7
    environment:
      - TZ=US/Alaska
    command:
      - --accesslog.fields.names.StartUTC=drop
      - --providers.docker
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

운영 환경에서 Traefik OSS를 사용하고 계신가요? (Using Traefik OSS in Production?)

직장에서 Traefik을 사용하고 있다면, Traefik OSS에 엔터프라이즈급 API 게이트웨이 기능이나 상업적 지원을 추가하는 것을 고려해 보세요.

  • API 게이트웨이 데모 영상 보기 (Watch our API Gateway Demo Video)

  • 24/7/365 OSS 지원 요청 (Request 24/7/365 OSS Support)

Traefik OSS에 API 게이트웨이 기능을 추가하는 것은 빠르고 매끄러워요. 교체(rip and replace) 없이 모든 설정이 그대로 유지되며, 이 짧은 영상을 통해 실제 동작을 확인할 수 있어요.

더 알아보기 (Learn more)