트레이스 샘플링

트레이스 샘플링 (Trace Sampling)

트레이스의 일부만 Confident AI로 보내는 방법을 다루는 페이지예요. 보내는 트레이스의 비율을 제어해서 대용량 애플리케이션에서 보내는 데이터의 양과 그에 따른 비용을 줄이면서도 시스템 성능에 대한 가시성은 유지할 수 있게 해준답니다.

출처: 문서

본문

개요 (Overview)

샘플링(Sampling)을 쓰면 어떤 비율의 트레이스를 Confident의 관측소로 보낼지 제어할 수 있어요.

이것은 보내는 데이터의 양 — 그리고 그에 따르는 비용 — 을 줄이면서도 시스템 성능에 대한 가시성을 유지하고 싶은 대용량 애플리케이션에 유용해요.

샘플링은 각 트레이스의 시작 시점에 한 번 결정돼요. 즉 트레이스는 완전히 내보내지거나 전혀 내보내지지 않아요 — Observatory에서 반쪽짜리 트레이스를 보게 될 일은 없어요.

요청 중에 발견한 조건에 따라 버리는 것에 대해서는 트레이스 버리기(dropping traces)를 참고하세요.

샘플 비율 구성 (Configure Sample Rate)

CONFIDENT_SAMPLE_RATE 환경 변수를 설정해서 샘플링 비율을 구성해요. 이 값은 관측소로 보내질 트레이스의 비율을 나타내요. 값은 0과 1 사이의 비율이고, 기본값 1.0은 모든 트레이스를 내보내요.

export CONFIDENT_SAMPLE_RATE=0.5

또는 코드에서 init()에 sample_rate / sampleRate를 전달해 직접 설정할 수도 있어요:

Python

from openai import OpenAI
from confident_trace import init, span, shutdown

init(sample_rate=0.5)
client = OpenAI()

@span(type="agent")
def llm_app(query: str):
    return client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": query}]
    ).choices[0].message.content

try:
    for _ in range(10):
        llm_app("Write me a poem.")  # roughly half of these traces will be sent
finally:
    shutdown()

TypeScript

import OpenAI from "openai";
import { init, span } from "confident-trace";

const runtime = init({ sampleRate: 0.5 });
const openai = new OpenAI();

const llmApp = span({ name: "llm_app", type: "agent" }, async (query: string) => {
  const res = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [{ role: "user", content: query }],
  });
  return res.choices[0].message.content;
});

try {
  for (let i = 0; i < 10; i++) {
    await llmApp("Write me a poem."); // roughly half of these traces will be sent
  }
} finally {
  await runtime.shutdown();
}

Node preload로 진입점을 실행하는 걸 잊지 마세요.

> 트레이스는 무작위로 샘플링되고 나머지는 기록되기 전에 버려지므로, 샘플링에서 제외된 트레이스는 비용이 들지 않아요 — 내보내기 대역폭도, 사용량도 없죠.

명시적인 sample_rate 인자는 항상 CONFIDENT_SAMPLE_RATE를 덮어써요. 흔한 패턴은 인자를 빼고 배포별로 환경 변수를 설정하는 거예요 — 스테이징에서는 1.0으로 전부 보고, 프로덕션에서는 더 낮은 값으로 두는 식이죠. 전체 우선순위 순서는 configure init()을 참고하세요.

다음 단계 (Next Steps)

샘플링은 전반적인 볼륨을 제어해요. 개별 요청이나 각 트레이스 안의 내용을 더 세밀하게 제어하려면 다음을 참고하세요:

Drop Traces

헬스 체크, 내부 테스트 요청, 그리고 Observatory에 넣고 싶지 않은 기타 노이즈에 대해 트레이싱을 아예 건너뛰어요.

Mask Sensitive Data

트레이스가 프로세스를 떠나기 전에 PII를 마스킹하고 페이로드 크기를 제한해요.

더 알아보기