커스텀 트레이서
커스텀 트레이서 (Custom Tracer)
Haystack를 커스텀 트레이싱 백엔드에 연결하는 방법을 알아봐요. Tracer 인터페이스를 구현하면 스팬(span)이 어떻게 만들어지고 태그가 어떻게 기록되는지 완전히 제어할 수 있어요.
출처: 문서
본문
- 기본 클래스:
Tracer와Span - 활성화 방법:
Tracer인터페이스 구현 후tracing.enable_tracing(your_tracer) - 콘텐츠 트레이싱: 선택 사항. 컴포넌트 입력·출력을 트레이싱하려면
HAYSTACK_CONTENT_TRACING_ENABLED를true로 설정 - 패키지: Haystack에 내장
- GitHub: tracer.py
개요 (Overview)
트레이싱 백엔드가 기본 지원되지 않는다면, Tracer 인터페이스를 구현해 Haystack에 연결할 수 있어요. 이렇게 하면 스팬이 어떻게 생성되고 태그가 어떻게 기록되는지 완전히 제어할 수 있어요.
사용법 (Usage)
Tracer 인터페이스를 구현하세요. 아래 코드 스니펫은 OpenTelemetry 패키지를 사용한 예시예요:
import contextlib
from collections.abc import Iterator
from typing import Any
from opentelemetry import trace
from opentelemetry.trace import NonRecordingSpan
from haystack.tracing import Tracer, Span
from haystack.tracing import utils as tracing_utils
import opentelemetry.trace
class OpenTelemetrySpan(Span):
def __init__(self, span: opentelemetry.trace.Span) -> None:
self._span = span
def set_tag(self, key: str, value: Any) -> None:
# Tracing backends usually don't support any tag value
# `coerce_tag_value` forces the value to either be a Python
# primitive (int, float, boolean, str) or tries to dump it as string.
coerced_value = tracing_utils.coerce_tag_value(value)
self._span.set_attribute(key, coerced_value)
class OpenTelemetryTracer(Tracer):
def __init__(self, tracer: opentelemetry.trace.Tracer) -> None:
self._tracer = tracer
@contextlib.contextmanager
def trace(
self,
operation_name: str,
tags: dict[str, Any] | None = None,
parent_span: Span | None = None,
) -> Iterator[Span]:
with self._tracer.start_as_current_span(operation_name) as span:
span = OpenTelemetrySpan(span)
if tags:
span.set_tags(tags)
yield span
def current_span(self) -> Span | None:
current_span = trace.get_current_span()
if isinstance(current_span, NonRecordingSpan):
return None
return OpenTelemetrySpan(current_span)
Haystack에 커스텀 트레이서를 사용하라고 알려주세요:
from haystack import tracing
haystack_tracer = OpenTelemetryTracer(tracer)
tracing.enable_tracing(haystack_tracer)
더 알아보기 (Learn more)
- Custom Tracer GitHub 소스
- Datadog — 준비된 트레이서 예시
- 다른 지원 트레이서: Logging, MLflow, Weave