OpenTelemetry(OTel)를 통해 Claude Code의 사용량, 비용, 도구 활동을 시계열 데이터로 내보내고 조직 전체의 사용 현황을 체계적으로 모니터링할 수 있습니다.
빠른 시작
환경 변수를 사용하여 OpenTelemetry를 구성합니다.
# 1. 텔레메트리 활성화
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. 내보내기 대상 선택 (필요한 것만 구성)
export OTEL_METRICS_EXPORTER=otlp # 옵션: otlp, prometheus, console
export OTEL_LOGS_EXPORTER=otlp # 옵션: otlp, console
# 3. OTLP 엔드포인트 구성 (OTLP 내보내기 사용 시)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. 인증 설정 (필요한 경우)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. 디버깅용 내보내기 간격 단축 (기본값: 60초)
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10초
# 6. Claude Code 실행
claude
참고: 기본 내보내기 간격은 메트릭 60초, 로그 5초입니다. 설정 중에는 짧은 간격을 사용하되, 프로덕션에서는 기본값으로 되돌리세요.
관리자 구성
관리자는 관리 설정 파일을 통해 모든 사용자에 대한 OpenTelemetry 설정을 중앙에서 구성할 수 있습니다. 이를 통해 조직 전체의 텔레메트리 설정을 일관되게 관리할 수 있습니다.
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
}
}
참고: 관리 설정에 정의된 환경 변수는 높은 우선순위를 가지며 사용자가 재정의할 수 없습니다.
주요 구성 변수
| 환경 변수 | 설명 | 예시 값 |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
텔레메트리 수집 활성화 (필수) | 1 |
OTEL_METRICS_EXPORTER |
메트릭 내보내기 유형 | console, otlp, prometheus |
OTEL_LOGS_EXPORTER |
로그/이벤트 내보내기 유형 | console, otlp |
OTEL_EXPORTER_OTLP_PROTOCOL |
OTLP 내보내기 프로토콜 | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
OTLP 수집기 엔드포인트 | http://localhost:4317 |
OTEL_EXPORTER_OTLP_HEADERS |
OTLP 인증 헤더 | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
메트릭 내보내기 간격 (밀리초, 기본값: 60000) | 5000, 60000 |
OTEL_LOGS_EXPORT_INTERVAL |
로그 내보내기 간격 (밀리초, 기본값: 5000) | 1000, 10000 |
OTEL_LOG_USER_PROMPTS |
사용자 프롬프트 내용 로깅 활성화 (기본값: 비활성화) | 1 |
OTEL_LOG_TOOL_DETAILS |
MCP 서버/도구 이름 로깅 활성화 | 1 |
메트릭 카디널리티 제어
다음 환경 변수로 메트릭에 포함되는 속성을 제어하여 카디널리티를 관리할 수 있습니다.
| 환경 변수 | 설명 | 기본값 |
|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
메트릭에 session.id 포함 | true |
OTEL_METRICS_INCLUDE_VERSION |
메트릭에 app.version 포함 | false |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
메트릭에 user.account_uuid 포함 | true |
낮은 카디널리티는 일반적으로 더 나은 성능과 낮은 스토리지 비용을 의미하지만, 분석 데이터의 세밀함이 감소합니다.
다중 팀 조직 지원
여러 팀이나 부서가 있는 조직은 OTEL_RESOURCE_ATTRIBUTES를 사용하여 그룹을 구분하는 사용자 정의 속성을 추가할 수 있습니다.
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
이 사용자 정의 속성을 통해 다음이 가능합니다.
- 팀 또는 부서별 메트릭 필터링
- 비용 센터별 비용 추적
- 팀별 대시보드 생성
- 특정 팀에 대한 알림 설정
중요:
OTEL_RESOURCE_ATTRIBUTES는 공백을 포함할 수 없습니다. 공백 대신 언더스코어 또는 camelCase를 사용하세요.
사용 가능한 메트릭
Claude Code는 다음 메트릭을 내보냅니다.
| 메트릭 이름 | 설명 | 단위 |
|---|---|---|
claude_code.session.count |
시작된 CLI 세션 수 | count |
claude_code.lines_of_code.count |
수정된 코드 줄 수 | count |
claude_code.pull_request.count |
생성된 풀 요청 수 | count |
claude_code.commit.count |
생성된 git 커밋 수 | count |
claude_code.cost.usage |
Claude Code 세션 비용 | USD |
claude_code.token.usage |
사용된 토큰 수 | tokens |
claude_code.code_edit_tool.decision |
코드 편집 도구 권한 결정 수 | count |
claude_code.active_time.total |
총 활성 사용 시간 | 초 |
모든 메트릭의 표준 속성
| 속성 | 설명 |
|---|---|
session.id |
고유 세션 식별자 |
app.version |
현재 Claude Code 버전 |
organization.id |
조직 UUID (인증된 경우) |
user.account_uuid |
계정 UUID (인증된 경우) |
user.id |
익명 기기/설치 식별자 |
user.email |
사용자 이메일 (OAuth 인증 시) |
terminal.type |
터미널 유형 |
이벤트 유형
OTEL_LOGS_EXPORTER가 구성된 경우 Claude Code는 OpenTelemetry 로그/이벤트를 통해 다음 이벤트를 내보냅니다.
이벤트 상관 관계
사용자가 프롬프트를 제출하면 Claude Code가 여러 API 호출과 도구를 실행할 수 있습니다. prompt.id 속성을 사용하면 단일 프롬프트에서 생성된 모든 이벤트를 추적할 수 있습니다.
주요 이벤트
| 이벤트 | 트리거 |
|---|---|
claude_code.user_prompt |
사용자가 프롬프트를 제출할 때 |
claude_code.tool_result |
도구 실행이 완료될 때 |
claude_code.api_request |
Claude에 대한 각 API 요청 시 |
claude_code.api_error |
API 요청이 실패할 때 |
claude_code.tool_decision |
도구 권한 결정(승인/거부) 시 |
메트릭 및 이벤트 데이터 해석
사용량 모니터링
| 메트릭 | 분석 기회 |
|---|---|
claude_code.token.usage |
유형(입력/출력), 사용자, 팀, 모델별 분류 |
claude_code.session.count |
시간에 따른 채택 및 참여도 추적 |
claude_code.lines_of_code.count |
코드 추가/제거로 생산성 측정 |
claude_code.commit.count & claude_code.pull_request.count |
개발 워크플로우에 미치는 영향 파악 |
비용 모니터링
claude_code.cost.usage 메트릭으로 다음이 가능합니다.
- 팀 또는 개인별 사용량 추세 추적
- 최적화를 위한 고사용 세션 식별
참고: 비용 메트릭은 근사치입니다. 공식 청구 데이터는 API 제공자(Claude Console, AWS Bedrock, Google Cloud Vertex)를 참조하세요.
백엔드 선택 가이드
메트릭용:
- 시계열 데이터베이스 (Prometheus): 속도 계산, 집계 메트릭
- 열 지향 스토어 (ClickHouse): 복잡한 쿼리, 고유 사용자 분석
- 풀 기능 관찰 플랫폼 (Honeycomb, Datadog): 고급 쿼리, 시각화, 알림
이벤트/로그용:
- 로그 집계 시스템 (Elasticsearch, Loki): 전체 텍스트 검색
- 열 지향 스토어 (ClickHouse): 구조화된 이벤트 분석
- 풀 기능 관찰 플랫폼 (Honeycomb, Datadog): 메트릭과 이벤트 간 상관 관계
동적 헤더 구성
엔터프라이즈 환경에서 동적 인증이 필요한 경우 스크립트를 구성하여 헤더를 동적으로 생성할 수 있습니다.
.claude/settings.json에 추가:
{
"otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"
}
스크립트는 HTTP 헤더를 나타내는 문자열 키-값 쌍의 유효한 JSON을 출력해야 합니다.
#!/bin/bash
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
헤더 갱신 간격을 CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS로 제어할 수 있습니다. 기본값은 29분입니다.
보안 및 개인정보
- 텔레메트리는 옵트인 방식으로 명시적인 구성이 필요합니다
- 원시 파일 내용 및 코드 스니펫은 메트릭이나 이벤트에 포함되지 않습니다
- 도구 실행 이벤트의
tool_parameters필드에는 bash 명령어와 파일 경로가 포함될 수 있습니다. 명령어에 시크릿이 포함될 수 있다면tool_parameters를 필터링하거나 수정하도록 텔레메트리 백엔드를 구성하세요 - OAuth로 인증 시
user.email이 텔레메트리 속성에 포함됩니다. 우려되는 경우 텔레메트리 백엔드에서 이 필드를 필터링하세요 - 사용자 프롬프트 내용은 기본적으로 수집되지 않습니다 (길이만 기록)
- MCP 서버/도구 이름과 스킬 이름은 기본적으로 기록되지 않습니다
ROI 측정 리소스
Claude Code의 투자 대비 효과 측정에 대한 종합 가이드는 Claude Code ROI 측정 가이드를 참조하세요. 이 저장소는 Docker Compose 구성, Prometheus 및 OpenTelemetry 설정, Linear와 통합된 생산성 보고서 템플릿을 제공합니다.
다음 단계
- 분석 대시보드: claude.ai 또는 Console에서 팀 사용량 시각화를 확인합니다
- 비용 관리: 지출 한도 설정 및 토큰 사용량 최적화 방법을 알아봅니다
- 서버 관리 설정: 관리 설정을 통해 중앙에서 텔레메트리를 구성합니다
- Amazon Bedrock 모니터링: Bedrock 사용자를 위한 상세 모니터링 가이드를 확인합니다
