잡 스펙의 `logs` 블록

잡 스펙의 logs 블록

logs 블록은 태스크의 stdout과 stderr에 대한 로그 순환(rotation) 정책을 구성해요. 로깅은 합리적인 기본값(아래 매개변수 섹션에 제공)으로 기본 활성화돼요. logs 블록은 Nomad가 로그 파일을 처리하는 방식을 더 세밀하게 제어할 수 있게 해요.

출처: 문서

본문

배치 job -> group -> task -> **logs**

Nomad의 로그 순환은 태스크의 stdout/stderr 출력을 alloc/logs/ 디렉터리 안의 <task-name>.<stdout/stderr>.<index> 형식 파일에 쓰는 방식으로 동작해요. 출력은 인덱스 0부터 시작해 특정 인덱스에 쓰여지고, 로그 파일이 구성된 max_file_size에 도달할 때까지 계속돼요. 그 후 index + 1에 새 파일이 생성되고 이제 거기에 로그가 쓰여져요. 로그 파일은 절대 롤오버(덮어쓰기)되지 않고, Nomad는 최대 max_files만큼의 로그를 유지하며 이를 초과하면 가장 낮은 인덱스의 로그 파일이 삭제돼요.

job "docs" {
  group "example" {
    task "server" {
      logs {
        max_files     = 10
        max_file_size = 10
        disabled      = false
      }
    }
  }
}

각 잡의 로그는 임시 디스크 공간에 쓰여져요. 디스크의 총 로그량을 늘리면 임시 디스크 크기도 늘리고 싶을 거예요. 자세한 내용은 임시 디스크 문서를 참고하세요.

로그 구성 후 로그와 상호작용하는 방법에 대한 정보는 nomad alloc logs 명령을 참고하세요.

매개변수 (Parameters)

  • max_files (int: 10) - Nomad가 stdout과 stderr 각각에 대해 유지할 순환 파일 최대 수. 각 스트림은 개별적으로 추적되므로 값 2를 지정하면 4개의 파일이 생성돼요 - stdout 2개와 stderr 2개.

  • max_file_size (int: 10) - 각 순환 파일의 최대 크기(MB). 태스크에 요청된 디스크 리소스량이 순환 파일 세트를 유지하는 데 필요한 총 디스크 공간보다 적으면 잡 제출 시 Nomad가 검증 오류를 반환해요.

  • disabled (bool: false) - 이 태스크에 로그 수집을 활성화해야 함을 지정. true로 설정하면 태스크 드라이버가 태스크의 stdout/stderr를 /dev/null(Windows에서는 NUL)에 연결해요. 애플리케이션이 원격 syslog 서버에 쓰는 것처럼 로그를 다른 방식으로 내보낼 때만 로그 수집을 비활성화해야 해요. 로그 수집이 비활성화되면 nomad alloc logs 명령과 관련 API는 오류(404 "not found")를 반환한다는 점에 유의하세요.

docker 같은 일부 태스크 드라이버는 disable_log_collection 옵션을 지원해요. 태스크 드라이버의 disable_log_collection 옵션이 true로 설정되면 태스크 logs 블록의 disabled=false를 덮어써요.

예시 (Examples)

다음 예시는 logs 블록만 보여줘요. logs 블록은 위에 나열된 배치에서만 유효하다는 점을 기억하세요.

기본값 구성 (Configure defaults)

이 예시는 기본 로깅 구성을 보여줘요. 네, 의도적으로 비어 있어요. Nomad는 위 매개변수 섹션에서 설명한 대로 합리적인 기본값으로 로깅을 자동 활성화해요.

사용자 정의 (Customization)

이 예시는 stderr와 stdout 각각에 대해 순환 파일 3개를, 각 파일 최대 5MB로 유지하도록 Nomad에 요청해요. 이에 필요한 최소 디스크 공간은 30MB예요 (stderr 3개 + stdout 3개 × 5MB = 30MB).

logs {
  max_files     = 3
  max_file_size = 5
}

더 알아보기 (Learn more)