Home / 에이전트 관측성 / 에이전트 관측성
Note

에이전트 관측성

메트릭/트레이스/로그, OpenTelemetry, Golden Signals

⏱ 25분 154 / 189

에이전트 관측성

메트릭/트레이스/로그, OpenTelemetry, Golden Signals

보이지 않으면 고칠 수 없다

OTel 기반 계측부터 프로덕션 대시보드까지

왜 에이전트 관측성이 필요한가

비결정성 · 동적 경로 · 토큰 비용 · 디버깅 불가

PART 1 · 왜 필요한가

왜 관측성인가

비결정적 시스템을 로그만으로 디버깅할 수 없는 이유의 조감

보이지 않으면 고칠 수 없다

에이전트는 실행 경로가 동적이라 전통 앱의 디버깅 방식이 통하지 않습니다.

  • 비결정성 — 같은 입력에 다른 실행 경로
  • 비용 요인 — CPU가 아닌 토큰 소비량
  • 에러 유형 — 환각 · 무한 루프 · 잘못된 도구 선택
  • Trajectory — 스택 트레이스 대신 도구 호출 시퀀스
takeaway

전통 앱의 스택 트레이스와 CPU 지표로는 에이전트를 진단할 수 없습니다 — 실행 경로와 토큰까지 보이게 만드는 계측이 프로덕션의 전제조건입니다.

PART 1 · 왜 필요한가

전통 앱 vs 에이전트

실행 경로가 동적인 에이전트 — 로그만으로는 불가능한 디버깅

전통 앱 에이전트
실행 경로 고정 (코드 흐름 결정) 동적 (LLM이 매번 판단)
비용 요인 CPU/메모리 사용량 토큰 소비량 (입력+출력)
에러 유형 예외/타임아웃 환각, 무한 루프, 잘못된 도구 선택
디버깅 핵심 스택 트레이스 도구 호출 시퀀스 (Trajectory)
PART 1 · 왜 필요한가

관측성 없이 발생하는 문제

프로덕션에서 무엇이 잘못되었는지 알 수 없는 4가지 상황

"느려졌다"

LLM 지연인지, 도구 지연인지, 루프 반복인지 구분 불가

"비용 폭증"

어떤 세션이 토큰을 많이 썼는지 추적 불가 — IAM Principal 귀속 없으면 사각지대

"이상한 답변"

어떤 도구에서 어떤 데이터를 받았는지 로그 없음 — 환각인지 도구 오류인지 모름

"간헐 에러"

재현 불가능 — 트레이스 없으면 원인 파악 불가, 고객 불만만 쌓임

takeaway

네 상황의 공통점은 실행 내부가 보이지 않는 것입니다 — 지연·비용·품질·재현 모두 계측이 선행 조건입니다.

관측성 3대 요소

Metrics · Traces · Logs — 세 가지가 결합되어야 완전한 관측성

PART 2 · 3대 요소

관측성 3대 요소

메트릭·트레이스·로그 세 축이 각각 답하는 질문의 조감

Metrics · Traces · Logs

세 가지 텔레메트리가 결합되어야 완전한 관측성이 됩니다.

  • Metrics — "이상 있나?" 수치 시계열 집계
  • Traces — "어디가 문제?" 요청의 전체 경로
  • Logs — "왜 발생했나?" 개별 이벤트 상세
  • Span 계층 — Agent Loop → Model → Tool → External
takeaway

메트릭으로 이상을 감지하고, 트레이스로 위치를 좁히고, 로그로 원인을 확인합니다 — 세 축이 결합되어야 완전한 관측성이 됩니다.

PART 2 · 3대 요소

3축 텔레메트리

메트릭으로 이상 감지 → 트레이스로 위치 추적 → 로그로 원인 확인

Metrics (지표)

수치 시계열 — 지연, 토큰, 에러율을 집계하여 추이 파악.
질문: "이상 있나?"

Traces (추적)

요청의 전체 여정 — Agent→Model→Tool→External 각 스팬의 시간과 결과.
질문: "어디가 문제?"

Logs (로그)

이벤트 기록 — 프롬프트 입출력, 도구 파라미터, 에러 상세.
질문: "왜 발생했나?"

takeaway

세 질문에 순서대로 답합니다 — Metrics가 "이상 있나", Traces가 "어디가", Logs가 "왜"를 맡습니다.

PART 2 · 3대 요소

에이전트 Trace 구조

하나의 요청이 여러 스팬으로 분해됨 — 계층적 구조

Agent Loop Span

전체 에이전트 실행 (루트 스팬) — 총 지연, 사이클 수

Model Invoke Span

LLM 추론 호출 — 토큰 수, 모델 ID, 지연

Tool Execute Span

도구 실행 — 도구명, 파라미터, 응답, 지연

External Call Span

도구 내부 외부 API 호출 — HTTP 상태, 지연

OpenTelemetry 통합

Strands 자동 계측 · ADOT · X-Ray · CloudWatch

PART 3 · OTel

OpenTelemetry 통합

설치부터 X-Ray·CloudWatch 전송까지 자동 계측 파이프라인의 조감

Strands 자동 계측 → ADOT → X-Ray · CloudWatch

계측 코드를 직접 작성하지 않고 SDK가 스팬을 자동 생성해 AWS 백엔드로 보냅니다.

  • pip install "strands-agents[otel]" — 자동 스팬 생성
  • StrandsTelemetry().setup_otlp_exporter() — 1줄 활성화
  • ADOT Collector — X-Ray(트레이스) + CloudWatch(메트릭)
  • gen_ai.* — 벤더 중립 GenAI Semantic Conventions
takeaway

설치 한 줄과 활성화 한 줄로 Agent loop·Model invoke·Tool execute 스팬이 자동 생성됩니다 — 파이프라인의 종착지는 X-Ray와 CloudWatch입니다.

PART 3 · OTel

ADOT 파이프라인

Agent → ADOT Collector → X-Ray·CloudWatch 전송 아키텍처

PART 3 · OTel

Strands 자동 계측 코드

pip install "strands-agents[otel]" → StrandsTelemetry 1줄로 활성화

python
from strands import Agent
from strands.telemetry import StrandsTelemetry

# ① OTel OTLP Exporter 활성화 — 1줄
StrandsTelemetry().setup_otlp_exporter()

# ② 에이전트 코드는 무변경
agent = Agent(model=model, tools=[search])
agent("서울 맛집 추천해줘")
# ③ → Agent loop, Model invoke, Tool execute 스팬 자동 생성
#   → ADOT Collector → X-Ray + CloudWatch로 자동 전송
  • 활성화 1줄 — pip install "strands-agents[otel]" 후 setup_otlp_exporter() 호출이 전부. 계측 코드 직접 작성 없음
  • 에이전트 무변경 — 기존 Agent 그대로. 모델 호출·도구 실행이 자동으로 계측 대상
  • 전송 경로 — 스팬 3종이 gen_ai.* 표준 어트리뷰트로 ADOT Collector를 거쳐 X-Ray(트레이스)·CloudWatch(메트릭)에 적재
PART 3 · OTel

GenAI Semantic Conventions

OTel 표준의 AI 전용 어트리뷰트 — 벤더 중립으로 기록

어트리뷰트설명예시 값
gen_ai.provider.name모델 프로바이더anthropic
gen_ai.request.model요청 모델 IDus.anthropic.claude-sonnet-4-6
gen_ai.response.finish_reasons종료 사유 (배열)["end_turn"]
gen_ai.usage.input_tokens입력 토큰 수1,234
gen_ai.usage.output_tokens출력 토큰 수567
takeaway

gen_ai.* 어트리뷰트는 OTel 표준이라 프로바이더를 바꿔도 같은 키로 조회할 수 있습니다 — 벤더 중립 계측의 핵심입니다.

Golden Signals

Latency · Traffic · Errors · Saturation + Cost

PART 4 · Golden Signals

Golden Signals

SRE 4대 시그널에 에이전트 특화 지표를 더한 감시 체계의 조감

Golden Signals + Cost

Google SRE 4대 시그널에 에이전트 특화 지표를 더해 상태를 진단합니다.

  • Latency · Traffic · Errors · Saturation — SRE 4대 시그널
  • Cost — 세션당 토큰 비용 · 일간 누적 비용
  • ToolCallsPerInvocation · LoopIterations — 루프 이상 징후
  • CacheHitRate · SessionCompletionRate — 효율과 품질
takeaway

4대 시그널이 서비스 일반의 건강을 재고, Cost와 루프 지표가 에이전트 고유의 이상을 잡아냅니다.

PART 4 · Golden Signals

Google SRE 4대 시그널 + Cost

4대 시그널에 에이전트 특화 Cost를 추가 — 5개로 상태 진단

Latency
P95 응답 시간 (LLM + 도구 포함)
Traffic
초당 세션 수, 분당 도구 호출 수
Errors
실패율 (timeout + throttle + exception)
Saturation
동시 세션 / 최대 용량 비율
Cost
세션당 토큰 비용, 일간 누적 비용
takeaway

Google SRE 4대 시그널에 Cost를 더한 5개 지표가 에이전트 상태 진단의 출발점입니다.

PART 4 · Golden Signals

에이전트 전용 메트릭

Golden Signals로 잡히지 않는 에이전트 고유 지표

메트릭설명알람 기준 예시
ToolCallsPerInvocation요청당 평균 도구 호출 수> 10 (무한 루프 징후)
TokensPerRequest요청당 총 토큰> 100K (비용 폭증)
LoopIterations에이전트 루프 반복 수> 15 (탈출 실패)
CacheHitRatePrompt Caching 적중률< 50% (비효율)
SessionCompletionRate목표 달성 정상 종료 비율< 70% (품질 저하)
takeaway

표의 알람 기준은 예시입니다 — 루프 징후·비용 폭증·캐시 효율·완료율처럼 Golden Signals가 놓치는 에이전트 고유 신호를 보완합니다.

프로덕션 대시보드

CloudWatch 4패널 · 알람 · 인시던트 플레이북

PART 5 · 대시보드

프로덕션 대시보드

4패널 대시보드·알람·플레이북으로 완성하는 운영 체계의 조감

CloudWatch 4패널 + 알람 + 플레이북

대시보드가 상태를 보여주고, 알람이 이상을 알리고, 플레이북이 대응을 정합니다.

  • 4패널 — Overview · Model · Tool · Cost
  • 알람 패턴 — P95 > 5s Warning · Error > 2% Critical
  • 인시던트 플레이북 — 지연 · 에러 · 비용 · 무한루프 대응
  • boto3 put_metric_alarm — 호출량 알람 코드
takeaway

앞 파트의 계측과 지표가 여기서 운영팀이 쓰는 화면과 대응 절차로 완성됩니다.

PART 5 · 대시보드

CloudWatch 4패널 대시보드

에이전트 운영팀이 한눈에 상태를 파악하는 화면 구성






console.aws.amazon.com/cloudwatch — Dashboards › agent-prod



OVERVIEW


12,438 요청/일
99.2% 성공률
3.1s P95 지연




한 줄 요약 — 현재 상태 판단



MODEL


claude-sonnet-4-68.2M tok · throttle 3


claude-haiku-4-52.1M tok · throttle 0



모델별 토큰·비용 추이·스로틀링 횟수



TOOL


search_kb4,102회 · 0.4% · 320ms

book_table1,893회 · 3.1% · 2,400ms ⚠

get_weather977회 · 0.1% · 180ms


도구별 호출 수·실패율·평균 지연 — 병목 도구 식별



COST





오늘 $412 — 일예산 $600의 68%- - 예산선

일간/주간 비용 추이·에이전트별 분배 — 예산 초과 감지





PART 5 · 대시보드

알람과 인시던트 플레이북

임계값 초과 시 자동 알림 → 플레이북 실행으로 대응

알람 설정 패턴

  • P95 Latency > 5s → Warning
  • Error Rate > 2% → Critical
  • Token Cost > 일예산 80% → Warning
  • Loop Iterations > 15 → Critical (무한루프)

대응 플레이북

  • 지연 증가 → 모델 다운그레이드 또는 캐시 확인
  • 에러 급증 → 도구 헬스체크, 모델 상태 확인
  • 비용 초과 → Prompt Routing 활성화, 모델 스위치
  • 무한루프 → Hooks 상한 카운터(BeforeToolCallEvent → event.cancel_tool) 정책 점검, 프롬프트 검토
PART 5 · 대시보드

CloudWatch 알람 코드

boto3로 Bedrock 모델 호출량 알람을 직접 생성

python
import boto3

cloudwatch = boto3.client("cloudwatch", region_name="us-east-1")

cloudwatch.put_metric_alarm(
    AlarmName="bedrock-agent-loop-alert",
    # ① AWS/Bedrock 네임스페이스의 Invocations(호출 수) 메트릭
    MetricName="Invocations",
    Namespace="AWS/Bedrock",
    Dimensions=[{"Name": "ModelId", "Value": "us.anthropic.claude-sonnet-4-6"}],
    # ② 일간 호출 10,000건 초과 시 — 무한루프·폭주를 조기 감지
    Threshold=10000,
    ComparisonOperator="GreaterThanThreshold",
    EvaluationPeriods=1,
    Period=86400,  # 일간
    Statistic="Sum",
    # ③ 초과 시 SNS 토픽으로 알림
    AlarmActions=["arn:aws:sns:us-east-1:123456789012:agent-alert"],
)
  • 메트릭 선택 — AWS/Bedrock의 Invocations를 ModelId 차원으로 좁혀 특정 모델 호출량만 감시
  • 임계값 — Period=86400(일간) 합계가 10,000건을 넘으면 알람 상태. 폭주·무한루프 조기 감지
  • AlarmActions — SNS 토픽으로 알림 발송 → 앞의 인시던트 플레이북 대응으로 연결

관측성 실습

⏱ 60분

gen_ai 어트리뷰트 확인부터 Golden Signals 대시보드·이상 탐지 알람까지 구축합니다

학습 목표

  • Strands 스팬의 gen_ai.* 표준 어트리뷰트 확인
  • Golden Signals 메트릭 CloudWatch 발행
  • 4패널 대시보드 구성
  • 루프 폭주·도구 실패 탐지 알람 설정
관측성이 프로덕션의 전제조건입니다.

Traces(어디가 문제) · Metrics(이상 있나) · Logs(왜 발생했나) = 3축 관측