트레이스 모니터
트레이스 모니터 (Trace Monitors)
품질·신뢰성·지연·비용·분류기 결과 전반의 이상(anomaly)과 회귀(regression)를 감지하는 방법을 다루는 페이지예요. 이름 붙은 트레이스의 프로덕션 동작을, 그것을 만든 정확한 AI 애플리케이션 구성에 연결해줘요. 트레이스를 버전으로 묶고 각 버전이 언제 활성였는지 보여준답니다.
출처: 문서
본문
개요 (Overview)
모니터(Monitors)는 이름 붙은 트레이스의 프로덕션 동작을, 그것을 만든 정확한 AI 애플리케이션 구성에 연결해요. 오류율 급증, 지연 증가, 비용 증가, 평가 점수 하락, 부정적인 분류기 결과를 고립된 추세로 취급하는 대신, Monitors는 트레이스를 버전별로 그룹화하고 각 버전이 언제 활성였는지 보여줘요.
이렇게 하면 변화를 특정 버전에 귀속시키고, 그 변화에 기여한 모델·프로바이더·프롬프트 버전·엔드포인트·트레이스 세그먼트를 조사할 수 있어요. Monitors는 세 가지 질문에 답하도록 설계됐어요:
- 언제 동작이 바뀌었나?
- 어느 버전이 그 변화를 도입했나?
- 그 변화는 어디에 집중되어 있나?

Observatory의 모니터 화면
버전 (Versions)
트레이스 버전은 트레이스를 만들 당시의 AI 애플리케이션 구성 — 그 뒤에 있는 모델·프로바이더·프롬프트·엔드포인트 — 을 나타내요. Confident AI는 트레이스의 LLM 스팬에 기록된 고유 조합으로 각 버전을 만들어요:
| Field | Description | Example |
|---|---|---|
| Span name | The name of the LLM operation or step within the trace. | generate |
| Model | The model identifier recorded on the LLM span. | gpt-4o |
| Provider | The model provider recorded on the LLM span. | openai |
| Prompt version | The version of the prompt used for the LLM call. | 2 |
| Endpoint | The inference endpoint associated with the LLM call. | /v1/chat/completions |
조합은 정규화·정렬·해시되어 같은 구성이 항상 같은 버전을 만들도록 해요:
$$ \mathcal{C} = \operatorname{sort}\left(\operatorname{unique}\left{(\text{name}, \text{model}, \text{provider}, \text{prompt version}, \text{endpoint})\right}\right) $$
$$ \text{version hash} = \operatorname{SHA256}\left(\operatorname{JSON}(\mathcal{C})\right)_{0:16} $$
타임라인은 각 버전이 언제 활성이었는지 보여줘요. 겹치는 레인은 같은 기간에 트래픽을 받았다는 뜻이라, 비교가 시간 경과에 따른 무관한 변화의 영향을 덜 받게 해줘요.
LLM 스팬이 없는 트레이스는 버전을 할당할 수 없어서 버전 레인에 포함되지 않아요.
트레이스에 처음 관찰된 버전이 초기 기준선(baseline)이 돼요. 기준선은 모든 버전 비교에 사용되는 참조예요.
기준선을 바꾸려면 타임라인에서 다른 버전을 선택하고 Make baseline을 클릭해요. 기준선을 바꿔도 트레이스 데이터가 수정되거나 재처리되지는 않아요. 그저 다른 버전들을 무엇과 비교할지만 바뀔 뿐이죠.
타임라인 위에서 오버레이를 선택해 다음을 조사할 수 있어요:
| Metric | Description | Example |
|---|---|---|
| Error rate | Percentage of traces containing an error. | 2.5% |
| Avg score | Average evaluator score. | 86% |
| Latency | Average trace latency. | 1.2 s |
| Cost | Average trace cost. | $0.0030 |
| Classifications | Percentage of traces carrying at least one enabled trace-classifier label whose polarity is Lower is better. | 8% |
선택한 오버레이는 차트·이상 감지·회귀 감지·세그먼트 분석을 제어해요. 이상 감지와 회귀 감지는 선택한 버전에 대해 서로 다른 질문에 답해요:
| Anomaly | Regression | |
|---|---|---|
| Compares | One time bucket against the same version's earlier buckets | The selected version against the baseline version |
| Detects | A sudden change in the version's own behavior | A sustained difference between two versions |
| Scope | A single time bucket | The full selected time range |
이상 감지 (Anomaly Detection)
이상(anomaly)은 선택한 버전 자체의 동작에서의 갑작스러운 변화예요: 어떤 시간 버킷이 같은 버전의 최근 이력과 크게 어긋나는 경우죠. 기준선 버전은 관련되지 않으므로, 이상은 버전이 언제 다르게 행동하기 시작했는지는 알려주지만 다른 버전과 어떻게 비교되는지는 알려주지 않아요.
과거 버킷 값 $x_1, x_2, \ldots, x_n$에 대해 Confident AI는 중앙값(median)을 계산해요:
$$ \tilde{x} = \operatorname{median}(x_1, x_2, \ldots, x_n) $$
그런 다음 중앙 절대 편차(median absolute deviation)를 계산해요:
$$ \operatorname{MAD} = \operatorname{median}\left(\left|x_i - \tilde{x}\right|\right) $$
현재 버킷 값 $x$는 수정된 z-점수(modified z-score)를 받아요:
$$ z_{\mathrm{modified}} = \frac{0.6745\left(x - \tilde{x}\right)}{\operatorname{MAD}} $$
다음 경우에 버킷이 이상으로 간주돼요:
$$ \left|z_{\mathrm{modified}}\right| \ge 3.5 $$
적어도 6개의 적격한 과거 버킷이 필요하고, 각 버킷은 최소 20개의 트레이스를 포함해야 해요. 과거 MAD가 0이면 Confident AI는 대신 현재 값이 과거 중앙값과 최소 50% 달라야 한다고 요구해요.
타임라인의 강조된 영역은 이상이 발생한 정확한 버킷을 식별해요.

이상 감지와 변화가 집중되는 세그먼트
회귀 감지 (Regression Detection)
회귀(regression)는 두 버전 사이의 지속적인 차이예요: 선택한 버전이 어떤 단일 버킷보다는, 선택한 전체 시간 범위에 걸쳐 기준선보다 성능이 나쁜 경우죠. 회귀 감지는 아주 작은 표본에서 결론을 내리는 것을 피하기 위해 충분한 트래픽을 요구해요 — 선택한 시간 범위에서 선택한 버전에 최소 20개, 기준선에 50개의 트레이스가 있어야 해요.
지연·비용·평가 점수 같은 평균 메트릭의 경우, 상대적 크기가 최소 10%일 때 변화가 의미 있다고 간주해요:
$$ \text{relative change} = \frac{\left|\text{selected} - \text{baseline}\right|} {\left|\text{baseline}\right|} $$
오류율과 부정 분류 같은 비율 메트릭의 경우 Confident AI는 기본 비율을 비교하고 $p \le 0.05$에서 통계적 유의성을 요구해요.
Classifications 오버레이에서 회귀 뷰는 기준선과 선택한 버전의 레이블별 비율도 보여줘요. 이 비율들이 어떤 분류기 결과가 변화에 기여했는지 식별하며, 활성화된 트레이스 분류기(trace classifiers)를 요구해요.
메트릭의 방향이 결과를 결정해요:
- 오류율·지연·비용·부정 분류 비율이 낮아지면 개선(improvement)
- 평균 평가 점수가 높아지면 개선(improvement)
- 반대 방향은 회귀(regression)
- 적용 가능한 임계값을 통과하지 못한 변화는 No regression detected(회귀 감지 안 됨)로 표시
선택한 버전과 기준선 버전이 같은 버킷에서 실행된 적이 없다면, 회귀 감지는 경고를 포함해요. 차이가 버전 자체 때문이 아니라 각 버전이 언제 실행됐는지 때문일 수 있기 때문이에요.
세그먼트 (Segments)
의미 있는 변화가 발견되면 Monitors는 그 메트릭이 가장 많이 움직인 세그먼트를 찾아요. 세그먼트에는 다음이 포함될 수 있어요:
| Segment dimension | Description | Example |
|---|---|---|
| Provider | The model provider used by the LLM span. | openai |
| Model | The model used by the LLM span. | gpt-4o |
| Integration | The tracing or framework integration recorded on the span. | langchain |
| Tag | A tag attached to the trace. | beta-users |
| Trace metadata | A key-value metadata field attached to the trace. | region = us-east-1 |
| Embedder | The embedding model used by a retriever span. | text-embedding-3-small |
| Chunk size | The chunk-size configuration recorded on a retriever span. | 512 |
| Top k | The number of results requested by a retriever span. | 10 |
| Classifier label | An individual label, shown only on the Classifications overlay. | Refused to answer |

버전 변경이 집중되는 세그먼트
각 행은 발견의 양쪽에서 그 세그먼트 안의 메트릭을 비교해요. 이상의 경우 양쪽은 이상 버킷과 그 이전 이력이에요. 회귀의 경우 선택한 버전과 기준선 버전이죠.
세그먼트는 충분한 트래픽이 있어야 하고 적용 가능한 유의성 또는 상대 변화 임계값을 통과해야 해요. 적격 행은 영향도(impact)로 순위가 정해져요:
$$ \text{impact} = \left|\text{metric difference}\right| \times \text{traces in segment} $$
이 가중치는 가장 큰 비율 차이로만 정렬하는 대신 더 많은 트레이스에 영향을 주는 변화를 우선시해요. 세그먼트 행을 클릭하면 관련 필터가 적용된 기여 트레이스가 열려요.
알림 (Alerts)
Monitors는 예상치 못한 변화를 자동으로 발견해요. 알림(Alerts)은 사용자가 구성한 임계값을 평가하고 일정에 따라 팀에 알릴 수 있어요. 버전 변경을 조사한 뒤, 시행하고 싶은 프로덕션 경계를 알게 되면 알림을 만드세요.
Configure Alerts
예약된 임계값 검사로 알려진 프로덕션 경계를 시행해요.
더 알아보기
- Trace & Thread Alerts — 임계값 기반 알림 규칙을 만들어 팀에 알려요.
- Introduction to LLM Observability — LLM 관측성의 기초 개념을 확인해요.