로깅
로깅 (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로 관측 문서를 이어서 읽어 보세요.