로깅

로깅 (Logging)

Trino는 실행 중인 시스템을 이해하고 모니터링하기 위한 여러 기능을 제공하는데, 로깅과 그 설정은 Trino를 운영하고 트러블슈팅하는 데 중요한 부분이에요.

출처: 문서

본문

Trino는 OpenTelemetry로 관측이나 JMX로 모니터링 같은 다양한 기능을 제공해서 실행 중인 시스템을 더 잘 이해하고 모니터링할 수 있게 해 줘요.

설정 (Configuration)

Trino 애플리케이션 로깅은 선택 사항이며, 런처(launcher)가 지정한 Trino 설치 etc 설정 디렉토리의 log.properties 파일에서 설정해요.

이 파일을 이용해 특정 로거를 추가하고 최소 로그 레벨을 지정할 수 있어요. 모든 로거에는 이름이 있는데, 보통 그 로거를 사용하는 클래스의 정규화된 이름(full qualified name)이에요. 로거는 Java 패키지처럼 이름의 점(.)을 기준으로 계층 구조를 가져요. 네 가지 로그 레벨은 DEBUG, INFO, WARN, ERROR이며, 자세함이 줄어드는 순서로 정렬돼 있어요.

예를 들어 다음과 같은 로그 레벨 파일을 생각해 볼게요:

io.trino=WARN
io.trino.plugin.iceberg=DEBUG
io.trino.parquet=DEBUG

이 설정은 전체 Trino는 WARN 이상만 남기면서도, iceberg 플러그인과 parquet 모듈은 DEBUG 수준까지 상세하게 남기게 해 줘요. 이렇게 하면 특정 모듈만 세밀하게 추적할 수 있어요.

Trino는 로그에 구조화된 필드를 추가할 수도 있어요. node.annotation-file 설정으로 주석(annotation) 파일을 지정하면 로그에 포함할 커스텀 키-값 쌍을 정의할 수 있어요:

host_ip=1.2.3.4
service_name=trino
node_name=${ENV:MY_NODE_NAME}
pod_name=${ENV:MY_POD_NAME}
pod_namespace=${ENV:MY_POD_NAMESPACE}

로그를 TCP로 전송해 외부에서 수집할 수도 있어요. 예를 들어 fluent-bit가 JSON 형식의 로그를 받도록 설정했다면:

pipeline:
  inputs:
  - name: tcp
    tag: trino
    listen: 0.0.0.0
    port: 5170
    buffer_size: 2048
    format: json
  outputs:
  - name: stdout
    match: '*'

fluent-bit를 실행하고:

fluent-bit -c config.yaml

Trino config.properties에서 로그를 해당 TCP 엔드포인트로 보내도록 설정해요:

log.path=tcp://localhost:5170
log.format=json
node.annotation-file=etc/annotations.properties

주석 파일에는 이런 값들을 넣을 수 있어요:

host_ip=1.2.3.4
service_name=trino
pod_name=${ENV:HOSTNAME}

더 알아보기 (Learn more)

다른 관측 기능이 궁금하다면 OpenTelemetry로 관측 문서를 이어서 읽어 보세요.