기능

관측 (OTel)

세션 진행을 어디서 보는지, 그리고 OTLP 예제 수집기를 띄워 보는 법

Werft는 설정하기 전까지 OpenTelemetry trace를 내보내지 않는다(기본은 꺼짐). 켜는 키는 API 서버 운영 문서에 있다. 아래 예제 수집기는 OTLP를 받는 쪽을 띄워 보는 용도다.

지금 볼 수 있는 곳

무엇어디서
세션에서 일어난 일(모델 답변, 도구 호출과 결과, 권한 요청, 상태 변화)이벤트 스트림 GET /v1/sessions/{id}/events(스트리밍 받기)
명령 하나의 결과receipt GET /v1/receipts/{id}(receipt)
비용과 tokenGET /v1/sessions/{id}/usage(상태와 수명)
서버 상태GET /readyz, API·worker의 stdout JSON 로그

이벤트는 DB에 저장된 정본이다. 엔진 메시지의 비밀처럼 보이는 값은 저장 전에 [REDACTED]로 가려진다. 이벤트는 그 세션을 볼 수 있는 sessions:read 주체만 읽는다.

curl -sS -w '\n' "$API/readyz"
{"status":"ready","checks":{"database":"ok","schema":"ok","config":"ok"}}

예제 수집기 띄우기

저장소의 infra/observability/에 수집기 예제가 둘 있다. 둘 다 Werft 스택과 따로 뜨는 compose project이고, 앞에 OpenTelemetry Collector를 두어 OTLP/HTTP를 받는다. 한 컴퓨터에서 확인하는 용도이고 운영 구성이 아니다. 포트는 모두 loopback에만 열린다.

예제OTLP/HTTP 받는 곳화면받는 신호
Grafana LGTM (infra/observability/lgtm/)http://127.0.0.1:26318http://localhost:26000trace, 로그, 메트릭
Langfuse (infra/observability/langfuse/)http://127.0.0.1:25318http://localhost:25000trace

아래는 Grafana LGTM이다. 저장소 루트에서 실행한다.

docker compose -p werft-obs-lgtm -f infra/observability/lgtm/compose.yml up -d --wait

테스트 trace 보내기

send-test-span.sh는 앞으로 Werft가 보낼 모양의 가짜 trace 하나를 보낸다. werft.turn 아래에 모델 호출(werft.llm_request)과 도구 호출(werft.tool)이 있다. --with-log는 같은 trace에 묶인 로그 한 줄도 보낸다.

infra/observability/send-test-span.sh http://127.0.0.1:26318 --with-log | tee span.txt
TRACE_ID=$(sed -n 's/^trace_id=\([0-9a-f]*\) .*/\1/p' span.txt)
trace_id=… session_id=ses_test_…

Grafana(http://localhost:26000, 로그인 없음)의 Explore → Tempo에서 trace id로 찾는다. 한 세션의 turn을 모두 보려면 TraceQL { span.werft.session_id = "<session_id>" }로 검색한다. 로그는 Explore → Loki에서 {service_name="werft-api"}로 찾는다. API로도 확인할 수 있다.

until curl -sf "http://127.0.0.1:26000/api/datasources/proxy/uid/tempo/api/traces/$TRACE_ID" -o trace.json; do
  sleep 2
done
jq -r '[.batches[].scopeSpans[].spans[].name] | sort | join(" ")' trace.json
werft.llm_request werft.tool werft.turn

내리기

-v는 저장한 trace까지 지운다.

docker compose -p werft-obs-lgtm -f infra/observability/lgtm/compose.yml down -v

Langfuse 예제의 계정과 키, 화면에서 찾는 법은 세션 데이터가 흐르는 길에 있다.

다음 단계

이 페이지