추적
추적 (Tracing)
이 문서는 HBase의 분산 추적(tracing) 지원을 설명해요. HBase는 코드로 수동 구현한 tracing 지원을 추가했는데, async client, rpc, region 읽기/쓰기/스캔 연산, WAL에 tracing을 넣었어요. OpenTelemetry 기반으로 동작하며, 실제 활성화하려면 opentelemetry java agent를 붙여야 해요.
출처: 문서
본문
개요
기본적인 tracing 지원은 완료됐어요. async client, rpc, region 읽기/쓰기/스캔 연산, 그리고 WAL에 tracing을 추가했죠. 우리 코드베이스가 java agent로 계측하기엔 너무 복잡하기 때문에 opentelemetry-api를 사용해 tracing 지원을 코드로 수동 구현했어요. 하지만 tracing을 활성화하려면 여전히 opentelemetry java agent를 붙여야 한다는 점을 유의하세요. opentelemetry 계측을 제대로 구성하는 방법에 대한 자세한 내용은 OpenTelemetry 공식 사이트와 opentelemetry-java-instrumentation 문서를 참고하세요.
사용법
Tracing 활성화
hbase-env.sh에서 이 섹션을 확인하세요.
# Uncomment to enable trace, you can change the options to use other exporters such as jaeger or
# zipkin. See https://github.com/open-telemetry/opentelemetry-java-instrumentation on how to
# configure exporters and other components through system properties.
# export HBASE_TRACE_OPTS="-Dotel.resource.attributes=service.name=HBase -Dotel.traces.exporter=logging otel.metrics.exporter=none"
이 줄의 주석을 해제하면 tracing이 활성화돼요. 기본 구성은 tracing 데이터를 로그로 출력하는 것이에요. tracing 데이터를 OTel collector, jaeger, zipkin 같은 다른 tracing 시스템으로 내보내는 방법, service.name이 무엇을 의미하는지, 샘플링 비율을 바꾸는 방법 등에 대한 자세한 내용은 opentelemetry-java-instrumentation 문서를 참고하세요.
LoggingSpanExporter는 tracing 데이터를 기록하는 데 java.util.logging(jul)을 사용하고, 로거는 opentelemetry java agent에서 초기화되는데 이는 우리의 jul to slf4j 브리지 초기화보다 앞서는 것 같아요. 그래서 tracing 데이터는 항상 콘솔에 기록될 거예요. 로깅 대신 다른 tracing 시스템을 사용해 tracing 데이터를 수집하고 확인하는 것을 강력히 권장해요.
성능 영향
HBASE-25658의 결과에 따르면 성능 영향은 미미해요. 물론 테스트 클러스터가 과부하 상태가 아니었으므로, tracing 활성화가 성능에 영향을 준다면 샘플링 비율을 낮춰 보세요. sampler 구성에 대한 문서를 참고하세요.