๋ชจ๋ํฐ๋ง
Claude Code์ ๋ํ OpenTelemetry๋ฅผ ํ์ฑํํ๊ณ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
OpenTelemetry(OTel)๋ฅผ ํตํด ์๊ฒฉ ์ธก์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด ์กฐ์ง ์ ์ฒด์์ Claude Code ์ฌ์ฉ, ๋น์ฉ ๋ฐ ๋๊ตฌ ํ๋์ ์ถ์ ํฉ๋๋ค. Claude Code๋ ํ์ค ๋ฉํธ๋ฆญ ํ๋กํ ์ฝ์ ํตํด ๋ฉํธ๋ฆญ์ ์๊ณ์ด ๋ฐ์ดํฐ๋ก ๋ด๋ณด๋ด๊ณ , ๋ก๊ทธ/์ด๋ฒคํธ ํ๋กํ ์ฝ์ ํตํด ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ด๋ฉฐ, ์ ํ์ ์ผ๋ก ์ถ์ ํ๋กํ ์ฝ์ ํตํด ๋ถ์ฐ ์ถ์ ์ ๋ด๋ณด๋ ๋๋ค. ๋ฉํธ๋ฆญ, ๋ก๊ทธ ๋ฐ ์ถ์ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ชจ๋ํฐ๋ง ์๊ตฌ ์ฌํญ๊ณผ ์ผ์นํ๋๋ก ํฉ๋๋ค.
๋น ๋ฅธ ์์
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ OpenTelemetry๋ฅผ ๊ตฌ์ฑํฉ๋๋ค:
# 1. ์๊ฒฉ ์ธก์ ํ์ฑํ
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. ๋ด๋ณด๋ด๊ธฐ ์ ํ (๋ ๋ค ์ ํ ์ฌํญ - ํ์ํ ๊ฒ๋ง ๊ตฌ์ฑ)
export OTEL_METRICS_EXPORTER=otlp # ์ต์
: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # ์ต์
: otlp, console, none
# 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. ๋๋ฒ๊น
์ฉ: ๋ด๋ณด๋ด๊ธฐ ๊ฐ๊ฒฉ ๋จ์ถ
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10์ด (๊ธฐ๋ณธ๊ฐ: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5์ด (๊ธฐ๋ณธ๊ฐ: 5000ms)
# 6. Claude Code ์คํ
claude
๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ ๊ฐ๊ฒฉ์ ๋ฉํธ๋ฆญ์ ๊ฒฝ์ฐ 60์ด, ๋ก๊ทธ์ ๊ฒฝ์ฐ 5์ด์ ๋๋ค. ์ค์ ์ค์ ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ๋ ์งง์ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ก๋์ ์ฌ์ฉ์ ์ํด ์ด๋ฅผ ์ฌ์ค์ ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
์ ์ฒด ๊ตฌ์ฑ ์ต์ ์ OpenTelemetry ์ฌ์์ ์ฐธ์กฐํ์ธ์.
๊ด๋ฆฌ์ ๊ตฌ์ฑ
๊ด๋ฆฌ์๋ ๊ด๋ฆฌ ์ค์ ํ์ผ์ ํตํด ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ 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"
}
}
๊ด๋ฆฌ ์ค์ ์ MDM(Mobile Device Management) ๋๋ ๊ธฐํ ์ฅ์น ๊ด๋ฆฌ ์๋ฃจ์ ์ ํตํด ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ ์ค์ ํ์ผ์ ์ ์๋ ํ๊ฒฝ ๋ณ์๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ ์ฌ์ฉ์๊ฐ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
Claude Code๋ OTEL_* ํ๊ฒฝ ๋ณ์๋ฅผ Bash ๋๊ตฌ, ํ
, MCP ์๋ฒ ๋ฐ ์ธ์ด ์๋ฒ๋ฅผ ํฌํจํ์ฌ ์์ฑํ๋ ํ์ ํ๋ก์ธ์ค์ ์ ๋ฌํ์ง ์์ต๋๋ค. Bash ๋๊ตฌ๋ฅผ ํตํด ์คํํ๋ OpenTelemetry ๊ณ์ธก ์ ํ๋ฆฌ์ผ์ด์
์ Claude Code์ ๋ด๋ณด๋ด๊ธฐ ์๋ํฌ์ธํธ ๋๋ ํค๋๋ฅผ ์์ํ์ง ์์ผ๋ฏ๋ก ํด๋น ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ์ ์๊ฒฉ ์ธก์ ์ ๋ด๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ ๋ช
๋ น์์ ์ง์ ์ด๋ฌํ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
๊ตฌ์ฑ ์ธ๋ถ ์ ๋ณด
์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ ๋ณ์
| ํ๊ฒฝ ๋ณ์ | ์ค๋ช | ์์ ๊ฐ |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
์๊ฒฉ ์ธก์ ์์ง ํ์ฑํ (ํ์) | 1 |
OTEL_METRICS_EXPORTER |
๋ฉํธ๋ฆญ ๋ด๋ณด๋ด๊ธฐ ์ ํ (์ผํ๋ก ๊ตฌ๋ถ). none์ ์ฌ์ฉํ์ฌ ๋นํ์ฑํ |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
๋ก๊ทธ/์ด๋ฒคํธ ๋ด๋ณด๋ด๊ธฐ ์ ํ (์ผํ๋ก ๊ตฌ๋ถ). none์ ์ฌ์ฉํ์ฌ ๋นํ์ฑํ |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
OTLP ๋ด๋ณด๋ด๊ธฐ ํ๋กํ ์ฝ (๋ชจ๋ ์ ํธ์ ์ ์ฉ) | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
๋ชจ๋ ์ ํธ์ ๋ํ OTLP ์์ง๊ธฐ ์๋ํฌ์ธํธ | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
๋ฉํธ๋ฆญ ํ๋กํ ์ฝ (์ผ๋ฐ ์ค์ ์ฌ์ ์) | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
OTLP ๋ฉํธ๋ฆญ ์๋ํฌ์ธํธ (์ผ๋ฐ ์ค์ ์ฌ์ ์) | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
๋ก๊ทธ ํ๋กํ ์ฝ (์ผ๋ฐ ์ค์ ์ฌ์ ์) | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
OTLP ๋ก๊ทธ ์๋ํฌ์ธํธ (์ผ๋ฐ ์ค์ ์ฌ์ ์) | http://localhost:4318/v1/logs |
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_ASSISTANT_RESPONSES |
assistant_response ์ด๋ฒคํธ์์ ์ด์์คํดํธ ์๋ต ํ
์คํธ ๋ก๊น
ํ์ฑํ (๊ธฐ๋ณธ๊ฐ: ๋นํ์ฑํ). ์ค์ ๋์ง ์์ผ๋ฉด OTEL_LOG_USER_PROMPTS์ ๊ฐ์ผ๋ก ํด๋ฐฑ๋ฉ๋๋ค. {/* min-version: 2.1.193 */}Claude Code v2.1.193 ์ด์ ํ์ |
1๋ก ํ์ฑํ, 0์ผ๋ก ์์ ๋ ์ํ ์ ์ง |
OTEL_LOG_TOOL_DETAILS |
๋๊ตฌ ์ด๋ฒคํธ ๋ฐ ์ถ์ ์คํฌ ์์ฑ์์ ๋๊ตฌ ๋งค๊ฐ๋ณ์ ๋ฐ ์
๋ ฅ ์ธ์ ๋ก๊น
ํ์ฑํ: Bash ๋ช
๋ น, MCP ์๋ฒ ๋ฐ ๋๊ตฌ ์ด๋ฆ, ์คํฌ ์ด๋ฆ ๋ฐ ๋๊ตฌ ์
๋ ฅ. ๋ํ user_prompt ์ด๋ฒคํธ์์ ์ฌ์ฉ์ ์ ์, ํ๋ฌ๊ทธ์ธ ๋ฐ MCP ๋ช
๋ น ์ด๋ฆ์ ํ์ฑํํฉ๋๋ค (๊ธฐ๋ณธ๊ฐ: ๋นํ์ฑํ) |
1๋ก ํ์ฑํ |
OTEL_LOG_TOOL_CONTENT |
์คํฌ ์ด๋ฒคํธ์์ ๋๊ตฌ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ฝํ ์ธ ๋ก๊น ํ์ฑํ (๊ธฐ๋ณธ๊ฐ: ๋นํ์ฑํ). ์ถ์ ์ด ํ์ํฉ๋๋ค. ์ฝํ ์ธ ๋ 60KB์์ ์๋ฆฝ๋๋ค | 1๋ก ํ์ฑํ |
OTEL_LOG_RAW_API_BODIES |
์ ์ฒด Anthropic Messages API ์์ฒญ ๋ฐ ์๋ต JSON์ api_request_body / api_response_body ๋ก๊ทธ ์ด๋ฒคํธ๋ก ๋ด๋ณด๋
๋๋ค (๊ธฐ๋ณธ๊ฐ: ๋นํ์ฑํ). ๋ณธ๋ฌธ์๋ ์ ์ฒด ๋ํ ๊ธฐ๋ก์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํ์ฑํํ๋ฉด OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS ๋ฐ OTEL_LOG_TOOL_CONTENT๊ฐ ๊ณต๊ฐํ ๋ชจ๋ ๊ฒ์ ๋์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค |
1๋ก 60KB์์ ์๋ฆฐ ์ธ๋ผ์ธ ๋ณธ๋ฌธ, ๋๋ file:<dir>๋ก ๋์คํฌ์ ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ๊ณผ ์ด๋ฒคํธ์ body_ref ํฌ์ธํฐ |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
๋ฉํธ๋ฆญ ์๊ฐ์ฑ ์ ํธ๋ (๊ธฐ๋ณธ๊ฐ: delta). ๋ฐฑ์๋๊ฐ ๋์ ์๊ฐ์ฑ์ ์์ํ๋ ๊ฒฝ์ฐ cumulative๋ก ์ค์ |
delta, cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
๋์ ํค๋ ์๋ก ๊ณ ์นจ ๊ฐ๊ฒฉ (๊ธฐ๋ณธ๊ฐ: 1740000ms / 29๋ถ) | 900000 |
mTLS ์ธ์ฆ
OTLP ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํด๋น ์ ํธ์ ์ฌ์ฉ๋๋ OTLP ํ๋กํ ์ฝ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, OTEL_EXPORTER_OTLP_PROTOCOL ๋๋ ์ ํธ๋ณ ์ฌ์ ์๋ฅผ ํตํด ์ค์ ๋ฉ๋๋ค. ๋์ผํ ๊ตฌ์ฑ์ด ๋ฉํธ๋ฆญ, ๋ก๊ทธ ๋ฐ ์ถ์ ์ ์ ์ฉ๋ฉ๋๋ค.
| ํ๋กํ ์ฝ | ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ๋ณ์ | ์์ง๊ธฐ์ CA ์ ๋ขฐ |
|---|---|---|
http/protobuf, http/json |
CLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY ๋ฐ ์ ํ์ ์ผ๋ก CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. ๋คํธ์ํฌ ๊ตฌ์ฑ ์ฐธ์กฐ |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY ๋ฐ OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, ๋๋ ์ ํธ๋ณ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY์ ๊ฐ์ ์ ํธ๋ณ ๋ณํ |
OTEL_EXPORTER_OTLP_CERTIFICATE |
grpc์ ๊ฒฝ์ฐ OpenTelemetry SDK๋ ํ์ค OTLP ๋ณ์๋ฅผ ์ง์ ์ฝ์ผ๋ฏ๋ก ์ ํธ๋ณ ๋ฉํธ๋ฆญ ๋ณ์๋ฅผ ์ค์ ํ๋ ๊ธฐ์กด ๊ตฌ์ฑ์ ๊ณ์ ์๋ํฉ๋๋ค.
๋ฉํธ๋ฆญ ์นด๋๋๋ฆฌํฐ ์ ์ด
๋ค์ ํ๊ฒฝ ๋ณ์๋ ์นด๋๋๋ฆฌํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฉํธ๋ฆญ์ ํฌํจ๋๋ ์์ฑ์ ์ ์ดํฉ๋๋ค:
| ํ๊ฒฝ ๋ณ์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ | ๋นํ์ฑํ ์ |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
๋ฉํธ๋ฆญ์ session.id ์์ฑ ํฌํจ | true |
false |
OTEL_METRICS_INCLUDE_VERSION |
๋ฉํธ๋ฆญ์ app.version ์์ฑ ํฌํจ | false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
๋ฉํธ๋ฆญ์ user.account_uuid ๋ฐ user.account_id ์์ฑ ํฌํจ | true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
๋ฉํธ๋ฆญ์ app.entrypoint ์์ฑ ํฌํจ | false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
OTEL_RESOURCE_ATTRIBUTES์ ํค๋ฅผ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐํฌ์ธํธ์ ์์ฑ์ผ๋ก ํฌํจ |
true |
false |
์ด๋ฌํ ๋ณ์๋ ๋ฉํธ๋ฆญ์ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ ์ดํ๋ ๋ฐ ๋์์ด ๋๋ฉฐ, ์ด๋ ๋ฉํธ๋ฆญ ๋ฐฑ์๋์ ์ ์ฅ์ ์๊ตฌ ์ฌํญ ๋ฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฎ์ ์นด๋๋๋ฆฌํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ์ฑ๋ฅ๊ณผ ๋ฎ์ ์ ์ฅ์ ๋น์ฉ์ ์๋ฏธํ์ง๋ง ๋ถ์์ ์ํ ์ธ๋ถํ๋ ๋ฐ์ดํฐ๋ ์ ์ต๋๋ค.
์ถ์ (๋ฒ ํ)
๋ถ์ฐ ์ถ์ ์ ๊ฐ ์ฌ์ฉ์ ํ๋กฌํํธ๋ฅผ ํด๋น ํ๋กฌํํธ๊ฐ ํธ๋ฆฌ๊ฑฐํ๋ API ์์ฒญ ๋ฐ ๋๊ตฌ ์คํ์ ์ฐ๊ฒฐํ๋ ์คํฌ์ ๋ด๋ณด๋ด๋ฏ๋ก ์ถ์ ๋ฐฑ์๋์์ ์ ์ฒด ์์ฒญ์ ๋จ์ผ ์ถ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
์ถ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊บผ์ ธ ์์ต๋๋ค. ํ์ฑํํ๋ ค๋ฉด CLAUDE_CODE_ENABLE_TELEMETRY=1 ๋ฐ CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1์ ๋ชจ๋ ์ค์ ํ ๋ค์ OTEL_TRACES_EXPORTER๋ฅผ ์ค์ ํ์ฌ ์คํฌ์ ๋ณด๋ผ ์์น๋ฅผ ์ ํํฉ๋๋ค. ์ถ์ ์ ์๋ํฌ์ธํธ, ํ๋กํ ์ฝ, ํค๋ ๋ฐ mTLS์ ๋ํด ์ผ๋ฐ์ ์ธ OTLP ๊ตฌ์ฑ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
| ํ๊ฒฝ ๋ณ์ | ์ค๋ช | ์์ ๊ฐ |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
์คํฌ ์ถ์ ํ์ฑํ (ํ์). ENABLE_ENHANCED_TELEMETRY_BETA๋ ํ์ฉ๋จ |
1 |
OTEL_TRACES_EXPORTER |
์ถ์ ๋ด๋ณด๋ด๊ธฐ ์ ํ (์ผํ๋ก ๊ตฌ๋ถ). none์ ์ฌ์ฉํ์ฌ ๋นํ์ฑํ |
console, otlp, none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
์ถ์ ํ๋กํ ์ฝ (OTEL_EXPORTER_OTLP_PROTOCOL ์ฌ์ ์) |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
OTLP ์ถ์ ์๋ํฌ์ธํธ (OTEL_EXPORTER_OTLP_ENDPOINT ์ฌ์ ์) |
http://localhost:4318/v1/traces |
OTEL_TRACES_EXPORT_INTERVAL |
์คํฌ ๋ฐฐ์น ๋ด๋ณด๋ด๊ธฐ ๊ฐ๊ฒฉ (๋ฐ๋ฆฌ์ด ๋จ์, ๊ธฐ๋ณธ๊ฐ: 5000) | 1000, 10000 |
์คํฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์ ํ๋กฌํํธ ํ
์คํธ, ๋๊ตฌ ์
๋ ฅ ์ธ๋ถ ์ ๋ณด ๋ฐ ๋๊ตฌ ์ฝํ
์ธ ๋ฅผ ์์ ํฉ๋๋ค. OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 ๋ฐ OTEL_LOG_TOOL_CONTENT=1์ ์ค์ ํ์ฌ ํฌํจํฉ๋๋ค.
์ถ์ ์ด ํ์ฑํ๋๋ฉด Bash ๋ฐ PowerShell ํ์ ํ๋ก์ธ์ค๋ ํ์ฑ ๋๊ตฌ ์คํ ์คํฌ์ W3C ์ถ์ ์ปจํ
์คํธ๋ฅผ ํฌํจํ๋ TRACEPARENT ํ๊ฒฝ ๋ณ์๋ฅผ ์๋์ผ๋ก ์์ํฉ๋๋ค. ์ด๋ฅผ ํตํด TRACEPARENT๋ฅผ ์ฝ๋ ๋ชจ๋ ํ์ ํ๋ก์ธ์ค๊ฐ ์์ ์ ์คํฌ์ ๋์ผํ ์ถ์ ์๋์ ๋ถ๋ชจ๋ก ์ง์ ํ ์ ์์ผ๋ฏ๋ก Claude๊ฐ ์คํํ๋ ์คํฌ๋ฆฝํธ ๋ฐ ๋ช
๋ น์ ํตํ ์๋ํฌ์๋ ๋ถ์ฐ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ถ์ ์ด ํ์ฑํ๋๊ณ Claude Code๊ฐ Anthropic API์ ์ง์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ๊ฐ ๋ชจ๋ธ ์์ฒญ์ claude_code.llm_request ์คํฌ์ ์ปจํ
์คํธ๋ก ์ค์ ๋ W3C traceparent ํค๋๋ฅผ ์ ๋ฌํ๊ณ , API์ traceresponse ํค๋๋ ์คํฌ ๋งํฌ๋ก ๊ธฐ๋ก๋ฉ๋๋ค. ์ด๋ค์ ํจ๊ป Claude Code์ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ์ ๋ชจ๋ ํธํ ์ค๊ฐ ๊ณ์ธต์ ํตํด ์๋ฒ ์ธก ์ถ์ ์ ์ฐ๊ฒฐํฉ๋๋ค. ์์๋ฐ์ด๋ HTTP MCP ์์ฒญ์ ๋์ผํ ๋ฐฉ์์ผ๋ก traceparent๋ฅผ ์ ๋ฌํฉ๋๋ค. ํค๋๋ ํ์ฌ ์ ๊ณต์์๊ฒ ์ ์ก๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ธ ๋ฐ HTTP MCP ์์ฒญ์ traceparent ํค๋๋ ANTHROPIC_BASE_URL์ด ์ค์ ๋์ง ์์๊ฑฐ๋ Anthropic API๋ฅผ ๊ฐ๋ฆฌํฌ ๋๋ง ์ ์ก๋ฉ๋๋ค. ์ผ๋ถ ํ๋ก์๋ ์ธ์๋์ง ์๋ ํค๋๋ฅผ ๊ฑฐ๋ถํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ ํ๋ก์ธ์ค TRACEPARENT ๋ณ์๋ ์ผ๊ด์ฑ์ ์ํด ๋์ผํ ์ค์์น๋ก ์ ์ด๋ฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ANTHROPIC_BASE_URL ํ๋ก์๋ฅผ ํตํด Claude Code๋ฅผ ์คํํ๊ณ ์ถ์ ์ปจํ
์คํธ๋ฅผ ์ ํํ๋ ค๋ฉด CLAUDE_CODE_PROPAGATE_TRACEPARENT=1์ ์ค์ ํฉ๋๋ค.
Agent SDK ๋ฐ -p๋ก ์์๋ ๋น๋ํํ ์ธ์
์์ Claude Code๋ ๊ฐ ์ํธ ์์ฉ ์คํฌ์ ์์ํ ๋ ์์ ์ ํ๊ฒฝ์์ TRACEPARENT ๋ฐ TRACESTATE๋ฅผ ์ฝ์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ ๋ฉ ํ๋ก์ธ์ค๊ฐ ํ์ฑ W3C ์ถ์ ์ปจํ
์คํธ๋ฅผ ํ์ ํ๋ก์ธ์ค์ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก Claude Code์ ์คํฌ์ด ํธ์ถ์์ ๋ถ์ฐ ์ถ์ ์ ์์์ผ๋ก ๋ํ๋ฉ๋๋ค. ๋ํํ ์ธ์
์ CI ๋๋ ์ปจํ
์ด๋ ํ๊ฒฝ์ ์ฃผ๋ณ ๊ฐ์ ์ค์๋ก ์์ํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ์ธ๋ฐ์ด๋ TRACEPARENT๋ฅผ ๋ฌด์ํฉ๋๋ค.
์คํฌ ๊ณ์ธต ๊ตฌ์กฐ
๊ฐ ์ฌ์ฉ์ ํ๋กฌํํธ๋ claude_code.interaction ๋ฃจํธ ์คํฌ์ ์์ํฉ๋๋ค. API ํธ์ถ, ๋๊ตฌ ํธ์ถ ๋ฐ ํ
์คํ์ ์์์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค. ๋๊ตฌ ์คํฌ์๋ ๊ถํ ๊ฒฐ์ ๋๊ธฐ ์๊ฐ๊ณผ ์คํ ์์ฒด์ ๋ํ ๋ ๊ฐ์ ์์ ์คํฌ์ด ์์ต๋๋ค. Agent ๋๊ตฌ ๋๋ ๋ ๊ฑฐ์ Task ๋๊ตฌ๊ฐ ํ์ ์์ด์ ํธ๋ฅผ ์์ฑํ๋ฉด ํ์ ์์ด์ ํธ์ API ๋ฐ ๋๊ตฌ ์คํฌ์ ๋ถ๋ชจ์ claude_code.tool ์คํฌ ์๋์ ์ค์ฒฉ๋ฉ๋๋ค.
claude_code.interaction
โโโ claude_code.llm_request
โโโ claude_code.hook (์์ธ ๋ฒ ํ ์ถ์ ํ์)
โโโ claude_code.tool
โโโ claude_code.tool.blocked_on_user
โโโ claude_code.tool.execution
โโโ (Agent ๋๊ตฌ) ํ์ ์์ด์ ํธ claude_code.llm_request / claude_code.tool ์คํฌ
Agent SDK ๋ฐ claude -p ์ธ์
์์ TRACEPARENT๊ฐ ํ๊ฒฝ์ ์ค์ ๋๋ฉด claude_code.interaction ์์ฒด๊ฐ ํธ์ถ์์ ์คํฌ์ ์์์ด ๋ฉ๋๋ค.
์คํฌ ์์ฑ
๋ชจ๋ ์คํฌ์ ํ์ค ์์ฑ๊ณผ ์ด๋ฆ๊ณผ ์ผ์นํ๋ span.type ์์ฑ์ ์ ๋ฌํฉ๋๋ค. ์๋ ํ๋ ๊ฐ ์คํฌ์ ์ค์ ๋ ์ถ๊ฐ ์์ฑ์ ๋์ดํฉ๋๋ค. llm_request, tool.execution ๋ฐ hook ์คํฌ์ ์คํจ๋ฅผ ๊ธฐ๋กํ ๋ OpenTelemetry ์ํ ERROR๋ฅผ ์ค์ ํฉ๋๋ค. ๋ค๋ฅธ ์คํฌ์ ํญ์ ์ํ UNSET์ผ๋ก ๋๋ฉ๋๋ค.
claude_code.interaction
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
user_prompt |
ํ๋กฌํํธ ํ
์คํธ. ๊ฒ์ดํธ๊ฐ ์ค์ ๋์ง ์์ผ๋ฉด ๊ฐ์ <REDACTED>์
๋๋ค |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
ํ๋กฌํํธ ๊ธธ์ด (๋ฌธ์ ๋จ์) | |
interaction.sequence |
์ด ์ธ์ ์ ์ํธ ์์ฉ 1 ๊ธฐ๋ฐ ์นด์ดํฐ | |
interaction.duration_ms |
ํด์ ๋ฒฝ์๊ณ ์ง์ ์๊ฐ |
claude_code.llm_request
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
model |
๋ชจ๋ธ ์๋ณ์ | |
gen_ai.system |
ํญ์ anthropic. OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
|
gen_ai.request.model |
model๊ณผ ๋์ผํ ๊ฐ. OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
|
query_source |
์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ
(์: repl_main_thread ๋๋ ํ์ ์์ด์ ํธ ์ด๋ฆ) |
|
agent_id |
์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์ด์ ํธ ๋๋ ํ์์ ์๋ณ์. ์ฃผ ์ธ์ ์๋ ์์ | |
parent_agent_id |
์ด ์์ด์ ํธ๋ฅผ ์์ฑํ ์์ด์ ํธ์ ์๋ณ์. ์ฃผ ์ธ์ ๋ฐ ์ง์ ์์ฑ๋ ์์ด์ ํธ์๋ ์์ | |
speed |
fast ๋๋ normal |
|
llm_request.context |
๋ถ๋ชจ ์คํฌ์ ๋ฐ๋ผ interaction, tool ๋๋ standalone |
|
duration_ms |
์ฌ์๋๋ฅผ ํฌํจํ ๋ฒฝ์๊ณ ์ง์ ์๊ฐ | |
ttft_ms |
์ฒซ ๋ฒ์งธ ํ ํฐ๊น์ง์ ์๊ฐ (๋ฐ๋ฆฌ์ด) | |
input_tokens |
API ์ฌ์ฉ ๋ธ๋ก์ ์ ๋ ฅ ํ ํฐ ์ | |
output_tokens |
์ถ๋ ฅ ํ ํฐ ์ | |
cache_read_tokens |
ํ๋กฌํํธ ์บ์์์ ์ฝ์ ํ ํฐ | |
cache_creation_tokens |
ํ๋กฌํํธ ์บ์์ ๊ธฐ๋ก๋ ํ ํฐ | |
request_id |
request-id ์๋ต ํค๋์ Anthropic API ์์ฒญ ID |
|
gen_ai.response.id |
request_id์ ๋์ผํ ๊ฐ. OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
|
client_request_id |
์ต์ข
์๋์ ํด๋ผ์ด์ธํธ ์์ฑ x-client-request-id |
|
attempt |
์ด ์์ฒญ์ ๋ํด ์ํ๋ ์ด ์๋ | |
success |
true ๋๋ false |
|
status_code |
์์ฒญ์ด ์คํจํ์ ๋ HTTP ์ํ ์ฝ๋ | |
error |
์์ฒญ์ด ์คํจํ์ ๋ ์ค๋ฅ ๋ฉ์์ง | |
response.has_tool_call |
์๋ต์ ๋๊ตฌ ์ฌ์ฉ ๋ธ๋ก์ด ํฌํจ๋์์ ๋ true |
|
stop_reason |
API ์๋ต stop_reason (์: end_turn, tool_use, max_tokens, stop_sequence, pause_turn ๋๋ refusal) |
|
gen_ai.response.finish_reasons |
stop_reason๊ณผ ๋์ผํ ๊ฐ (๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ํ๋จ). OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
๊ฐ ์ฌ์๋ ์๋๋ attempt ๋ฐ client_request_id ์์ฑ์ด ์๋ gen_ai.request.attempt ์คํฌ ์ด๋ฒคํธ๋ก๋ ๊ธฐ๋ก๋ฉ๋๋ค.
claude_code.tool
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
tool_name |
๋๊ตฌ ์ด๋ฆ | |
duration_ms |
๊ถํ ๋๊ธฐ ๋ฐ ์คํ์ ํฌํจํ ๋ฒฝ์๊ณ ์ง์ ์๊ฐ | |
result_tokens |
๋๊ตฌ ๊ฒฐ๊ณผ์ ๋๋ต์ ์ธ ํ ํฐ ํฌ๊ธฐ | |
agent_id |
๋๊ตฌ๋ฅผ ์คํํ ํ์ ์์ด์ ํธ ๋๋ ํ์์ ์๋ณ์. ์ฃผ ์ธ์ ์๋ ์์ | |
parent_agent_id |
์ด ์์ด์ ํธ๋ฅผ ์์ฑํ ์์ด์ ํธ์ ์๋ณ์. ์ฃผ ์ธ์ ๋ฐ ์ง์ ์์ฑ๋ ์์ด์ ํธ์๋ ์์ | |
tool_use_id |
์ด ํธ์ถ์ ๋ํ ๋ชจ๋ธ์ tool_use ๋ธ๋ก ID. tool_result ๋ฐ tool_decision ์ด๋ฒคํธ์ tool_use_id์ ํ
ํ์ด๋ก๋์ tool_use_id์ ์ผ์นํ๋ฏ๋ก ์คํฌ์ ํด๋น ๋ ์ฝ๋์ ์กฐ์ธํ ์ ์์ต๋๋ค |
|
gen_ai.tool.call.id |
tool_use_id์ ๋์ผํ ๊ฐ. OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
|
file_path |
Read, Edit ๋ฐ Write ๋๊ตฌ์ ๋์ ํ์ผ ๊ฒฝ๋ก | OTEL_LOG_TOOL_DETAILS |
full_command |
Bash ๋๊ตฌ์ ๋ช ๋ น ๋ฌธ์์ด | OTEL_LOG_TOOL_DETAILS |
skill_name |
Skill ๋๊ตฌ์ ์คํฌ ์ด๋ฆ | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Agent ๋๊ตฌ ๋๋ ๋ ๊ฑฐ์ Task ๋๊ตฌ์ ํ์ ์์ด์ ํธ ์ ํ | OTEL_LOG_TOOL_DETAILS |
OTEL_LOG_TOOL_CONTENT=1์ผ ๋ ์ด ์คํฌ์ ์์ฑ์ ๋๊ตฌ์ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ๋ณธ๋ฌธ์ ํฌํจํ๋ tool.output ์คํฌ ์ด๋ฒคํธ๋ ๊ธฐ๋กํฉ๋๋ค (์์ฑ๋น 60KB์์ ์๋ฆผ).
claude_code.tool.blocked_on_user
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
duration_ms |
๊ถํ ๊ฒฐ์ ๋๊ธฐ ์๊ฐ | |
decision |
accept ๋๋ reject |
|
source |
๊ฒฐ์ ์ถ์ฒ (Tool decision event์ ์ผ์น) |
claude_code.tool.execution
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
duration_ms |
๋๊ตฌ ๋ณธ๋ฌธ ์คํ ์๊ฐ | |
tool_use_id |
๋ถ๋ชจ claude_code.tool ์คํฌ๊ณผ ๋์ผํ ๊ฐ |
|
gen_ai.tool.call.id |
tool_use_id์ ๋์ผํ ๊ฐ. OpenTelemetry GenAI ์๋ฏธ๋ก ์ ๊ท์น |
|
success |
true ๋๋ false |
|
error |
์คํ์ด ์คํจํ์ ๋ ์ค๋ฅ ๋ฒ์ฃผ ๋ฌธ์์ด (์: Error:ENOENT ๋๋ ShellError). ๊ฒ์ดํธ๊ฐ ์ค์ ๋๋ฉด ์ ์ฒด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํฌํจํฉ๋๋ค |
OTEL_LOG_TOOL_DETAILS |
claude_code.hook
์ด ์คํฌ์ ์์ธ ๋ฒ ํ ์ถ์ ์ด ํ์ฑํ๋์ด ์์ ๋๋ง ๋ด๋ณด๋ด์ง๋ฉฐ, ์ด๋ ์์ ์ถ์ ๋ด๋ณด๋ด๊ธฐ ๊ตฌ์ฑ ์ธ์ ENABLE_BETA_TRACING_DETAILED=1 ๋ฐ BETA_TRACING_ENDPOINT๊ฐ ํ์ํฉ๋๋ค. ๋ํํ CLI ์ธ์
์์๋ ์กฐ์ง์ด ์ด ๊ธฐ๋ฅ์ ๋ํด ํ์ฉ ๋ชฉ๋ก์ ์์ด์ผ ํฉ๋๋ค. Agent SDK ๋ฐ ๋น๋ํํ -p ์ธ์
์ ๊ฒ์ดํธ๋์ง ์์ต๋๋ค. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA๋ง ์ค์ ๋์ด ์์ ๋๋ ๋ด๋ณด๋ด์ง์ง ์์ต๋๋ค.
| ์์ฑ | ์ค๋ช | ๊ฒ์ดํธ ๋์ |
|---|---|---|
hook_event |
ํ
์ด๋ฒคํธ ์ ํ (์: PreToolUse) |
|
hook_name |
์ ์ฒด ํ
์ด๋ฆ (์: PreToolUse:Write) |
|
num_hooks |
์คํ๋ ์ผ์นํ๋ ํ ๋ช ๋ น ์ | |
hook_definitions |
JSON ์ง๋ ฌํ๋ ํ ๊ตฌ์ฑ | OTEL_LOG_TOOL_DETAILS |
duration_ms |
๋ชจ๋ ์ผ์นํ๋ ํ ์ ๋ฒฝ์๊ณ ์ง์ ์๊ฐ | |
num_success |
์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ํ ์ | |
num_blocking |
์ฐจ๋จ ๊ฒฐ์ ์ ๋ฐํํ ํ ์ | |
num_non_blocking_error |
์ฐจ๋จ ์์ด ์คํจํ ํ ์ | |
num_cancelled |
์๋ฃ ์ ์ ์ทจ์๋ ํ ์ |
new_context, system_prompt_preview, user_system_prompt, tool_input ๋ฐ response.model_output๊ณผ ๊ฐ์ ์ถ๊ฐ ์ฝํ
์ธ ํฌํจ ์์ฑ์ ์์ธ ๋ฒ ํ ์ถ์ ์ด ํ์ฑํ๋์ด ์์ ๋๋ง ๋ด๋ณด๋ด์ง๋๋ค. ์ด๋ค์ ์์ ์ ์ธ ์คํฌ ์คํค๋ง์ ์ผ๋ถ๊ฐ ์๋๋๋ค. user_system_prompt๋ ์ถ๊ฐ๋ก OTEL_LOG_USER_PROMPTS=1์ด ํ์ํฉ๋๋ค. ์ด๋ systemPrompt SDK ์ต์
๋๋ --system-prompt ๋ฐ --append-system-prompt ํ๋๊ทธ๋ฅผ ํตํด ์ ๊ณตํ๋ ์์คํ
ํ๋กฌํํธ ํ
์คํธ๋ง ํฌํจํ๋ฉฐ 60KB์์ ์๋ฆฌ๊ณ ์์ฒญ๋น์ด ์๋ ์ธ์
๋น ํ ๋ฒ ๋ด๋ณด๋ด์ง๋๋ค.
๋์ ํค๋
๋์ ์ธ์ฆ์ด ํ์ํ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ์ฌ ํค๋๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ๋์ ํค๋๋ http/protobuf ๋ฐ http/json ํ๋กํ ์ฝ์๋ง ์ ์ฉ๋ฉ๋๋ค. grpc ๋ด๋ณด๋ด๊ธฐ๋ ์ ์ OTEL_EXPORTER_OTLP_HEADERS ๊ฐ๋ง ์ฌ์ฉํฉ๋๋ค.
์ค์ ๊ตฌ์ฑ
.claude/settings.json์ ์ถ๊ฐํฉ๋๋ค:
{
"otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"
}
๊ฐ์ ๊ณต๋ฐฑ์ ํฌํจํ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ์คํ ํ์ผ์ ๊ฒฝ๋ก์ด๊ฑฐ๋ ์ธ์๊ฐ ์๋ ์ ธ ๋ช ๋ น์ค์ผ ์ ์์ต๋๋ค. Windows์์ ๊ฐ์ ํญ์ ์ ธ์ ํตํด ์คํ๋๋ฏ๋ก ๊ณต๋ฐฑ์ ํฌํจํ๋ ๊ฒฝ๋ก๋ฅผ JSON ๊ฐ ๋ด์ ๋ฐ์ดํ๋ก ๋ฌถ์ต๋๋ค.
์คํฌ๋ฆฝํธ ์๊ตฌ ์ฌํญ
์คํฌ๋ฆฝํธ๋ HTTP ํค๋๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํค-๊ฐ ์์ด ์๋ ์ ํจํ JSON์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค:
#!/bin/bash
# ์: ์ฌ๋ฌ ํค๋
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
๋์ฐ๋ฏธ๊ฐ ์คํจํ๊ฑฐ๋ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ์ถ๋ ฅ์ ์ธ์ํ๋ฉด Claude Code๋ ๋ค์์์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค:
/doctor์ถ๋ ฅ--debug๋ก ์คํํ๊ฑฐ๋ ์ธ์ ์์/debug๋ฅผ ์คํํ ํ์ ๋๋ฒ๊ทธ ๋ก๊ทธ-p๋ก ์์๋ ๋น๋ํํ ์ธ์ ์ stderr
์๋ก ๊ณ ์นจ ๋์
ํค๋ ๋์ฐ๋ฏธ ์คํฌ๋ฆฝํธ๋ ์์ ์ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ดํ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋์ด ํ ํฐ ์๋ก ๊ณ ์นจ์ ์ง์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ 29๋ถ๋ง๋ค ์คํ๋ฉ๋๋ค. CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS ํ๊ฒฝ ๋ณ์๋ก ๊ฐ๊ฒฉ์ ์ฌ์ฉ์ ์ ์ํฉ๋๋ค.
๋ค์ค ํ ์กฐ์ง ์ง์
์ฌ๋ฌ ํ ๋๋ ๋ถ์๊ฐ ์๋ ์กฐ์ง์ OTEL_RESOURCE_ATTRIBUTES ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๊ทธ๋ฃน์ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:
# ํ ์๋ณ์ ์ํ ์ฌ์ฉ์ ์ ์ ์์ฑ ์ถ๊ฐ
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
์ด๋ฌํ ์ฌ์ฉ์ ์ ์ ์์ฑ์ ๋ชจ๋ ๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ์ ํฌํจ๋์ด ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ํ ๋๋ ๋ถ์๋ณ๋ก ๋ฉํธ๋ฆญ ํํฐ๋ง
- ๋น์ฉ ์ผํฐ๋ณ ๋น์ฉ ์ถ์
- ํ๋ณ ๋์๋ณด๋ ์์ฑ
- ํน์ ํ์ ๋ํ ๊ฒฝ๊ณ ์ค์
Claude Code๋ ์ด๋ฌํ ๊ฐ์ ๋ชจ๋ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐํฌ์ธํธ ๋ฐ ์ด๋ฒคํธ ๋ ์ฝ๋์ ์์ฑ์ผ๋ก ์ฒจ๋ถํ๊ณ , OTLP ๋ฆฌ์์ค ๋ธ๋ก์์๋ ์ ์กํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ฉํธ๋ฆญ ๋ฐฑ์๋๋ ๋ฐ์ดํฐํฌ์ธํธ ์์ฑ์ ์ฟผ๋ฆฌ ๊ฐ๋ฅํ ๋ ์ด๋ธ๋ก ๋
ธ์ถํ๋ฏ๋ก ์ฌ์ฉ์ ์ ์ ํค๋ก ์ง์ ๋ฉํธ๋ฆญ์ ๊ทธ๋ฃนํํ๊ณ ํํฐ๋งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ํค๋ user.id ๋๋ session.id์ ๊ฐ์ ํ์ค ์์ฑ์ ์ฌ์ ์ํ์ง ์์ต๋๋ค. ํค๊ฐ ์ถฉ๋ํ๋ฉด Claude Code๋ ๊ธฐ๋ณธ ์ ๊ณต ๊ฐ์ ์ ์งํฉ๋๋ค.
๊ฐ ์ฌ์ฉ์ ์ ์ ํค๋ ๋ชจ๋ ๋ฉํธ๋ฆญ ์๋ฆฌ์ฆ์ ๋ ์ด๋ธ์ด ๋๋ฏ๋ก ๋์ ์นด๋๋๋ฆฌํฐ ๊ฐ์ ๋ฉํธ๋ฆญ ๋ฐฑ์๋์ ์ ์ฅ์ ๋น์ฉ์ ์ฆ๊ฐ์ํต๋๋ค. ์ฌ์ฉ์ ์ ์ ์์ฑ์ ๋ฆฌ์์ค ๋ธ๋ก์๋ง ๋ณด๋ด๊ณ ๋ฐ์ดํฐํฌ์ธํธ ๋ ์ด๋ธ์์ ์๋ตํ๋ ค๋ฉด OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false๋ฅผ ์ค์ ํฉ๋๋ค. ๋ฉํธ๋ฆญ ์นด๋๋๋ฆฌํฐ ์ ์ด๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
OTEL_RESOURCE_ATTRIBUTES ํ๊ฒฝ ๋ณ์๋ ์ผํ๋ก ๊ตฌ๋ถ๋ key=value ์์ ์ฌ์ฉํ๋ฉฐ ์๊ฒฉํ ํ์ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค:
- ๊ณต๋ฐฑ ํ์ฉ ์ ํจ: ๊ฐ์ ๊ณต๋ฐฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
user.organizationName=My Company๋ ์ ํจํ์ง ์์ต๋๋ค - ํ์: ์ผํ๋ก ๊ตฌ๋ถ๋ ํค=๊ฐ ์์ด์ด์ผ ํฉ๋๋ค:
key1=value1,key2=value2 - ํ์ฉ๋ ๋ฌธ์: ์ ์ด ๋ฌธ์, ๊ณต๋ฐฑ, ํฐ๋ฐ์ดํ, ์ผํ, ์ธ๋ฏธ์ฝ๋ก ๋ฐ ๋ฐฑ์ฌ๋์๋ฅผ ์ ์ธํ US-ASCII ๋ฌธ์๋ง ํ์ฉ๋ฉ๋๋ค
- ํน์ ๋ฌธ์: ํ์ฉ๋ ๋ฒ์ ์ธ์ ๋ฌธ์๋ ํผ์ผํธ ์ธ์ฝ๋ฉ๋์ด์ผ ํฉ๋๋ค
๊ณต๋ฐฑ์ด ํ์ํ ๊ฐ์ ๊ฒฝ์ฐ ์ธ๋์ค์ฝ์ด ๋๋ camelCase๋ฅผ ๋์ ์ฌ์ฉํฉ๋๋ค. ๋ค์ ์์ ๋ ๊ฐ ํ์์ผ๋ก org.name์ ์ค์ ํฉ๋๋ค:
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"
์ ์ธ๋ ๋ฌธ์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋ฌธ์๋ฅผ ํผ์ผํธ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค. ์ด ์์ ๋ ๊ณต๋ฐฑ๊ณผ ์ํฌ์คํธ๋กํผ๋ฅผ ๋ชจ๋ ์ธ์ฝ๋ฉํฉ๋๋ค:
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
๊ฐ์ ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ ๊ณต๋ฐฑ์ด ์ด์ค์ผ์ดํ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด org.name="My Company"๋ My Company๊ฐ ์๋ ๋ฆฌํฐ๋ด ๊ฐ "My Company" (๋ฐ์ดํ ํฌํจ)๋ฅผ ์์ฑํฉ๋๋ค.
์์ ๊ตฌ์ฑ
claude๋ฅผ ์คํํ๊ธฐ ์ ์ ์ด๋ฌํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ ๋ธ๋ก์ ๋ค์ํ ๋ด๋ณด๋ด๊ธฐ ๋๋ ๋ฐฐํฌ ์๋๋ฆฌ์ค์ ๋ํ ์์ ํ ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค:
# ์ฝ์ ๋๋ฒ๊น
(1์ด ๊ฐ๊ฒฉ)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
# OTLP/gRPC
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# Prometheus
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
# ์ฌ๋ฌ ๋ด๋ณด๋ด๊ธฐ
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
# ๋ฉํธ๋ฆญ ๋ฐ ๋ก๊ทธ์ ๋ํ ๋ค์ํ ์๋ํฌ์ธํธ/๋ฐฑ์๋
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317
# ๋ฉํธ๋ฆญ๋ง (์ด๋ฒคํธ/๋ก๊ทธ ์์)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# ์ด๋ฒคํธ/๋ก๊ทธ๋ง (๋ฉํธ๋ฆญ ์์)
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ
ํ์ค ์์ฑ
๋ชจ๋ ๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ๋ ๋ค์ ํ์ค ์์ฑ์ ๊ณต์ ํฉ๋๋ค:
| ์์ฑ | ์ค๋ช | ์ ์ด ๋์ |
|---|---|---|
session.id |
๊ณ ์ ์ธ์ ์๋ณ์ | OTEL_METRICS_INCLUDE_SESSION_ID (๊ธฐ๋ณธ๊ฐ: true) |
app.version |
ํ์ฌ Claude Code ๋ฒ์ | OTEL_METRICS_INCLUDE_VERSION (๊ธฐ๋ณธ๊ฐ: false) |
app.entrypoint |
์ธ์
์ด ์์๋ ๋ฐฉ์, ์: cli, sdk-cli, sdk-ts, sdk-py ๋๋ claude-vscode |
OTEL_METRICS_INCLUDE_ENTRYPOINT (๊ธฐ๋ณธ๊ฐ: false) |
organization.id |
์กฐ์ง UUID (์ธ์ฆ๋ ๊ฒฝ์ฐ) | ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ํญ์ ํฌํจ๋จ |
user.account_uuid |
๊ณ์ UUID (์ธ์ฆ๋ ๊ฒฝ์ฐ) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (๊ธฐ๋ณธ๊ฐ: true) |
user.account_id |
Anthropic ๊ด๋ฆฌ API์ ์ผ์นํ๋ ํ๊ทธ ํ์์ ๊ณ์ ID (์ธ์ฆ๋ ๊ฒฝ์ฐ), ์: user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (๊ธฐ๋ณธ๊ฐ: true) |
user.id |
์ฒซ ์คํ ์ ์์ฑ๋๊ณ ~/.claude.json์ ์ ์ง๋๋ ๋ฌด์์ ์ต๋ช
์๋ณ์์
๋๋ค. ๊ฐ์ธ ์ ๋ณด๋ฅผ ํฌํจํ์ง ์์ผ๋ฉฐ Claude ๊ณ์ ์์ ํ์๋์ง ์์ต๋๋ค. ํ์ผ์ ์ญ์ ํ๋ฉด ๋ค์ ์คํ ์ ์๋ก์ด ๊ด๋ จ ์๋ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค. |
ํญ์ ํฌํจ๋จ |
user.email |
์ฌ์ฉ์ ์ด๋ฉ์ผ ์ฃผ์ (OAuth๋ฅผ ํตํด ์ธ์ฆ๋ ๊ฒฝ์ฐ) | ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ํญ์ ํฌํจ๋จ |
terminal.type |
ํฐ๋ฏธ๋ ์ ํ, ์: iTerm.app, vscode, cursor ๋๋ tmux |
๊ฐ์ง๋ ๋ ํญ์ ํฌํจ๋จ |
OTEL_RESOURCE_ATTRIBUTES์ ํค |
์ค์ ํ ์ฌ์ฉ์ ์ ์ ์์ฑ, ์: department ๋๋ team.id. ๋ค์ค ํ ์กฐ์ง ์ง์์ ์ฐธ์กฐํ์ธ์ |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (๊ธฐ๋ณธ๊ฐ: true) |
Claude Code๊ฐ Claude ์ฑ ๊ฒ์ดํธ์จ์ด์ ๋ก๊ทธ์ธ๋์ด ์์ผ๋ฉด CLI๋ ๊ฒ์ดํธ์จ์ด ์ธ์
์ ์ธ์ฆ๋ ID๋ก ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์คํฌํํฉ๋๋ค: user.id๋ ์ต๋ช
์ค์น ์๋ณ์๊ฐ ์๋ IdP ์ฃผ์ฒด์ด๊ณ , user.email์ ๋ก๊ทธ์ธํ ์ด๋ฉ์ผ์ด๋ฉฐ, user.groups๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด๋ก IdP ๊ทธ๋ฃน ๋ฉค๋ฒ์ญ์ ์ ๋ฌํฉ๋๋ค. ๊ฐ ๋ด๋ณด๋ด๊ธฐ๋ ๋ํ identity.source: gateway-oidc๋ฅผ ์ ๋ฌํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด ID๋ ๋ง์ง๋ง์ ์ ์ฉ๋๋ฏ๋ก OTEL_RESOURCE_ATTRIBUTES๋ฅผ ํตํด ์ค์ ๋ user.* ๋ฐ identity.* ํค๋ ๊ฒ์ดํธ์จ์ด ์ธ์
์์ ๋ฌด์๋ฉ๋๋ค.
์ด๋ฒคํธ๋ ์ถ๊ฐ๋ก ๋ค์ ์์ฑ์ ํฌํจํฉ๋๋ค. ์ด๋ค์ ๋ฌดํ ์นด๋๋๋ฆฌํฐ๋ฅผ ์ผ๊ธฐํ ์ ์์ผ๋ฏ๋ก ๋ฉํธ๋ฆญ์ ์ ๋ ์ฒจ๋ถ๋์ง ์์ต๋๋ค:
prompt.id: ์ฌ์ฉ์ ํ๋กฌํํธ๋ฅผ ๋ค์ ํ๋กฌํํธ๊น์ง์ ๋ชจ๋ ํ์ ์ด๋ฒคํธ์ ์๊ด์ํค๋ UUID์ ๋๋ค. ์ด๋ฒคํธ ์๊ด ์์ฑ์ ์ฐธ์กฐํ์ธ์.workspace.host_paths: ๋ฐ์คํฌํฑ ์ฑ์์ ์ ํํ ํธ์คํธ ์์ ๊ณต๊ฐ ๋๋ ํ ๋ฆฌ (๋ฌธ์์ด ๋ฐฐ์ด)
๋ฉํธ๋ฆญ
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 |
์ด ํ์ฑ ์๊ฐ (์ด) | s |
๋ฉํธ๋ฆญ ์ธ๋ถ ์ ๋ณด
๊ฐ ๋ฉํธ๋ฆญ์ ์์ ๋์ด๋ ํ์ค ์์ฑ์ ํฌํจํฉ๋๋ค. ์ถ๊ฐ ์ปจํ ์คํธ๋ณ ์์ฑ์ด ์๋ ๋ฉํธ๋ฆญ์ ์๋์ ํ์๋ฉ๋๋ค.
์ธ์ ์นด์ดํฐ
๊ฐ ์ธ์ ์์ ์ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
start_type: ์ธ์ ์ด ์์๋ ๋ฐฉ์."fresh","resume","continue"๋๋"agents_view"์ค ํ๋์ ๋๋ค."agents_view"๊ฐ์claude agents๋์๋ณด๋ ํ๋ก์ธ์ค (๋ํํ ์ธ์ ์ด ์๋ ์ฌ์ฉ์๊ฐ ์์ํ ๋ก์ปฌ UI)๋ฅผ ์๋ณํฉ๋๋ค. ๋์๋ณด๋์์ UI ํ๋ก์ธ์ค ์์์ ๋ํํ ์ธ์ ๊ณผ ๋ถ๋ฆฌํ๋ ค๋ฉด ์ด ๊ฐ์ผ๋ก ํํฐ๋งํฉ๋๋ค.
์ฝ๋ ๋ผ์ธ ์นด์ดํฐ
์ฝ๋๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ๋ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
type: ("added","removed")model: ๋ณ๊ฒฝ์ ์ํํ ๋ชจ๋ธ์ ๋ชจ๋ธ ์๋ณ์ (์: "claude-sonnet-5")
ํ ์์ฒญ ์นด์ดํฐ
Claude Code๋ฅผ ํตํด ์ ธ ๋ช ๋ น ๋๋ MCP ๋๊ตฌ๋ฅผ ํตํด ํ ์์ฒญ ๋๋ ๋ณํฉ ์์ฒญ์ ์์ฑํ ๋ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
์ปค๋ฐ ์นด์ดํฐ
Claude Code๋ฅผ ํตํด git ์ปค๋ฐ์ ์์ฑํ ๋ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
๋น์ฉ ์นด์ดํฐ
๊ฐ API ์์ฒญ ํ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
model: ๋ชจ๋ธ ์๋ณ์ (์: "claude-sonnet-5")query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ ์ ๋ฒ์ฃผ."main","subagent"๋๋"auxiliary"์ค ํ๋speed: ์์ฒญ์ด ๋น ๋ฅธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ ๋"fast". ๊ทธ ์ธ์๋ ์์effort: ์์ฒญ์ ์ ์ฉ๋ ๋ ธ๋ ฅ ์์ค:"low","medium","high","xhigh"๋๋"max". ๋ชจ๋ธ์ด ๋ ธ๋ ฅ์ ์ง์ํ์ง ์์ ๋๋ ์์agent.name: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์ด์ ํธ ์ ํ. ๊ธฐ๋ณธ ์ ๊ณต ์์ด์ ํธ ์ด๋ฆ ๋ฐ ๊ณต์ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ์ ์์ด์ ํธ๋ ๊ทธ๋๋ก ๋ํ๋ฉ๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์ ์ ์ ์์ด์ ํธ ์ด๋ฆ์"custom"์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์์ฒญ์ด ๋ช ๋ช ๋ ํ์ ์์ด์ ํธ ์ ํ์์ ๋ฐ๊ธ๋์ง ์์์ ๋๋ ์์skill.name: ์์ฒญ์ ๋ํด ํ์ฑํ๋ ์คํฌ (Skill ๋๊ตฌ,/๋ช ๋ น์ผ๋ก ์ค์ ๋๊ฑฐ๋ ์์ฑ๋ ํ์ ์์ด์ ํธ์ ์ํด ์์๋จ). ๊ธฐ๋ณธ ์ ๊ณต, ๋ฒ๋ค, ์ฌ์ฉ์ ์ ์ ๋ฐ ๊ณต์ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ ์คํฌ ์ด๋ฆ์ ๊ทธ๋๋ก ๋ํ๋ฉ๋๋ค. ํ์ฌ ํ๋ฌ๊ทธ์ธ ์คํฌ ์ด๋ฆ์"third-party"๋ก ๋์ฒด๋ฉ๋๋ค. ํ์ฑ ์คํฌ์ด ์์ ๋๋ ์์plugin.name: ํ์ฑ ์คํฌ ๋๋ ํ์ ์์ด์ ํธ๊ฐ ํ๋ฌ๊ทธ์ธ์์ ์ ๊ณต๋ ๋ ์์ ํ๋ฌ๊ทธ์ธ. ๊ณต์ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ๊ทธ๋๋ก ๋ํ๋ฉ๋๋ค. ํ์ฌ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์"third-party"๋ก ๋์ฒด๋ฉ๋๋ค. ์คํฌ ๋ฐ ํ์ ์์ด์ ํธ ๋ชจ๋ ์์ ํ๋ฌ๊ทธ์ธ์ด ์์ ๋๋ ์์marketplace.name: ์์ ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ ๋ง์ผํ๋ ์ด์ค. ๊ณต์ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ์๋ง ๋ด๋ณด๋ด์ง๋๋ค. ๊ทธ ์ธ์๋ ์์mcp_server.name: ์ด ์์ฒญ์ ์์ฑํ ํด์์ ๋๊ตฌ๊ฐ ์คํ๋ MCP ์๋ฒ. ๊ธฐ๋ณธ ์ ๊ณต, claude.ai ํ๋ก์ ๋ฐ ๊ณต์ ๋ ์ง์คํธ๋ฆฌ ์๋ฒ ์ด๋ฆ์ ๊ทธ๋๋ก ๋ํ๋ฉ๋๋ค. ์ฌ์ฉ์ ๊ตฌ์ฑ ์๋ฒ ์ด๋ฆ์"custom"์ผ๋ก ๋์ฒด๋ฉ๋๋ค. MCP ๋๊ตฌ๊ฐ ์คํ๋์ง ์์์ ๋๋ ์์mcp_tool.name: ์ด ์์ฒญ์ ์์ฑํ ํด์์ ์คํ๋ MCP ๋๊ตฌ (mcp_server.name๊ณผ ๋์ผํ ์์ ์ฒ๋ฆฌ). MCP ๋๊ตฌ๊ฐ ์คํ๋์ง ์์์ ๋๋ ์์
ํ ํฐ ์นด์ดํฐ
๊ฐ API ์์ฒญ ํ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
type: ("input","output","cacheRead","cacheCreation")model: ๋ชจ๋ธ ์๋ณ์ (์: "claude-sonnet-5")query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ ์ ๋ฒ์ฃผ."main","subagent"๋๋"auxiliary"์ค ํ๋speed: ์์ฒญ์ด ๋น ๋ฅธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ ๋"fast". ๊ทธ ์ธ์๋ ์์effort: ์์ฒญ์ ์ ์ฉ๋ ๋ ธ๋ ฅ ์์ค. ๋น์ฉ ์นด์ดํฐ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: ์์ฒญ์ ๋ํ ์คํฌ, ํ๋ฌ๊ทธ์ธ, ์์ด์ ํธ ๋ฐ MCP ์์ฑ. ๋น์ฉ ์นด์ดํฐ์ ์ ์ ๋ฐ ์์ ๋์์ ์ฐธ์กฐํ์ธ์.
์ฝ๋ ํธ์ง ๋๊ตฌ ๊ฒฐ์ ์นด์ดํฐ
์ฌ์ฉ์๊ฐ Edit, Write ๋๋ NotebookEdit ๋๊ตฌ ์ฌ์ฉ์ ์๋ฝํ๊ฑฐ๋ ๊ฑฐ๋ถํ ๋ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
tool_name: ๋๊ตฌ ์ด๋ฆ ("Edit","Write","NotebookEdit")decision: ์ฌ์ฉ์ ๊ฒฐ์ ("accept","reject")source: ๊ฒฐ์ ์ถ์ฒ."config","hook","user_permanent","user_temporary","user_abort"๋๋"user_reject"์ค ํ๋. ๋๊ตฌ ๊ฒฐ์ ์ด๋ฒคํธ๋ฅผ ์ฐธ์กฐํ์ฌ ๊ฐ ๊ฐ์ ์๋ฏธ๋ฅผ ํ์ธํ์ธ์.language: ํธ์ง๋ ํ์ผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ์:"TypeScript","Python","JavaScript"๋๋"Markdown". ์ธ์๋์ง ์๋ ํ์ผ ํ์ฅ์์ ๊ฒฝ์ฐ"unknown"์ ๋ฐํํฉ๋๋ค.
ํ์ฑ ์๊ฐ ์นด์ดํฐ
Claude Code๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ์ค์ ์๊ฐ์ ์ถ์ ํฉ๋๋ค (์ ํด ์๊ฐ ์ ์ธ). ์ด ๋ฉํธ๋ฆญ์ ์ฌ์ฉ์ ์ํธ ์์ฉ (์ ๋ ฅ, ์๋ต ์ฝ๊ธฐ) ์ค ๋ฐ CLI ์ฒ๋ฆฌ (๋๊ตฌ ์คํ, AI ์๋ต ์์ฑ) ์ค์ ์ฆ๊ฐํฉ๋๋ค.
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
type: ํค๋ณด๋ ์ํธ ์์ฉ์ ๊ฒฝ์ฐ"user", ๋๊ตฌ ์คํ ๋ฐ AI ์๋ต์ ๊ฒฝ์ฐ"cli"
์ด๋ฒคํธ
Claude Code๋ OpenTelemetry ๋ก๊ทธ/์ด๋ฒคํธ๋ฅผ ํตํด ๋ค์ ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋
๋๋ค (OTEL_LOGS_EXPORTER๊ฐ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ):
์ด๋ฒคํธ ์๊ด ์์ฑ
์ฌ์ฉ์๊ฐ ํ๋กฌํํธ๋ฅผ ์ ์ถํ๋ฉด Claude Code๋ ์ฌ๋ฌ API ํธ์ถ์ ์ํํ๊ณ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค. prompt.id ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ํด๋น ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ๋จ์ผ ํ๋กฌํํธ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
| ์์ฑ | ์ค๋ช |
|---|---|
prompt.id |
๋จ์ผ ์ฌ์ฉ์ ํ๋กฌํํธ ์ฒ๋ฆฌ ์ค์ ์์ฑ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํ๋ UUID v4 ์๋ณ์ |
๋จ์ผ ํ๋กฌํํธ๋ก ํธ๋ฆฌ๊ฑฐ๋ ๋ชจ๋ ํ๋์ ์ถ์ ํ๋ ค๋ฉด ํน์ prompt.id ๊ฐ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ํํฐ๋งํฉ๋๋ค. ์ด๋ user_prompt ์ด๋ฒคํธ, ๋ชจ๋ api_request ์ด๋ฒคํธ ๋ฐ ํด๋น ํ๋กฌํํธ ์ฒ๋ฆฌ ์ค์ ๋ฐ์ํ ๋ชจ๋ tool_result ์ด๋ฒคํธ๋ฅผ ๋ฐํํฉ๋๋ค.
prompt.id๋ ๊ฐ ํ๋กฌํํธ๊ฐ ๊ณ ์ ID๋ฅผ ์์ฑํ์ฌ ๊ณ์ ์ฆ๊ฐํ๋ ์๊ณ์ด ์๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ฉํธ๋ฆญ์์ ์ ์ธ๋ฉ๋๋ค. ์ด๋ฒคํธ ์์ค ๋ถ์ ๋ฐ ๊ฐ์ฌ ์ถ์ ์๋ง ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ์ ํ๋กฌํํธ ์ด๋ฒคํธ
์ฌ์ฉ์๊ฐ ํ๋กฌํํธ๋ฅผ ์ ์ถํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.user_prompt
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"user_prompt"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐprompt_length: ํ๋กฌํํธ์ ๊ธธ์ดprompt: ํ๋กฌํํธ ์ฝํ ์ธ . ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋จ.OTEL_LOG_USER_PROMPTS=1๋ก ์ค์ ํ์ฌ ํฌํจcommand_name: ํ๋กฌํํธ๊ฐ ๋ช ๋ น์ ํธ์ถํ ๋ ๋ช ๋ น ์ด๋ฆ.compact๋๋debug์ ๊ฐ์ ๊ธฐ๋ณธ ์ ๊ณต ๋ฐ ๋ฒ๋ค ๋ช ๋ น ์ด๋ฆ์ ๊ทธ๋๋ก ๋ด๋ณด๋ด์ง๋๋ค.reset๊ณผ ๊ฐ์ ๋ณ์นญ์ ์ ๊ท ์ด๋ฆ์ด ์๋ ์ ๋ ฅํ ๋๋ก ๋ด๋ณด๋ ๋๋ค. ์ฌ์ฉ์ ์ ์, ํ๋ฌ๊ทธ์ธ ๋ฐ MCP ๋ช ๋ น ์ด๋ฆ์OTEL_LOG_TOOL_DETAILS=1์ด ์ค์ ๋์ง ์์ผ๋ฉดcustom๋๋mcp๋ก ์ถ์๋ฉ๋๋คcommand_source: ๋ช ๋ น์ด ์์ ๋ ๋ช ๋ น์ ์ถ์ฒ:builtin,custom๋๋mcp. ํ๋ฌ๊ทธ์ธ ์ ๊ณต ๋ช ๋ น์custom์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค
์ด์์คํดํธ ์๋ต ์ด๋ฒคํธ
๊ฐ API ์์ฒญ์ด ๋ชจ๋ธ์ ํ ์คํธ ์ฝํ ์ธ ๋ฅผ ๋ฐํํ ํ ๊ธฐ๋ก๋ฉ๋๋ค. ์๋ต์ ํ ์คํธ ๋ธ๋ก๋ง ํฌํจ๋ฉ๋๋ค. ์ฌ๊ณ ๋ธ๋ก ๋ฐ ๋๊ตฌ ์ฌ์ฉ ๋ธ๋ก์ ์ ์ธ๋ฉ๋๋ค. {/* min-version: 2.1.193 */}Claude Code v2.1.193 ์ด์ ํ์.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.assistant_response
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"assistant_response"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐresponse_length: ์๋ต ํ ์คํธ์ ๊ธธ์ด (๋ฌธ์)response: ์๋ต ํ ์คํธ (60KB์์ ์๋ฆผ). ๊ธฐ๋ณธ์ ์ผ๋ก<REDACTED>๋ก ์์ ๋จ.OTEL_LOG_ASSISTANT_RESPONSES=1๋ก ์ค์ ํ์ฌ ํฌํจ.OTEL_LOG_ASSISTANT_RESPONSES๊ฐ ์ค์ ๋์ง ์์ผ๋ฉดOTEL_LOG_USER_PROMPTS๊ฐ ๋์ ์ ์ดํ๋ฏ๋ก ํ๋กฌํํธ ๋ก๊น ์ด ์ผ์ ธ ์๋ ๋์ ์๋ต์ ์์ ๋ ์ํ๋ก ์ ์งํ๋ ค๋ฉดOTEL_LOG_ASSISTANT_RESPONSES=0์ผ๋ก ์ค์ ํฉ๋๋คmodel: ๋ชจ๋ธ ์๋ณ์ (์: "claude-sonnet-4-6")request_id: ์๋ต์request-idํค๋์ Anthropic API ์์ฒญ ID. API๊ฐ ๋ฐํํ ๋๋ง ํ์๋ฉ๋๋คquery_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ , ์:"repl_main_thread","compact"๋๋ ํ์ ์์ด์ ํธ ์ด๋ฆ
๋๊ตฌ ๊ฒฐ๊ณผ ์ด๋ฒคํธ
๋๊ตฌ๊ฐ ์คํ์ ์๋ฃํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ๋๊ตฌ ํธ์ถ์ด ๊ฑฐ๋ถ๋ ๊ฒฝ์ฐ ๋ด๋ณด๋ด์ง์ง ์์ต๋๋ค. ๋๊ตฌ ๊ฒฐ์ ์ด๋ฒคํธ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.tool_result
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"tool_result"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐtool_name: ๋๊ตฌ์ ์ด๋ฆtool_use_id: ์ด ๋๊ตฌ ํธ์ถ์ ๊ณ ์ ์๋ณ์. ํ ์ ์ ๋ฌ๋tool_use_id์ ์ผ์นํ์ฌ OTel ์ด๋ฒคํธ์ ํ ์บก์ฒ ๋ฐ์ดํฐ ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ํ์ฉํฉ๋๋ค.success:"true"๋๋"false"duration_ms: ์คํ ์๊ฐ (๋ฐ๋ฆฌ์ด)error_type: ๋๊ตฌ๊ฐ ์คํจํ์ ๋ ์ค๋ฅ ๋ฒ์ฃผ ๋ฌธ์์ด, ์:"Error:ENOENT"๋๋"ShellError"error(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ๋๊ตฌ๊ฐ ์คํจํ์ ๋ ์ ์ฒด ์ค๋ฅ ๋ฉ์์งdecision_type: ํญ์"accept"์ ๋๋ค. ์ด ์ด๋ฒคํธ๋ ๋๊ตฌ๊ฐ ์คํ๋ ํ์๋ง ๋ด๋ณด๋ด์ง๋๋ค (๊ฑฐ๋ถ๋ ํธ์ถ์ ๋๊ตฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง ์์)decision_source: ๊ถํ ๊ฒฐ์ ์ด ๋์จ ์์น."config","hook","user_permanent"๋๋"user_temporary"์ค ํ๋. ๋๊ตฌ ๊ฒฐ์ ์ด๋ฒคํธ๋ฅผ ์ฐธ์กฐํ์ฌ ๊ฐ ๊ฐ์ ์๋ฏธ๋ฅผ ํ์ธํ์ธ์. ๊ฑฐ๋ถ ์ ์ฉ ์ถ์ฒ์ธ"user_abort"๋ฐ"user_reject"๋ ์ด ์ด๋ฒคํธ์ ๋ํ๋์ง ์์ต๋๋ค.tool_input_size_bytes: JSON ์ง๋ ฌํ๋ ๋๊ตฌ ์ ๋ ฅ์ ํฌ๊ธฐ (๋ฐ์ดํธ)tool_result_size_bytes: ๋๊ตฌ ๊ฒฐ๊ณผ์ ํฌ๊ธฐ (๋ฐ์ดํธ)mcp_server_scope: MCP ์๋ฒ ๋ฒ์ ์๋ณ์ (MCP ๋๊ตฌ์ ๊ฒฝ์ฐ)tool_parameters(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ๋๊ตฌ๋ณ ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ๋ JSON ๋ฌธ์์ด:- Bash ๋๊ตฌ์ ๊ฒฝ์ฐ:
bash_command,full_command,timeout,description,dangerouslyDisableSandbox๋ฐgit_commit_id(git commit ๋ช ๋ น์ด ์ฑ๊ณตํ ๋ ์ปค๋ฐ SHA) ํฌํจ - WorkspaceBash ๋๊ตฌ์ ๊ฒฝ์ฐ:
bash_command,full_command,timeoutํฌํจ - MCP ๋๊ตฌ์ ๊ฒฝ์ฐ:
mcp_server_name,mcp_tool_nameํฌํจ - Skill ๋๊ตฌ์ ๊ฒฝ์ฐ:
skill_nameํฌํจ - Agent ๋๊ตฌ ๋๋ ๋ ๊ฑฐ์ Task ๋๊ตฌ์ ๊ฒฝ์ฐ:
subagent_typeํฌํจ
- Bash ๋๊ตฌ์ ๊ฒฝ์ฐ:
tool_input(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): JSON ์ง๋ ฌํ๋ ๋๊ตฌ ์ธ์์ ๋๋ค. 512์๋ฅผ ์ด๊ณผํ๋ ๊ฐ๋ณ ๊ฐ์ ์๋ฆฌ๊ณ , ์ ์ฒด ํ์ด๋ก๋๋ ์ฝ 4K ๋ฌธ์๋ก ์ ํ๋ฉ๋๋ค. MCP ๋๊ตฌ๋ฅผ ํฌํจํ ๋ชจ๋ ๋๊ตฌ์ ์ ์ฉ๋ฉ๋๋ค.
API ์์ฒญ ์ด๋ฒคํธ
Claude์ ๋ํ ๊ฐ API ์์ฒญ์ ๋ํด ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_request
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_request"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmodel: ์ฌ์ฉ๋ ๋ชจ๋ธ (์: "claude-sonnet-5")cost_usd: USD ๋จ์์ ์์ ๋น์ฉduration_ms: ์์ฒญ ์ง์ ์๊ฐ (๋ฐ๋ฆฌ์ด)input_tokens: ์ ๋ ฅ ํ ํฐ ์output_tokens: ์ถ๋ ฅ ํ ํฐ ์cache_read_tokens: ์บ์์์ ์ฝ์ ํ ํฐ ์cache_creation_tokens: ์บ์ ์์ฑ์ ์ฌ์ฉ๋ ํ ํฐ ์request_id: ์๋ต์request-idํค๋์ Anthropic API ์์ฒญ ID, ์:"req_011...". API๊ฐ ๋ฐํํ ๋๋ง ํ์๋ฉ๋๋ค.speed: ๋น ๋ฅธ ๋ชจ๋๊ฐ ํ์ฑํ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋"fast"๋๋"normal"query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ , ์:"repl_main_thread","compact"๋๋ ํ์ ์์ด์ ํธ ์ด๋ฆeffort: ์์ฒญ์ ์ ์ฉ๋ ๋ ธ๋ ฅ ์์ค:"low","medium","high","xhigh"๋๋"max". ๋ชจ๋ธ์ด ๋ ธ๋ ฅ์ ์ง์ํ์ง ์์ ๋๋ ์์agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: ์์ฒญ์ ๋ํ ์คํฌ, ํ๋ฌ๊ทธ์ธ, ์์ด์ ํธ ๋ฐ MCP ์์ฑ. ๋น์ฉ ์นด์ดํฐ์ ์ ์ ๋ฐ ์์ ๋์์ ์ฐธ์กฐํ์ธ์.
API ์ค๋ฅ ์ด๋ฒคํธ
Claude์ ๋ํ API ์์ฒญ์ด ์คํจํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_error
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_error"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmodel: ์ฌ์ฉ๋ ๋ชจ๋ธ (์: "claude-sonnet-5")error: ์ค๋ฅ ๋ฉ์์งstatus_code: HTTP ์ํ ์ฝ๋ (์ซ์). HTTP๊ฐ ์๋ ์ค๋ฅ (์: ์ฐ๊ฒฐ ์คํจ)์ ๊ฒฝ์ฐ ์์duration_ms: ์์ฒญ ์ง์ ์๊ฐ (๋ฐ๋ฆฌ์ด)attempt: ์ด๊ธฐ ์์ฒญ์ ํฌํจํ ์ด ์๋ ํ์ (1์ ์ฌ์๋๊ฐ ๋ฐ์ํ์ง ์์์์ ์๋ฏธ)request_id: ์๋ต์request-idํค๋์ Anthropic API ์์ฒญ ID, ์:"req_011...". API๊ฐ ๋ฐํํ ๋๋ง ํ์๋ฉ๋๋ค.speed: ๋น ๋ฅธ ๋ชจ๋๊ฐ ํ์ฑํ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋"fast"๋๋"normal"query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ , ์:"repl_main_thread","compact"๋๋ ํ์ ์์ด์ ํธ ์ด๋ฆeffort: ์์ฒญ์ ์ ์ฉ๋ ๋ ธ๋ ฅ ์์ค. ๋ชจ๋ธ์ด ๋ ธ๋ ฅ์ ์ง์ํ์ง ์์ ๋๋ ์์agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: ์์ฒญ์ ๋ํ ์คํฌ, ํ๋ฌ๊ทธ์ธ, ์์ด์ ํธ ๋ฐ MCP ์์ฑ. ๋น์ฉ ์นด์ดํฐ์ ์ ์ ๋ฐ ์์ ๋์์ ์ฐธ์กฐํ์ธ์.
API ๊ฑฐ๋ถ ์ด๋ฒคํธ
API ์์ฒญ์ด stop_reason: "refusal"์ ๋ฐํํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ๊ฑฐ๋ถ๋ HTTP ์ค๋ฅ๊ฐ ์๋ ์ฑ๊ณต์ ์ธ ์๋ต ์คํธ๋ฆผ์ ๋์ฐฉํ๋ฏ๋ก api_error ์ด๋ฒคํธ๋ ์ด์ ๋ํด ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฑฐ๋ถ ๋น๋๋ฅผ ์ถ์ ํ๊ณ ๊ฑฐ๋ถ๋ฅผ api_request ๋ฐ api_error์ ๋์ผํ ์์ฑ์ผ๋ก ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_refusal
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_refusal"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmodel: ์์ฒญ์ ๋ชจ๋ธ ์๋ณ์request_id: ์๋ต์request-idํค๋์ Anthropic API ์์ฒญ ID, ์:"req_011...". API๊ฐ ๋ฐํํ ๋๋ง ํ์๋ฉ๋๋ค.query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ , ์:"repl_main_thread","compact"๋๋ ํ์ ์์ด์ ํธ ์ด๋ฆ.api_request์ ์ ์๋ฅผ ์ฐธ์กฐํ์ธ์.speed: ๋น ๋ฅธ ๋ชจ๋๊ฐ ํ์ฑํ๋์์ ๋"fast", ๋๋"normal"attempt: ์ฌ์๋ ์๋ ๋ฒํธ. ์ฒซ ๋ฒ์งธ ์๋๋1์ ๋๋ค.effort: ์์ฒญ์ ์ ์ฉ๋ ๋ ธ๋ ฅ ์์ค. ๋ชจ๋ธ์ด ๋ ธ๋ ฅ์ ์ง์ํ์ง ์์ ๋๋ ์์server_fallback_hop: API์ ์๋ฒ ์ธก ๋ชจ๋ธ ํด๋ฐฑ์ด ์ด๋ฏธ ์ด ๊ฑฐ๋ถ๋ฅผ ๋ค๋ฅธ ๋ชจ๋ธ์์ ์ฌ์๋ํ์ผ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ด ํน์ ๊ฑฐ๋ถ๋ฅผ ๋ณด์ง ๋ชปํ์ ๋true. ์์ฒญ์ด ๊ฑฐ๋ถ๋ก ๋๋ฌ์ ๋false. ๋จ์ผ ํด์ ๋์ค์false์ต์ข ์ด๋ฒคํธ๊ฐ ์๋trueํ ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค.has_category: API ์๋ต์ด"cyber","bio","frontier_llm"๋๋"reasoning_extraction"์stop_details.category๋ฅผ ์ ๋ฌํ์ ๋true. ์๋ต์ด ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ๋ฌํ์ง ์์๊ฑฐ๋ ํด๋น ์งํฉ ์ธ๋ถ์ ๊ฐ์ ์ ๋ฌํ์ ๋false.server_fallback_hop์ดtrue์ผ ๋๋ ์์ (ํ ๋ธ๋ก์stop_details๋ฅผ ์ ๋ฌํ์ง ์์).has_explanation: API ์๋ต์ดstop_details.explanation์ ์ ๋ฌํ์ ๋true, ๊ทธ ์ธ์๋false.server_fallback_hop์ดtrue์ผ ๋๋ ์์.category: API ์๋ต์stop_details.category๊ฐ."cyber","bio","frontier_llm"๋๋"reasoning_extraction"์ค ํ๋.OTEL_LOG_TOOL_DETAILS=1์ด ์ค์ ๋์ด ์๊ณhas_category๊ฐtrue์ผ ๋๋ง ํ์๋ฉ๋๋ค.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: ์์ฒญ์ ๋ํ ์คํฌ, ํ๋ฌ๊ทธ์ธ, ์์ด์ ํธ ๋ฐ MCP ์์ฑ. ๋น์ฉ ์นด์ดํฐ์ ์ ์ ๋ฐ ์์ ๋์์ ์ฐธ์กฐํ์ธ์.
API ์์ฒญ ๋ณธ๋ฌธ ์ด๋ฒคํธ
OTEL_LOG_RAW_API_BODIES๊ฐ ์ค์ ๋์ด ์์ ๋ ๊ฐ API ์์ฒญ ์๋์ ๋ํด ๊ธฐ๋ก๋ฉ๋๋ค. ์กฐ์ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ฌ์๋๋ ๊ฐ๊ฐ ์์ ์ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ฏ๋ก ์๋๋น ํ๋์ ์ด๋ฒคํธ๊ฐ ๋ด๋ณด๋ด์ง๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_request_body
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_request_body"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐbody: JSON ์ง๋ ฌํ๋ Messages API ์์ฒญ ๋งค๊ฐ๋ณ์ (์์คํ ํ๋กฌํํธ, ๋ฉ์์ง, ๋๊ตฌ ๋ฑ) (60KB์์ ์๋ฆผ). ์ด์ ์ด์์คํดํธ ํด์ ํ์ฅ ์ฌ๊ณ ์ฝํ ์ธ ๋ ์์ ๋ฉ๋๋ค. ์ธ๋ผ์ธ ๋ชจ๋ (OTEL_LOG_RAW_API_BODIES=1)์์๋ง ๋ด๋ณด๋ด์ง๋๋ค.body_ref: ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ์ ํฌํจํ๋<dir>/<uuid>.request.jsonํ์ผ์ ์ ๋ ๊ฒฝ๋ก. ํ์ผ ๋ชจ๋ (OTEL_LOG_RAW_API_BODIES=file:<dir>)์์๋ง ๋ด๋ณด๋ด์ง๋๋ค.body_length: ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ ๊ธธ์ด.OTEL_LOG_RAW_API_BODIES=file:<dir>์ผ ๋ UTF-8 ๋ฐ์ดํธ,=1์ผ ๋ UTF-16 ์ฝ๋ ๋จ์body_truncated: ์ธ๋ผ์ธ ์๋ฆผ์ด ๋ฐ์ํ์ ๋"true". ํ์ผ ๋ชจ๋ ๋ฐ ์๋ฆผ์ด ๋ฐ์ํ์ง ์์์ ๋๋ ์์model: ์์ฒญ ๋งค๊ฐ๋ณ์์ ๋ชจ๋ธ ์๋ณ์query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ (์:"compact")
API ์๋ต ๋ณธ๋ฌธ ์ด๋ฒคํธ
OTEL_LOG_RAW_API_BODIES๊ฐ ์ค์ ๋์ด ์์ ๋ ๊ฐ ์ฑ๊ณต์ ์ธ API ์๋ต์ ๋ํด ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_response_body
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_response_body"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐbody: JSON ์ง๋ ฌํ๋ Messages API ์๋ต (id, ์ฝํ ์ธ ๋ธ๋ก, ์ฌ์ฉ, ์ค์ง ์ด์ ) (60KB์์ ์๋ฆผ). ํ์ฅ ์ฌ๊ณ ์ฝํ ์ธ ๋ ์์ ๋ฉ๋๋ค. ์ธ๋ผ์ธ ๋ชจ๋ (OTEL_LOG_RAW_API_BODIES=1)์์๋ง ๋ด๋ณด๋ด์ง๋๋ค.body_ref: ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ์ ํฌํจํ๋<dir>/<request_id>.response.jsonํ์ผ์ ์ ๋ ๊ฒฝ๋ก. ํ์ผ ๋ชจ๋ (OTEL_LOG_RAW_API_BODIES=file:<dir>)์์๋ง ๋ด๋ณด๋ด์ง๋๋ค.body_length: ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ ๊ธธ์ด.OTEL_LOG_RAW_API_BODIES=file:<dir>์ผ ๋ UTF-8 ๋ฐ์ดํธ,=1์ผ ๋ UTF-16 ์ฝ๋ ๋จ์body_truncated: ์ธ๋ผ์ธ ์๋ฆผ์ด ๋ฐ์ํ์ ๋"true". ํ์ผ ๋ชจ๋ ๋ฐ ์๋ฆผ์ด ๋ฐ์ํ์ง ์์์ ๋๋ ์์model: ๋ชจ๋ธ ์๋ณ์query_source: ์์ฒญ์ ๋ฐ๊ธํ ํ์ ์์คํ request_id: ์๋ต์request-idํค๋์ Anthropic API ์์ฒญ ID, ์:"req_011...". API๊ฐ ๋ฐํํ ๋๋ง ํ์๋ฉ๋๋ค.
๋๊ตฌ ๊ฒฐ์ ์ด๋ฒคํธ
๋๊ตฌ ๊ถํ ๊ฒฐ์ ์ด ๋ด๋ ค์ง ๋ ๊ธฐ๋ก๋ฉ๋๋ค (์๋ฝ/๊ฑฐ๋ถ).
์ด๋ฒคํธ ์ด๋ฆ: claude_code.tool_decision
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"tool_decision"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐtool_name: ๋๊ตฌ์ ์ด๋ฆ (์: "Read", "Edit", "Write", "NotebookEdit")tool_use_id: ์ด ๋๊ตฌ ํธ์ถ์ ๊ณ ์ ์๋ณ์. ํ ์ ์ ๋ฌ๋tool_use_id์ ์ผ์นํ์ฌ OTel ์ด๋ฒคํธ์ ํ ์บก์ฒ ๋ฐ์ดํฐ ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ํ์ฉํฉ๋๋ค.decision:"accept"๋๋"reject"source: ๊ฒฐ์ ์ถ์ฒ:"config": ํ๋ก์ ํธ ์ค์ , ์ฌ์ฉ์์ ๊ฐ์ธ ์ค์ ์ ํ์ฉ ๊ท์น, ์ํฐํ๋ผ์ด์ฆ ๊ด๋ฆฌ ์ ์ฑ ,--allowedTools๋๋--disallowedToolsํ๋๊ทธ, ํ์ฑ ๊ถํ ๋ชจ๋, ๊ฐ์ ๋ํํ CLI ์ธ์ ์ ์ด์ ํ๋กฌํํธ์์์ ์ธ์ ๋ฒ์ ๋ถ์ฌ ๋๋ ๋๊ตฌ๊ฐ ๋ณธ์ง์ ์ผ๋ก ์์ ํ๊ธฐ ๋๋ฌธ์ ํ๋กฌํํธ ์์ด ์๋์ผ๋ก ๊ฒฐ์ ๋จ. ์ด๋ฒคํธ๋ ์ด๋ฌํ ์ถ์ฒ ์ค ์ด๋ ๊ฒ์ด ์ผ์นํ๋์ง ๋ํ๋ด์ง ์์ต๋๋ค."hook":PreToolUse๋๋PermissionRequestํ ์ด ๊ฒฐ์ ์ ๋ฐํํจ."user_permanent": ์ฌ์ฉ์๊ฐ ๊ถํ ํ๋กฌํํธ์์ "์, ๊ทธ๋ฆฌ๊ณ ... ๋ค์ ๋ฌป์ง ๋ง์ธ์"๋ฅผ ์ ํํ์ฌ ๊ฐ์ธ ์ค์ ์ ํ์ฉ ๊ท์น์ ์ ์ฅํ์ ๋ ๋ด๋ณด๋ด์ง๋๋ค. ๋ํํ CLI์์๋ ํด๋น ์ ํ ์์ฒด์ ๋ํด์๋ง ๋ด๋ณด๋ด์ง๋๋ค. ๋์ค์ ์ ์ฅ๋ ๊ท์น๊ณผ ์ผ์นํ๋ ํธ์ถ์ ๋์"config"์ ๋ด๋ณด๋ ๋๋ค. Agent SDK ๋๋ ๋น๋ํํ-p์ธ์ ์์๋ ์ด๊ธฐ ์ ํ๊ณผ ๋์ค์ ๊ท์น ์ผ์น ๋ชจ๋"user_permanent"๋ฅผ ๋ด๋ณด๋ ๋๋ค. ์๋ฝ์ผ๋ก ์ฒ๋ฆฌ๋จ."user_temporary": ์ฌ์ฉ์๊ฐ ๊ถํ ํ๋กฌํํธ์์ "์"๋ฅผ ์ ํํ๊ฑฐ๋ ํ์ผ ํธ์ง ๋๋ ์ฝ๊ธฐ ํ๋กฌํํธ์์ "์ด ์ธ์ ์ค" ์ต์ ์ค ํ๋๋ฅผ ์ ํํ์ ๋ ๋ด๋ณด๋ด์ง๋๋ค. ๋ํํ CLI์์๋ ์ ํ ์์ฒด์ ๋ํด์๋ง ๋ด๋ณด๋ด์ง๋๋ค. ๋์ค์ ํด๋น ์ธ์ ๋ฒ์ ๋ถ์ฌ์ ์ผ์นํ๋ ํธ์ถ์ ๋์"config"์ ๋ด๋ณด๋ ๋๋ค. Agent SDK ๋๋ ๋น๋ํํ-p์ธ์ ์์๋ ์ ํ๊ณผ ๋์ค์ ์ผ์น ๋ชจ๋"user_temporary"๋ฅผ ๋ด๋ณด๋ ๋๋ค. ์๋ฝ์ผ๋ก ์ฒ๋ฆฌ๋จ."user_abort": ์ฌ์ฉ์๊ฐ ๋ต๋ณ ์์ด ๊ถํ ํ๋กฌํํธ๋ฅผ ๋ซ์์ ๋ ๋ด๋ณด๋ด์ง๋๋ค. ๊ฑฐ๋ถ๋ก ์ฒ๋ฆฌ๋จ."user_reject": ์ฌ์ฉ์๊ฐ ํ๋กฌํํธ๋ ๋ "์๋์ค"๋ฅผ ์ ํํ์ ๋ ๋ด๋ณด๋ด์ง๋๋ค. ๋ํํ CLI์์๋ ํด๋น ์ ํ ์์ฒด์ ๋ํด์๋ง ๋ด๋ณด๋ด์ง๋๋ค. ์ฌ์ฉ์์ ๊ฐ์ธ ์ค์ ์ ๊ฑฐ๋ถ ๊ท์น๊ณผ ์ผ์นํ๋ ํธ์ถ์ ๋์"config"์ ๋ด๋ณด๋ ๋๋ค. Agent SDK ๋๋ ๋น๋ํํ-p์ธ์ ์์๋ ๊ฐ์ธ ์ค์ ์ ๊ฑฐ๋ถ ๊ท์น๊ณผ ์ผ์นํ๋ ํธ์ถ์ด"user_reject"๋ฅผ ๋ด๋ณด๋ ๋๋ค. ๊ฑฐ๋ถ๋ก ์ฒ๋ฆฌ๋จ.
tool_parameters(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ๋๊ตฌ๋ณ ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ๋ JSON ๋ฌธ์์ด. ๋๊ตฌ ๊ฒฐ๊ณผ ์ด๋ฒคํธ์ ๋์ผํ ํํ์ด์ง๋งgit_commit_id์ ๊ฐ์ ์คํ ํ ํ๋๋ ์ ์ธ๋ฉ๋๋ค. ๊ถํ ๊ฒฐ์ ์ดupdatedInput์ ํตํด ๋๊ตฌ ์ ๋ ฅ์ ๋ค์ ์ธ ๊ฒฝ์ฐ ์๋ฝ๋ ํธ์ถ์tool_result์ ๊ฐ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด ์์ฑ์ ์ฌ์ฉํ์ฌdecision์ด"reject"์ผ ๋ ์ด๋ค ๋ช ๋ น์ด ๊ฑฐ๋ถ๋์๋์ง ํ์ธํฉ๋๋ค.- Bash ๋๊ตฌ์ ๊ฒฝ์ฐ:
bash_command,full_command,timeout,description,dangerouslyDisableSandboxํฌํจ - WorkspaceBash ๋๊ตฌ์ ๊ฒฝ์ฐ:
bash_command,full_command,timeoutํฌํจ - MCP ๋๊ตฌ์ ๊ฒฝ์ฐ:
mcp_server_name,mcp_tool_nameํฌํจ - Skill ๋๊ตฌ์ ๊ฒฝ์ฐ:
skill_nameํฌํจ - Agent ๋๊ตฌ ๋๋ ๋ ๊ฑฐ์ Task ๋๊ตฌ์ ๊ฒฝ์ฐ:
subagent_typeํฌํจ
- Bash ๋๊ตฌ์ ๊ฒฝ์ฐ:
๊ถํ ๋ชจ๋ ๋ณ๊ฒฝ ์ด๋ฒคํธ
๊ถํ ๋ชจ๋๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ธฐ๋ก๋ฉ๋๋ค (์: Shift+Tab ์ํ, ๊ณํ ๋ชจ๋ ์ข
๋ฃ ๋๋ ์๋ ๋ชจ๋ ๊ฒ์ดํธ ํ์ธ).
์ด๋ฒคํธ ์ด๋ฆ: claude_code.permission_mode_changed
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"permission_mode_changed"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐfrom_mode: ์ด์ ๊ถํ ๋ชจ๋, ์:"default","plan","acceptEdits","auto"๋๋"bypassPermissions"to_mode: ์ ๊ถํ ๋ชจ๋trigger: ๋ณ๊ฒฝ์ ์ผ๊ธฐํ ๊ฒ."shift_tab","exit_plan_mode","auto_gate_denied"๋๋"auto_opt_in"์ค ํ๋. SDK ๋๋ ๋ธ๋ฆฌ์ง์์ ์ ํ์ด ์์๋ ๋๋ ์์
์ธ์ฆ ์ด๋ฒคํธ
/login ๋๋ /logout์ด ์๋ฃ๋ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.auth
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"auth"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐaction:"login"๋๋"logout"success:"true"๋๋"false"auth_method: ์ธ์ฆ ๋ฐฉ๋ฒ, ์:"oauth"error_category: ์์ ์ด ์คํจํ์ ๋ ๋ฒ์ฃผ๋ณ ์ค๋ฅ ์ข ๋ฅ. ์๋ณธ ์ค๋ฅ ๋ฉ์์ง๋ ํฌํจ๋์ง ์์ต๋๋คstatus_code: ์์ ์ด HTTP ์ค๋ฅ๋ก ์คํจํ์ ๋ HTTP ์ํ ์ฝ๋ (๋ฌธ์์ด)
MCP ์๋ฒ ์ฐ๊ฒฐ ์ด๋ฒคํธ
MCP ์๋ฒ๊ฐ ์ฐ๊ฒฐ, ์ฐ๊ฒฐ ํด์ ๋๋ ์ฐ๊ฒฐ ์คํจํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.mcp_server_connection
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"mcp_server_connection"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐstatus:"connected","failed"๋๋"disconnected"transport_type: ์๋ฒ ์ ์ก, ์:"stdio","sse"๋๋"http"server_scope: ์๋ฒ๊ฐ ๊ตฌ์ฑ๋ ๋ฒ์, ์:"user","project"๋๋"local"duration_ms: ์ฐ๊ฒฐ ์๋ ์ง์ ์๊ฐ (๋ฐ๋ฆฌ์ด)error_code: ์ฐ๊ฒฐ์ด ์คํจํ์ ๋ ์ค๋ฅ ์ฝ๋is_plugin: ์๋ฒ๊ฐ ํ๋ฌ๊ทธ์ธ์์ ์ ๊ณต๋ ๋true, ๊ทธ ์ธ์๋falseplugin_id_hash(is_plugin์ดtrue์ผ ๋): ํ๋ฌ๊ทธ์ธ ์ด๋ฆ ๋ฐ ๋ง์ผํ๋ ์ด์ค์ ์์ ์ ์ธ ํด์ (์ด๋ฆ์ ๋ ธ์ถํ์ง ์๊ณ ํ๋ฌ๊ทธ์ธ๋ณ๋ก ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํํ๊ธฐ ์ํจ)plugin.name(is_plugin์ดtrue์ผ ๋): ์๋ฒ๋ฅผ ์ ๊ณตํ๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ. ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ด ์๋๋ฉด ๋ฆฌํฐ๋ด ๋ฌธ์์ด"third-party"์ ๋๋ค. ๊ณต์ Anthropic ์์ค์ ํ๋ฌ๊ทธ์ธ์ ํญ์ ์ด๋ฆ์ผ๋ก ์๋ณ๋ฉ๋๋ค.plugin_id_hash๋ฐplugin.name์์ฑ์ ์์ ์ ๋ชจ๋ํฐ๋ง ๋ฐฑ์๋๋ก ํ๋ฅด๋ฉฐ Anthropic์ผ๋ก ์ ์ก๋์ง ์์ต๋๋คserver_name(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ๊ตฌ์ฑ๋ ์๋ฒ ์ด๋ฆerror(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ์ฐ๊ฒฐ์ด ์คํจํ์ ๋ ์ ์ฒด ์ค๋ฅ ๋ฉ์์ง
๋ด๋ถ ์ค๋ฅ ์ด๋ฒคํธ
Claude Code๊ฐ ์์์น ๋ชปํ ๋ด๋ถ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ์ค๋ฅ ํด๋์ค ์ด๋ฆ๊ณผ errno ์คํ์ผ ์ฝ๋๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ์ค๋ฅ ๋ฉ์์ง ๋ฐ ์คํ ์ถ์ ์ ํฌํจ๋์ง ์์ต๋๋ค. ์ด ์ด๋ฒคํธ๋ Bedrock, Vertex ๋๋ Foundry์ ๋ํด ์คํํ๊ฑฐ๋ DISABLE_ERROR_REPORTING์ด ์ค์ ๋์ด ์์ ๋๋ ๋ด๋ณด๋ด์ง์ง ์์ต๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.internal_error
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"internal_error"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐerror_name: ์ค๋ฅ ํด๋์ค ์ด๋ฆ, ์:"TypeError"๋๋"SyntaxError"error_code: ์ค๋ฅ์ ์์ ๋ Node.js errno ์ฝ๋, ์:"ENOENT"
ํ๋ฌ๊ทธ์ธ ์ค์น๋จ ์ด๋ฒคํธ
ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ฅผ ์๋ฃํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค (claude plugin install CLI ๋ช
๋ น ๋ฐ ๋ํํ /plugin UI ๋ชจ๋).
์ด๋ฒคํธ ์ด๋ฆ: claude_code.plugin_installed
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"plugin_installed"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmarketplace.is_official: ๋ง์ผํ๋ ์ด์ค๊ฐ ๊ณต์ Anthropic ๋ง์ผํ๋ ์ด์ค์ธ ๊ฒฝ์ฐ"true", ๊ทธ ์ธ์๋"false"install.trigger:"cli"๋๋"ui"plugin.name: ์ค์น๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ. ํ์ฌ ๋ง์ผํ๋ ์ด์ค์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ผ ๋๋ง ํฌํจ๋ฉ๋๋คplugin.version: ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ ์ ์ธ๋ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ ๋ฒ์ . ํ์ฌ ๋ง์ผํ๋ ์ด์ค์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ผ ๋๋ง ํฌํจ๋ฉ๋๋คmarketplace.name: ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ ๋ง์ผํ๋ ์ด์ค. ํ์ฌ ๋ง์ผํ๋ ์ด์ค์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ผ ๋๋ง ํฌํจ๋ฉ๋๋ค
ํ๋ฌ๊ทธ์ธ ๋ก๋๋จ ์ด๋ฒคํธ
์ธ์
์์ ์ ํ์ฑํ๋ ํ๋ฌ๊ทธ์ธ๋น ํ ๋ฒ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฆฟ ์ ์ฒด์์ ํ์ฑํ๋ ํ๋ฌ๊ทธ์ธ์ ์ธ๋ฒคํ ๋ฆฌํํฉ๋๋ค. ์ค์น ์์
์์ฒด๋ฅผ ๊ธฐ๋กํ๋ plugin_installed๋ฅผ ๋ณด์ํฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.plugin_loaded
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"plugin_loaded"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐplugin.name: ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ. ๊ณต์ ๋ง์ผํ๋ ์ด์ค ๋ฐ ๊ธฐ๋ณธ ์ ๊ณต ๋ฒ๋ค ์ธ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ด ์๋๋ฉด ๊ฐ์"third-party"์ ๋๋คmarketplace.name: ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ ๋ง์ผํ๋ ์ด์ค (์๋ ค์ง ๊ฒฝ์ฐ).plugin.name๊ณผ ๋์ผํ ์กฐ๊ฑด์์"third-party"๋ก ์์ ๋ฉ๋๋คplugin.version: ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ์ ๋ฒ์ . ์ด๋ฆ์ด ์์ ๋์ง ์๊ณ ๋งค๋ํ์คํธ๊ฐ ๋ฒ์ ์ ์ ์ธํ ๋๋ง ํฌํจ๋ฉ๋๋คplugin.scope: ํ๋ฌ๊ทธ์ธ์ ์ถ์ฒ ๋ฒ์ฃผ:"official","org","user-local"๋๋"default-bundle"enabled_via: ํ๋ฌ๊ทธ์ธ์ด ํ์ฑํ๋ ๋ฐฉ์:"default-enable","org-policy","seed-mount"๋๋"user-install"plugin_id_hash: ํ๋ฌ๊ทธ์ธ ์ด๋ฆ ๋ฐ ๋ง์ผํ๋ ์ด์ค์ ๊ฒฐ์ ๋ก ์ ํด์ (๊ตฌ์ฑ๋ ๋ด๋ณด๋ด๊ธฐ๋ก๋ง ์ ์ก๋จ). ํ๋ฆฟ ์ ์ฒด์์ ๋ก๋๋ ์๋ก ๋ค๋ฅธ ํ์ฌ ํ๋ฌ๊ทธ์ธ ์๋ฅผ ์ธ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค (์ด๋ฆ ๊ธฐ๋ก ์์ด)has_hooks: ํ๋ฌ๊ทธ์ธ์ด ํ ์ ์ ๊ณตํ๋์ง ์ฌ๋ถhas_mcp: ํ๋ฌ๊ทธ์ธ์ด MCP ์๋ฒ๋ฅผ ์ ๊ณตํ๋์ง ์ฌ๋ถhost_owned_mcp: SDK ํธ์คํธ๊ฐ ์ด ํ๋ฌ๊ทธ์ธ์ MCP ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๊ณ Claude Code๊ฐ ํ๋ฌ๊ทธ์ธ์ MCP ์๋ฒ ๊ตฌ์ฑ ์ฝ๊ธฐ๋ฅผ ๊ฑด๋๋ธ ๋true, ๊ทธ ์ธ์๋false. {/* min-version: 2.1.172 */}Claude Code v2.1.172 ์ด์ ํ์skill_path_count: ํ๋ฌ๊ทธ์ธ์ด ์ ์ธํ๋ ์คํฌ ๋๋ ํ ๋ฆฌ ์command_path_count: ํ๋ฌ๊ทธ์ธ์ด ์ ์ธํ๋ ๋ช ๋ น ๋๋ ํ ๋ฆฌ ์agent_path_count: ํ๋ฌ๊ทธ์ธ์ด ์ ์ธํ๋ ์์ด์ ํธ ๋๋ ํ ๋ฆฌ ์safe_mode: ์ธ์ ์ด--safe-mode๋ก ์์๋์์ ๋"true", ๊ทธ ์ธ์๋"false". ์์ ๋ชจ๋์์ ์ด ์ด๋ฒคํธ๋ ๊ตฌ์ฑ๋ ์ธ๋ฒคํ ๋ฆฌ๋ง ๋ณด๊ณ ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ๋ช ๋ น, ์คํฌ, ํ ๋ฐ MCP ์๋ฒ๋ ๋ก๋๋์ง ์์ต๋๋ค. {/* min-version: 2.1.169 */}Claude Code v2.1.169 ์ด์ ํ์
์คํฌ ํ์ฑํ๋จ ์ด๋ฒคํธ
์คํฌ์ด ํธ์ถ๋ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. Claude๊ฐ Skill ๋๊ตฌ๋ฅผ ํตํด ํธ์ถํ๋ / ๋ช
๋ น์ผ๋ก ์คํํ๋ ์๊ด์์ต๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.skill_activated
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"skill_activated"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐskill.name: ์คํฌ์ ์ด๋ฆ. ์ฌ์ฉ์ ์ ์ ๋ฐ ํ์ฌ ํ๋ฌ๊ทธ์ธ ์คํฌ์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ด ์๋๋ฉด ๊ฐ์ ์๋ฆฌ ํ์์"custom_skill"์ ๋๋คinvocation_trigger: ์คํฌ์ด ํธ๋ฆฌ๊ฑฐ๋ ๋ฐฉ์ ("user-slash","claude-proactive"๋๋"nested-skill")skill.source: ์คํฌ์ด ๋ก๋๋ ์์น (์:"bundled","userSettings","projectSettings","plugin")skill.kind: ์คํฌ์ด ์ํฌํ๋ก์ฐ ์คํฌ์ผ ๋"workflow". ๊ทธ ์ธ์๋ ์์plugin.name(OTEL_LOG_TOOL_DETAILS=1์ด๊ฑฐ๋ ํ๋ฌ๊ทธ์ธ์ด ๊ณต์ ๋ง์ผํ๋ ์ด์ค์์ ์จ ๊ฒฝ์ฐ): ์คํฌ์ด ํ๋ฌ๊ทธ์ธ์์ ์ ๊ณต๋ ๋ ์์ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆmarketplace.name(OTEL_LOG_TOOL_DETAILS=1์ด๊ฑฐ๋ ํ๋ฌ๊ทธ์ธ์ด ๊ณต์ ๋ง์ผํ๋ ์ด์ค์์ ์จ ๊ฒฝ์ฐ): ์คํฌ์ด ํ๋ฌ๊ทธ์ธ์์ ์ ๊ณต๋ ๋ ์์ ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ ๋ง์ผํ๋ ์ด์ค
@ ๋ฉ์ ์ด๋ฒคํธ
Claude Code๊ฐ ํ๋กฌํํธ์์ @-๋ฉ์
์ ํด์ํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ๋ชจ๋ ๋ฉ์
์ด ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ ์๋๋๋ค: ๊ถํ ๊ฑฐ๋ถ, ํ์ผ ํฌ๊ธฐ ์ด๊ณผ, PDF ์ฐธ์กฐ ์ฒจ๋ถ, ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก ์คํจ์ ๊ฐ์ ์กฐ๊ธฐ ์ข
๋ฃ ๊ฒฝ๋ก๋ ๋ก๊น
์์ด ๋ฐํ๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.at_mention
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"at_mention"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmention_type: ๋ฉ์ ์ ์ ํ ("file","directory","agent","mcp_resource")success: ๋ฉ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ํด์๋์๋์ง ์ฌ๋ถ ("true"๋๋"false")
API ์ฌ์๋ ์์ง๋จ ์ด๋ฒคํธ
API ์์ฒญ์ด ๋ ๋ฒ ์ด์ ์๋ ํ ์คํจํ ๋ ํ ๋ฒ ๊ธฐ๋ก๋ฉ๋๋ค. ์ต์ข
api_error ์ด๋ฒคํธ์ ํจ๊ป ๋ด๋ณด๋ด์ง๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.api_retries_exhausted
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"api_retries_exhausted"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐmodel: ์ฌ์ฉ๋ ๋ชจ๋ธerror: ์ต์ข ์ค๋ฅ ๋ฉ์์งstatus_code: HTTP ์ํ ์ฝ๋ (์ซ์). HTTP๊ฐ ์๋ ์ค๋ฅ์ ๊ฒฝ์ฐ ์์total_attempts: ์ํ๋ ์ด ์๋ ํ์total_retry_duration_ms: ๋ชจ๋ ์๋์ ๊ฑธ์น ์ด ๋ฒฝ์๊ณ ์๊ฐspeed:"fast"๋๋"normal"
ํ ๋ฑ๋ก๋จ ์ด๋ฒคํธ
์ธ์
์์ ์ ๊ตฌ์ฑ๋ ํ
๋น ํ ๋ฒ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฆฟ ์ ์ฒด์์ ํ์ฑํ๋ ํ
์ ์ธ๋ฒคํ ๋ฆฌํํฉ๋๋ค. ์คํ๋ณ hook_execution_start ๋ฐ hook_execution_complete ์ด๋ฒคํธ๋ฅผ ๋ณด์ํฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.hook_registered
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"hook_registered"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐhook_event: ํ ์ด๋ฒคํธ ์ ํ, ์:"PreToolUse"๋๋"PostToolUse"hook_type: ํ ๊ตฌํ ์ ํ:"command","prompt","mcp_tool","http"๋๋"agent"hook_source: ํ ์ด ์ ์๋ ์์น:"userSettings","projectSettings","localSettings","flagSettings","policySettings"๋๋"pluginHook"safe_mode: ์ธ์ ์ด--safe-mode๋ก ์์๋์์ ๋"true", ๊ทธ ์ธ์๋"false". {/* min-version: 2.1.169 */}Claude Code v2.1.169 ์ด์ ํ์hook_matcher(OTEL_LOG_TOOL_DETAILS=1์ผ ๋): ์ค์ ๋ ๊ฒฝ์ฐ ํ ๊ตฌ์ฑ์ ๋งค์ฒ ๋ฌธ์์ดplugin.name(hook_source๊ฐ"pluginHook"์ผ ๋): ๊ธฐ์ฌํ๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ. ๊ณต์ ๋ง์ผํ๋ ์ด์ค ๋ฐ ๊ธฐ๋ณธ ์ ๊ณต ๋ฒ๋ค ์ธ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ๊ฒฝ์ฐOTEL_LOG_TOOL_DETAILS=1์ด ์๋๋ฉด ๊ฐ์"third-party"์ ๋๋คplugin_id_hash(hook_source๊ฐ"pluginHook"์ผ ๋): ํ๋ฌ๊ทธ์ธ ์ด๋ฆ ๋ฐ ๋ง์ผํ๋ ์ด์ค์ ๊ฒฐ์ ๋ก ์ ํด์ (๊ตฌ์ฑ๋ ๋ด๋ณด๋ด๊ธฐ๋ก๋ง ์ ์ก๋จ). ์ด๋ฆ์ ๊ธฐ๋กํ์ง ์๊ณ ๊ธฐ์ฌํ๋ ์๋ก ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ ์ธ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค
ํ ์คํ ์์ ์ด๋ฒคํธ
ํ๋ ์ด์์ ํ ์ด ํ ์ด๋ฒคํธ์ ๋ํด ์คํ์ ์์ํ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.hook_execution_start
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"hook_execution_start"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐhook_event: ํ ์ด๋ฒคํธ ์ ํ, ์:"PreToolUse"๋๋"PostToolUse"hook_name: ๋งค์ฒ๋ฅผ ํฌํจํ ์ ์ฒด ํ ์ด๋ฆ, ์:"PreToolUse:Write"num_hooks: ์ผ์นํ๋ ํ ๋ช ๋ น ์managed_only: ๊ด๋ฆฌ ์ ์ฑ ํ ๋ง ํ์ฉ๋ ๋"true"hook_source:"policySettings"๋๋"merged"safe_mode: ์ธ์ ์ด--safe-mode๋ก ์์๋์์ ๋"true", ๊ทธ ์ธ์๋"false". {/* min-version: 2.1.169 */}Claude Code v2.1.169 ์ด์ ํ์hook_definitions: JSON ์ง๋ ฌํ๋ ํ ๊ตฌ์ฑ. ์์ธ ๋ฒ ํ ์ถ์ ๊ณผOTEL_LOG_TOOL_DETAILS=1์ด ๋ชจ๋ ํ์ฑํ๋์ด ์์ ๋๋ง ํฌํจ๋จ
ํ ์คํ ์๋ฃ ์ด๋ฒคํธ
ํ ์ด๋ฒคํธ์ ๋ชจ๋ ํ ์ด ์๋ฃ๋์์ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.hook_execution_complete
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"hook_execution_complete"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐhook_event: ํ ์ด๋ฒคํธ ์ ํhook_name: ๋งค์ฒ๋ฅผ ํฌํจํ ์ ์ฒด ํ ์ด๋ฆnum_hooks: ์ผ์นํ๋ ํ ๋ช ๋ น ์num_success: ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์num_blocking: ์ฐจ๋จ ๊ฒฐ์ ์ ๋ฐํํ ์num_non_blocking_error: ์ฐจ๋จ ์์ด ์คํจํ ์num_cancelled: ์๋ฃ ์ ์ ์ทจ์๋ ์total_duration_ms: ๋ชจ๋ ์ผ์นํ๋ ํ ์ ๋ฒฝ์๊ณ ์ง์ ์๊ฐmanaged_only: ๊ด๋ฆฌ ์ ์ฑ ํ ๋ง ํ์ฉ๋ ๋"true"hook_source:"policySettings"๋๋"merged"safe_mode: ์ธ์ ์ด--safe-mode๋ก ์์๋์์ ๋"true", ๊ทธ ์ธ์๋"false". {/* min-version: 2.1.169 */}Claude Code v2.1.169 ์ด์ ํ์hook_definitions: JSON ์ง๋ ฌํ๋ ํ ๊ตฌ์ฑ. ์์ธ ๋ฒ ํ ์ถ์ ๊ณผOTEL_LOG_TOOL_DETAILS=1์ด ๋ชจ๋ ํ์ฑํ๋์ด ์์ ๋๋ง ํฌํจ๋จ
ํ ํ๋ฌ๊ทธ์ธ ๋ฉํธ๋ฆญ ์ด๋ฒคํธ
๊ณต์ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ ํ ์ด ํธ์ถ๋ณ ๋ฉํธ๋ฆญ์ ๋ด๋ณด๋ผ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ๊ณต์ Anthropic ๋ง์ผํ๋ ์ด์ค์์ ์ค์น๋ ํ๋ฌ๊ทธ์ธ๋ง ์ด๋ฅผ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ํ์ฌ ๋ง์ผํ๋ ์ด์ค ํ๋ฌ๊ทธ์ธ ๋ฐ ์ฌ์ฉ์ ๊ตฌ์ฑ ํ ์ ์ด ์ด๋ฒคํธ๋ก ๋ด๋ณด๋ด์ง ์์ต๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฌ๊ทธ์ธ ๋์ (์: ์ฐพ๊ธฐ ๋น์จ, ๋น์ฉ, ์ง์ ์๊ฐ)์ ์์ ์ ๊ด์ฐฐ์ฑ ์คํ์์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.hook_plugin_metrics
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"hook_plugin_metrics"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐplugin_id:<name>@<marketplace>ํ์์ ํ๋ฌ๊ทธ์ธ ์๋ณ์hook_event: ๋ฉํธ๋ฆญ์ ๋ด๋ณด๋ธ ํ ์ด๋ฒคํธ ์ ํ- ์ต๋ 20๊ฐ์ ํ๋ฌ๊ทธ์ธ ๋ด๋ณด๋ธ ๋ฉํธ๋ฆญ ํค. ์ด๋ฆ์
^[a-z][a-z0-9_]{0,39}$์ ์ผ์นํฉ๋๋ค. ๊ฐ์ ๋ถ์ธ ๋๋ ์ซ์์ ๋๋ค.
์์ถ ์ด๋ฒคํธ
๋ํ ์์ถ์ด ์๋ฃ๋ ๋ ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.compaction
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"compaction"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐtrigger:"auto"๋๋"manual"success:"true"๋๋"false"duration_ms: ์์ถ ์ง์ ์๊ฐpre_tokens: ์์ถ ์ ๋๋ต์ ์ธ ํ ํฐ ์post_tokens: ์์ถ ํ ๋๋ต์ ์ธ ํ ํฐ ์error: ์์ถ์ด ์คํจํ์ ๋ ์ค๋ฅ ๋ฉ์์งprecompute_reuse:trigger๊ฐ"manual"์ผ ๋๋ง ์ค์ ๋ฉ๋๋ค. ์๋ ์์ถ์ ์ปจํ ์คํธ ์๋์ฐ๊ฐ ๊ฐ๋ ์ฐจ๊ธฐ ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ฝ์ ์ค๋นํ ์ ์์ผ๋ฉฐ, ์ด ์์ฑ์/compact๊ฐ ํด๋น ์ค๋น๋ ์์ฝ์ ์ฌ์ฌ์ฉํ๋์ง ๊ธฐ๋กํฉ๋๋ค."hit"์ ์ฌ์ฌ์ฉ๋์์์ ์๋ฏธํฉ๋๋ค."miss_custom_instructions","miss_hook"๋ฐ"miss_not_ready"๋ ๋์ ์๋ก์ด ์์ฝ์ด ๊ณ์ฐ๋ ์ด์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. {/* min-version: 2.1.153 */}Claude Code v2.1.153 ์ด์ ํ์
ํผ๋๋ฐฑ ์ค๋ฌธ ์ด๋ฒคํธ
์ธ์ ํ์ง ์ค๋ฌธ์ด ํ์๋๊ฑฐ๋ ๋ต๋ณ๋ ๋ ๊ธฐ๋ก๋ฉ๋๋ค. ์ธ์ ํ์ง ์ค๋ฌธ์ ์ฐธ์กฐํ์ฌ ์ค๋ฌธ์ด ์์งํ๋ ๋ด์ฉ๊ณผ ์ ์ด ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
์ด๋ฒคํธ ์ด๋ฆ: claude_code.feedback_survey
์์ฑ:
- ๋ชจ๋ ํ์ค ์์ฑ
event.name:"feedback_survey"event.timestamp: ISO 8601 ํ์์คํฌํevent.sequence: ์ธ์ ๋ด ์ด๋ฒคํธ ์์ ์ง์ ์ ์ํ ๋จ์กฐ ์ฆ๊ฐ ์นด์ดํฐevent_type: ์ค๋ฌธ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ, ์:"appeared","responded"๋๋"transcript_prompt_appeared"appearance_id: ํ๋์ ์ค๋ฌธ ์ธ์คํด์ค์ ๋ํด ๋ด๋ณด๋ด์ง ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ณ ์ IDsurvey_type: ์ด๋ฒคํธ๋ฅผ ์์ฑํ ์ค๋ฌธ."session"์ "Claude๊ฐ ์ด๋ป๊ฒ ํ๊ณ ์๋์?" ํ๊ฐ ํ๋กฌํํธ์ ๋๋คresponse:responded์ด๋ฒคํธ์์ ์ฌ์ฉ์์ ์ ํenabled_via_override:CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL์ด ์ค์ ๋์ด ์์ ๋true. ๋ฌธ์์ด์ด ์๋ ๋ถ์ธ๋ก ๋ด๋ณด๋ด์ง๋๋ค.session์ค๋ฌธ ์ด๋ฒคํธ์ ํ์๋ฉ๋๋ค. ์ด ์์ฑ์ ํํฐ๋งํ์ฌ ํ๋ฆฟ ์ ์ฒด์์ ์ฌ์ ์๊ฐ ์ ์ฉ๋์๋์ง ํ์ธํฉ๋๋ค
๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ ๋ฐ์ดํฐ ํด์
๋ด๋ณด๋ธ ๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ๋ ๋ค์ํ ๋ถ์์ ์ง์ํฉ๋๋ค:
์ฌ์ฉ ๋ชจ๋ํฐ๋ง
| ๋ฉํธ๋ฆญ | ๋ถ์ ๊ธฐํ |
|---|---|
claude_code.token.usage |
type (์
๋ ฅ/์ถ๋ ฅ), ์ฌ์ฉ์, ํ, ๋ชจ๋ธ, skill.name, plugin.name ๋๋ agent.name๋ณ๋ก ๋ถ๋ฅ |
claude_code.session.count |
์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์ฑํ ๋ฐ ์ฐธ์ฌ ์ถ์ |
claude_code.lines_of_code.count |
์ฝ๋ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ๋ฅผ ์ถ์ ํ์ฌ ์์ฐ์ฑ ์ธก์ , ๋ชจ๋ธ๋ณ๋ก ๋ถ๋ฅ |
claude_code.commit.count & claude_code.pull_request.count |
๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ๋ฏธ์น๋ ์ํฅ ์ดํด |
๋น์ฉ ๋ชจ๋ํฐ๋ง
claude_code.cost.usage ๋ฉํธ๋ฆญ์ ๋ค์์ ๋์์ด ๋ฉ๋๋ค:
- ํ ๋๋ ๊ฐ์ธ ์ ์ฒด์ ์ฌ์ฉ ์ถ์ธ ์ถ์
- ์ต์ ํ๋ฅผ ์ํ ๋์ ์ฌ์ฉ ์ธ์ ์๋ณ
skill.name,plugin.name๋ฐagent.name์์ฑ์ ํตํด ํน์ ์คํฌ, ํ๋ฌ๊ทธ์ธ ๋๋ ์๋ธ์์ด์ ํธ ์ ํ์ ์ง์ถ ๊ท์
๋น์ฉ ๋ฉํธ๋ฆญ์ ๊ทผ์ฌ๊ฐ์ ๋๋ค. ๊ณต์ ์ฒญ๊ตฌ ๋ฐ์ดํฐ๋ API ์ ๊ณต์(Claude Console, Amazon Bedrock ๋๋ Google Cloud Vertex)๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฒฝ๊ณ ๋ฐ ์ธ๋ถํ
์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๊ณ ๋ ค ์ฌํญ:
- ๋น์ฉ ๊ธ์ฆ
- ๋น์ ์์ ์ธ ํ ํฐ ์๋น
- ํน์ ์ฌ์ฉ์์ ๋์ ์ธ์ ๋ณผ๋ฅจ
๋ชจ๋ ๋ฉํธ๋ฆญ์ ํ์ค ์์ฑ์ผ๋ก ์ธ๋ถํํ ์ ์์ต๋๋ค. model ์์ฑ์ claude_code.token.usage, claude_code.cost.usage์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, v2.1.172๋ถํฐ claude_code.lines_of_code.count์์๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ปค๋ฐ์ ๋ชจ๋ธ๋ณ ๋ถ๋ฅ๋ ํ ์ธ์
์ด ์ฌ๋ฌ ๋ชจ๋ธ์ ๊ฑธ์ณ ์์ ์ ์์ผ๋ฏ๋ก session.id์์ ํ ํฐ ๋๋ ๋น์ฉ ๋ฉํธ๋ฆญ์ ๋ํด ์กฐ์ธํ์ฌ๋ง ๊ทผ์ฌํ ์ ์์ต๋๋ค. ํ ํฐ ๋๋ ๋น์ฉ ์ธก๋ฉด์ query_source๊ฐ "main"์ธ ํ์ผ๋ก ํํฐ๋งํ์ฌ ๋ณด์กฐ ๋ฐ ์๋ธ์์ด์ ํธ ์์ฒญ์ด ์ธ์
์ ์ปค๋ฐ์ ํด๋น ์์ฒญ์ ์ํํ์ง ์์ ๋ชจ๋ธ์ ๊ท์์ํค์ง ์๋๋ก ํฉ๋๋ค.
์ฌ์๋ ์์ง ๊ฐ์ง
Claude Code๋ ์คํจํ API ์์ฒญ์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์๋ํ๊ณ ํฌ๊ธฐํ ํ์๋ง ๋จ์ผ claude_code.api_error ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ด๋ฏ๋ก ์ด๋ฒคํธ ์์ฒด๊ฐ ํด๋น ์์ฒญ์ ์ต์ข
์ ํธ์
๋๋ค. ์ค๊ฐ ์ฌ์๋ ์๋๋ ๋ณ๋์ ์ด๋ฒคํธ๋ก ๊ธฐ๋ก๋์ง ์์ต๋๋ค.
์ด๋ฒคํธ์ attempt ์์ฑ์ ์ด ์๋ ํ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค. CLAUDE_CODE_MAX_RETRIES๋ ๊ธฐ๋ณธ๊ฐ์ด 10์ด๊ณ ์ต๋ 15์
๋๋ค. ์์ฒญ์ด ์ผ์์ ์ค๋ฅ์ ๋ํ ๋ชจ๋ ์ฌ์๋๋ฅผ ์์งํ๋ฉด attempt๋ ํด๋น ์ ํจ ์ ํ๋ณด๋ค ํ๋ ๋ง์ต๋๋ค: ๊ธฐ๋ณธ๊ฐ์ผ๋ก๋ 11์ด๊ณ 16์ ์ด๊ณผํ์ง ์์ต๋๋ค. ๋ ๋ฎ์ ๊ฐ์ 400 ์๋ต๊ณผ ๊ฐ์ ์ฌ์๋ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ๋ํ๋
๋๋ค.
๋ณต๊ตฌ๋ ์ธ์
๊ณผ ์ ์ฒด๋ ์ธ์
์ ๊ตฌ๋ถํ๋ ค๋ฉด session.id๋ก ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์ค๋ฅ ํ ๋์ค์ api_request ์ด๋ฒคํธ๊ฐ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
์ด๋ฒคํธ ๋ถ์
์ด๋ฒคํธ ๋ฐ์ดํฐ๋ Claude Code ์ํธ ์์ฉ์ ๋ํ ์์ธํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค:
๋๊ตฌ ์ฌ์ฉ ํจํด: ๋๊ตฌ ๊ฒฐ๊ณผ ์ด๋ฒคํธ๋ฅผ ๋ถ์ํ์ฌ ๋ค์์ ์๋ณํฉ๋๋ค:
- ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ๋๊ตฌ
- ๋๊ตฌ ์ฑ๊ณต๋ฅ
- ํ๊ท ๋๊ตฌ ์คํ ์๊ฐ
- ๋๊ตฌ ์ ํ๋ณ ์ค๋ฅ ํจํด
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: API ์์ฒญ ์ง์ ์๊ฐ ๋ฐ ๋๊ตฌ ์คํ ์๊ฐ์ ์ถ์ ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค.
๊ฐ์ฌ ๋ณด์ ์ด๋ฒคํธ
OpenTelemetry ์ด๋ฒคํธ๋ Claude Code ํ๋์ ๊ฐ์ฌ ๋ฐ์ดํฐ ์์ค์ ๋๋ค. ๋ชจ๋ ์ด๋ฒคํธ๋ ๋๊ตฌ ํธ์ถ, MCP ํ๋ ๋ฐ ๊ถํ ๊ฒฐ์ ์ ํด๋น ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐํ๋ ID ์์ฑ์ ์ ๋ฌํ๋ฉฐ, OTLP ๋ก๊ทธ ๋ด๋ณด๋ด๊ธฐ๋ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ OTLP ์์ ๊ธฐ๊ฐ ์๋ ๋ชจ๋ SIEM(Security Information and Event Management) ํ๋ซํผ ๋๋ SIEM์ผ๋ก ์ ๋ฌํ๋ OpenTelemetry Collector์ ์ ๋ฌํ ์ ์์ต๋๋ค.
์์ฑ ์์ ์ ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐ
๊ฐ ์ด๋ฒคํธ์ ํ์ค ์์ฑ์๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ID๊ฐ ํฌํจ๋ฉ๋๋ค: Claude ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ๋ user.email, user.account_uuid, user.account_id ๋ฐ organization.id, ๊ทธ๋ฆฌ๊ณ ์ค์น ๋ฒ์ user.id ๋ฐ ์ธ์
๋ณ session.id. user.id๋ ์ค์น ๋ฒ์ ์๋ณ์์ด๋ฉฐ, Claude ์ฑ ๊ฒ์ดํธ์จ์ด ์ธ์
์์๋ ๊ฒ์ดํธ์จ์ด ๋ฐ๊ธ ํ ํฐ์ IdP ์ฃผ์ฒด์
๋๋ค.
MCP ๋๊ตฌ ํธ์ถ, Bash ๋ช ๋ น ๋ฐ ํ์ผ ํธ์ง์ ๋ฐ๋ผ์ ์ธ์ ์ ์์ํ ๊ฐ๋ฐ์์๊ฒ ๊ท์๋ฉ๋๋ค. Claude Code๋ ๋ณ๋์ ์๋น์ค ๊ณ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ๊ฐ ์ด๋ฒคํธ์ ๊ธฐ๋ก๋ ID๋ ๊ฐ๋ฐ์ ์์ ์ Claude ๊ณ์ ์ด๊ฑฐ๋ Claude ์ฑ ๊ฒ์ดํธ์จ์ด ์ธ์ ์ ๊ฐ๋ฐ์ IdP ์ ์์ ๋๋ค.
Claude Code๊ฐ ์ง์ API ํค๋ก ์ธ์ฆํ๊ฑฐ๋ Bedrock, Vertex AI ๋๋ Microsoft Foundry์ ๋ํด ์ธ์ฆํ ๋ ์ธ์
์ Claude ๊ณ์ ์ด ์์ผ๋ฉฐ user.id ๋ฐ session.id๋ง ์ฑ์์ง๋๋ค. ์ด๋ฌํ ๋ฐฐํฌ์์๋ OTEL_RESOURCE_ATTRIBUTES๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ID๋ฅผ ์ง์ ์ฒจ๋ถํ๊ณ , ๊ด๋ฆฌ ์ค์ ํ์ผ ๋๋ ์์ ๋ํผ๋ฅผ ํตํด ์ฌ์ฉ์๋ณ๋ก ์ค์ ํฉ๋๋ค. Claude ์ฑ ๊ฒ์ดํธ์จ์ด ์ธ์
์ ์ด ์ค ์ด๋ ๊ฒ๋ ํ์ํ์ง ์์ต๋๋ค: CLI๋ ํ์ค ์์ฑ์ ์ค๋ช
๋ ๋๋ก IdP ์ ์์ ์๋์ผ๋ก ์คํฌํํฉ๋๋ค.
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
MCP ํ๋ ๊ฐ์ฌ
์ ์ฒด ํธ์ถ ์ธ๋ถ ์ ๋ณด๋ก MCP ์๋ฒ ํ๋์ ์บก์ฒํ๋ ค๋ฉด ๋ก๊ทธ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ํ์ฑํํ๊ณ OTEL_LOG_TOOL_DETAILS=1์ ์ค์ ํฉ๋๋ค. ๊ฐ MCP ์์
์ ํ์ค ID ์์ฑ๊ณผ ํจ๊ป ์๋ฒ ์ด๋ฆ, ๋๊ตฌ ์ด๋ฆ ๋ฐ ํธ์ถ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ตฌ์กฐํ๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค:
| ์ด๋ฒคํธ | MCP์ ๋ํด ๊ธฐ๋กํ๋ ๊ฒ |
|---|---|
mcp_server_connection |
์๋ฒ ์ฐ๊ฒฐ, ์ฐ๊ฒฐ ํด์ ๋ฐ ์ฐ๊ฒฐ ์คํจ (server_name, transport_type, server_scope ๋ฐ ์ค๋ฅ ์ธ๋ถ ์ ๋ณด ํฌํจ) |
tool_result |
๊ฐ MCP ๋๊ตฌ ํธ์ถ (tool_name ๋ฐ mcp_server_scope ํฌํจ, mcp_server_name ๋ฐ mcp_tool_name์ ํฌํจํ๋ tool_parameters ํ์ด๋ก๋, ํธ์ถ ์ธ์๋ฅผ ํฌํจํ๋ tool_input ํ์ด๋ก๋) |
tool_decision |
ํธ์ถ์ด ํ์ฉ๋์๋์ง ๊ฑฐ๋ถ๋์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์ด ๊ตฌ์ฑ, ํ
๋๋ ์ฌ์ฉ์์์ ๋์๋์ง ์ฌ๋ถ, ๊ทธ๋ฆฌ๊ณ mcp_server_name ๋ฐ mcp_tool_name์ ํฌํจํ๋ tool_parameters ํ์ด๋ก๋ |
OTEL_LOG_TOOL_DETAILS ์์ด ์ด๋ฌํ ์ด๋ฒคํธ๋ ์๋ณ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ญ์ ํฉ๋๋ค:
tool_result:tool_name๋ฐmcp_server_scope๋ฅผ ์ ์งํ๊ณ ,mcp_server_name,mcp_tool_name๋ฐ ์ธ์๋ฅผ ์๋ตํฉ๋๋คtool_decision:tool_name์ ์ ์งํ๊ณ ,tool_parameters๋ฅผ ์๋ตํฉ๋๋คmcp_server_connection:server_name๋ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์๋ตํ์ง๋ง,is_plugin,plugin_id_hash๋ฐplugin.name์ ์ ์งํ๋ฉฐ, Anthropic์ด ์๋ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ๋ฆฌํฐ๋ด"third-party"๋ก ์์ ๋๋ฏ๋ก ํ๋ฌ๊ทธ์ธ ์ ๊ณต ์๋ฒ๋ ์์ธ ๋ก๊น ์์ด๋ ๊ตฌ๋ณ ๊ฐ๋ฅํฉ๋๋ค
๋ณด์ ์ง๋ฌธ์ ์ด๋ฒคํธ์ ๋งคํ
๊ฐ์ง ๊ท์น์ ๊ตฌ์ถํ ๋ ๋ชจ๋ํฐ๋งํ๋ ค๋ ์ ํธ๋ฅผ ์ฐพ๊ณ ํด๋น ์ด๋ฒคํธ ๋ฐ ์์ฑ์ ๋ํด ๋ฐฑ์๋๋ฅผ ์ฟผ๋ฆฌํฉ๋๋ค:
| ์ ํธ | ์ด๋ฒคํธ | ์ฃผ์ ์์ฑ |
|---|---|---|
| ๋๊ตฌ ํธ์ถ ํ์ฉ ๋๋ ๊ฑฐ๋ถ, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ | tool_decision |
decision, source, tool_name, tool_parameters |
| ๊ถํ ๋ชจ๋ ์์ค์ปฌ๋ ์ด์ | permission_mode_changed |
from_mode, to_mode, trigger |
| ์ ์ฑ ํ ์ด ์์ ์ ์ฐจ๋จํจ | hook_execution_complete |
hook_event, num_blocking |
| ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ๋ฐ ์ธ์ฆ ์คํจ | auth |
action, success, error_category |
| MCP ์๋ฒ ์ฐ๊ฒฐ ๋๋ ์คํจ | mcp_server_connection |
status, server_name, is_plugin, error_code |
| ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฐ ์ถ์ฒ | plugin_installed |
plugin.name, marketplace.name, marketplace.is_official |
| ์คํ๋ ๋ช ๋ น ๋ฐ ํฐ์น๋ ํ์ผ | tool_result (์คํ๋จ) ๋๋ tool_decision (๊ฑฐ๋ถ๋จ) (OTEL_LOG_TOOL_DETAILS=1 ํฌํจ) |
tool_parameters; tool_input (tool_result๋ง ํด๋น) |
Claude Code๋ ์๋ณธ ์ด๋ฒคํธ ์คํธ๋ฆผ๋ง ๋ด๋ณด๋ ๋๋ค. ์ด์ ๊ฐ์ง, ๊ธฐ์ค์ ์ค์ , ์ธ์ ๊ฐ ์๊ด ๊ด๊ณ ๋ฐ ๊ฒฝ๊ณ ๋ SIEM ๋๋ ๊ด์ฐฐ์ฑ ๋ฐฑ์๋์ ์ฑ ์์ ๋๋ค.
SIEM์ ์ด๋ฒคํธ ์ ์ก
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT๋ฅผ SIEM์ OTLP ์์ ๊ธฐ ๋๋ SIEM์ ๊ธฐ๋ณธ ์์ง API๋ก ์ ๋ฌํ๋ OpenTelemetry Collector๋ก ์ง์ ํฉ๋๋ค. ๋ค์ ๊ด๋ฆฌ ์ค์ ์๋ ์ด๋ฒคํธ๋ง ๋ด๋ณด๋ด๊ณ MCP ๋ฐ Bash ๊ฐ์ฌ๋ฅผ ์ํด ์ ์ฒด ๋๊ตฌ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ฑํํฉ๋๋ค:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_LOG_TOOL_DETAILS": "1",
"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "https://siem.example.com:4318/v1/logs",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer your-siem-token"
}
}
๋ฐฑ์๋ ๊ณ ๋ ค ์ฌํญ
๋ฉํธ๋ฆญ, ๋ก๊ทธ ๋ฐ ์ถ์ ๋ฐฑ์๋ ์ ํ์ ์ํํ ์ ์๋ ๋ถ์ ์ ํ์ ๊ฒฐ์ ํฉ๋๋ค:
๋ฉํธ๋ฆญ์ ๊ฒฝ์ฐ
- ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค (์: Prometheus): ๋น์จ ๊ณ์ฐ, ์ง๊ณ๋ ๋ฉํธ๋ฆญ
- ์ปฌ๋ผํ ์ ์ฅ์ (์: ClickHouse): ๋ณต์กํ ์ฟผ๋ฆฌ, ๊ณ ์ ์ฌ์ฉ์ ๋ถ์
- ์์ ํ ๊ธฐ๋ฅ์ ๊ด์ฐฐ์ฑ ํ๋ซํผ (์: Honeycomb, Datadog, Grafana Cloud): ๊ณ ๊ธ ์ฟผ๋ฆฌ, ์๊ฐํ, ๊ฒฝ๊ณ
์ด๋ฒคํธ/๋ก๊ทธ์ ๊ฒฝ์ฐ
- ๋ก๊ทธ ์ง๊ณ ์์คํ (์: Elasticsearch, Loki): ์ ์ฒด ํ ์คํธ ๊ฒ์, ๋ก๊ทธ ๋ถ์
- ์ปฌ๋ผํ ์ ์ฅ์ (์: ClickHouse): ๊ตฌ์กฐํ๋ ์ด๋ฒคํธ ๋ถ์
- ์์ ํ ๊ธฐ๋ฅ์ ๊ด์ฐฐ์ฑ ํ๋ซํผ (์: Honeycomb, Datadog, Grafana Cloud): ๋ฉํธ๋ฆญ๊ณผ ์ด๋ฒคํธ ๊ฐ์ ์๊ด ๊ด๊ณ
์ถ์ ์ ๊ฒฝ์ฐ
๋ถ์ฐ ์ถ์ ์ ์ฅ์ ๋ฐ ์คํฌ ์๊ด ๊ด๊ณ๋ฅผ ์ง์ํ๋ ๋ฐฑ์๋๋ฅผ ์ ํํฉ๋๋ค:
- ๋ถ์ฐ ์ถ์ ์์คํ (์: Jaeger, Zipkin, Grafana Tempo): ์คํฌ ์๊ฐํ, ์์ฒญ ์ํฐํด, ์ง์ฐ ์๊ฐ ๋ถ์
- ์์ ํ ๊ธฐ๋ฅ์ ๊ด์ฐฐ์ฑ ํ๋ซํผ (์: Honeycomb, Datadog, Grafana Cloud): ์ถ์ ๊ฒ์ ๋ฐ ๋ฉํธ๋ฆญ๊ณผ ๋ก๊ทธ์์ ์๊ด ๊ด๊ณ
์ผ์ผ/์ฃผ๊ฐ/์๊ฐ ํ์ฑ ์ฌ์ฉ์ (DAU/WAU/MAU) ๋ฉํธ๋ฆญ์ด ํ์ํ ์กฐ์ง์ ๊ฒฝ์ฐ ํจ์จ์ ์ธ ๊ณ ์ ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ ๋ฐฑ์๋๋ฅผ ๊ณ ๋ คํ์ธ์.
์๋น์ค ์ ๋ณด
๋ชจ๋ ๋ฉํธ๋ฆญ ๋ฐ ์ด๋ฒคํธ๋ ๋ค์ ๋ฆฌ์์ค ์์ฑ๊ณผ ํจ๊ป ๋ด๋ณด๋ด์ง๋๋ค:
service.name:claude-codeservice.version: ํ์ฌ Claude Code ๋ฒ์ os.type: ์ด์ ์ฒด์ ์ ํ (์:linux,darwin,windows)os.version: ์ด์ ์ฒด์ ๋ฒ์ ๋ฌธ์์ดhost.arch: ํธ์คํธ ์ํคํ ์ฒ (์:amd64,arm64)wsl.version: WSL ๋ฒ์ ๋ฒํธ (Windows Subsystem for Linux์์ ์คํํ ๋๋ง ํ์)- ๋ฏธํฐ ์ด๋ฆ:
com.anthropic.claude_code
ROI ์ธก์ ๋ฆฌ์์ค
Claude Code์ ํฌ์ ์์ต๋ฅ ์ธก์ ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋(์๊ฒฉ ์ธก์ ์ค์ , ๋น์ฉ ๋ถ์, ์์ฐ์ฑ ๋ฉํธ๋ฆญ ๋ฐ ์๋ํ๋ ๋ณด๊ณ ํฌํจ)๋ Claude Code ROI ์ธก์ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ์ ์ฅ์๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ Docker Compose ๊ตฌ์ฑ, Prometheus ๋ฐ OpenTelemetry ์ค์ , Linear์ ๊ฐ์ ๋๊ตฌ์ ํตํฉ๋ ์์ฐ์ฑ ๋ณด๊ณ ์ ์์ฑ ํ ํ๋ฆฟ์ ์ ๊ณตํฉ๋๋ค.
๋ณด์ ๋ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ
- OpenTelemetry ๋ด๋ณด๋ด๊ธฐ๋ ์ ํ ์ฌํญ์ด๋ฉฐ ๋ช ์์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. Anthropic์ ๋ณ๋ ์ด์ ์๊ฒฉ ์ธก์ ๋ฐ ์ด๋ฅผ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ฐ์ดํฐ ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์
- ์๋ณธ ํ์ผ ์ฝํ
์ธ ๋ฐ ์ฝ๋ ์ค๋ํซ์ ๋ฉํธ๋ฆญ ๋๋ ์ด๋ฒคํธ์ ํฌํจ๋์ง ์์ต๋๋ค. ์ถ์ ์คํฌ์ ๋ณ๋์ ๋ฐ์ดํฐ ๊ฒฝ๋ก์
๋๋ค: ์๋์
OTEL_LOG_TOOL_CONTENTํญ๋ชฉ์ ์ฐธ์กฐํ์ธ์ - OAuth๋ฅผ ํตํด ์ธ์ฆ๋ ๊ฒฝ์ฐ
user.email์ด ์๊ฒฉ ์ธก์ ์์ฑ์ ํฌํจ๋ฉ๋๋ค. ์กฐ์ง์์ ์ด๊ฒ์ด ์ฐ๋ ค ์ฌํญ์ธ ๊ฒฝ์ฐ ์๊ฒฉ ์ธก์ ๋ฐฑ์๋์ ํจ๊ป ์์ ํ์ฌ ์ด ํ๋๋ฅผ ํํฐ๋งํ๊ฑฐ๋ ์์ ํ์ธ์ - ์ฌ์ฉ์ ํ๋กฌํํธ ์ฝํ
์ธ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ง๋์ง ์์ต๋๋ค. ํ๋กฌํํธ ๊ธธ์ด๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ํ๋กฌํํธ ์ฝํ
์ธ ๋ฅผ ํฌํจํ๋ ค๋ฉด
OTEL_LOG_USER_PROMPTS=1์ ์ค์ ํ์ธ์ - ์ด์์คํดํธ ์๋ต ํ
์คํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ง๋์ง ์์ต๋๋ค. ์๋ต ๊ธธ์ด๋ง ๊ธฐ๋ก๋ฉ๋๋ค. ์๋ต ํ
์คํธ๋ฅผ ํฌํจํ๋ ค๋ฉด
OTEL_LOG_ASSISTANT_RESPONSES=1์ ์ค์ ํ์ธ์. Claude Code์ ๋ชจ๋ OpenTelemetry ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ต ํ ์คํธ๋ ๊ตฌ์ฑํ OTel ์๋ํฌ์ธํธ๋ก๋ง ์ ์ก๋๋ฉฐ Anthropic์ผ๋ก๋ ์ ์ก๋์ง ์์ต๋๋ค. ์ด ๋ณ์๊ฐ ์ค์ ๋์ง ์์ผ๋ฉดOTEL_LOG_USER_PROMPTS๊ฐ ํด๋ฐฑ์ผ๋ก ์ฌ์ฉ๋๋ฏ๋ก ํ๋กฌํํธ ์ฝํ ์ธ ๋ ์ํ์ง๋ง ์๋ต ์ฝํ ์ธ ๋ ์ํ์ง ์๋ ๊ฒฝ์ฐOTEL_LOG_ASSISTANT_RESPONSES=0์ ์ค์ ํ์ธ์ - ๋๊ตฌ ์
๋ ฅ ์ธ์ ๋ฐ ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ก๋์ง ์์ต๋๋ค. ์ด๋ฅผ ํฌํจํ๋ ค๋ฉด
OTEL_LOG_TOOL_DETAILS=1์ ์ค์ ํ์ธ์. ์ด ๋ฐ์ดํฐ๋ ๊ตฌ์ฑํ OTEL ์๋ํฌ์ธํธ๋ก๋ง ์ ์ก๋๋ฉฐ Anthropic์ผ๋ก๋ ์ ์ก๋์ง ์์ต๋๋ค. ์ธ์์๋ ์ฌ์ ํ ๋ฏผ๊ฐํ ๊ฐ์ด ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ํ์์ ๋ฐ๋ผ ์ด๋ฌํ ์์ฑ์ ํํฐ๋งํ๊ฑฐ๋ ์์ ํ๋๋ก ์๊ฒฉ ์ธก์ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ์ธ์. ํ์ฑํ๋๋ฉด:tool_result๋ฐtool_decision์ด๋ฒคํธ๋ Bash ๋ช ๋ น, MCP ์๋ฒ ๋ฐ ๋๊ตฌ ์ด๋ฆ, ์คํฌ ์ด๋ฆ์ด ํฌํจ๋tool_parameters์์ฑ์ ํฌํจํฉ๋๋ค.full_command์ ๊ฐ์ ํ๋๋ ์๋ฆฌ์ง ์์ ์ํ๋ก ๋ด๋ณด๋ด์ง๋๋คtool_result์ด๋ฒคํธ๋ ์ถ๊ฐ๋ก ํ์ผ ๊ฒฝ๋ก, URL, ๊ฒ์ ํจํด ๋ฐ ๊ธฐํ ์ธ์๊ฐ ํฌํจ๋tool_input์์ฑ์ ํฌํจํฉ๋๋ค. 512์๋ฅผ ์ด๊ณผํ๋ ๊ฐ๋ณ ๊ฐ์ ์๋ฆฌ๊ณ ์ ์ฒด๋ ์ฝ 4K ๋ฌธ์๋ก ์ ํ๋ฉ๋๋คuser_prompt์ด๋ฒคํธ๋ ์ฌ์ฉ์ ์ ์, ํ๋ฌ๊ทธ์ธ ๋ฐ MCP ๋ช ๋ น์ ์ถ์command_name์ ํฌํจํฉ๋๋ค- ์ถ์ ์คํฌ์ ๋์ผํ
tool_input์์ฑ ๋ฐfile_path์ ๊ฐ์ ์ ๋ ฅ ํ์ ์์ฑ์ ํฌํจํ๋ฉฐ,tool_input๊ณผ ๋์ผํ ์๋ฆผ์ด ์ ์ฉ๋ฉ๋๋ค
- ๋๊ตฌ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ์ฝํ
์ธ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ์ ์คํฌ์ ๊ธฐ๋ก๋์ง ์์ต๋๋ค. ์ด๋ฅผ ํฌํจํ๋ ค๋ฉด
OTEL_LOG_TOOL_CONTENT=1์ ์ค์ ํ์ธ์. ํ์ฑํ๋๋ฉด ์คํฌ ์ด๋ฒคํธ๋ ์คํฌ๋น 60KB์์ ์๋ฆฐ ์ ์ฒด ๋๊ตฌ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ฝํ ์ธ ๋ฅผ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์๋ Read ๋๊ตฌ ๊ฒฐ๊ณผ์ ์๋ณธ ํ์ผ ์ฝํ ์ธ ๋ฐ Bash ๋ช ๋ น ์ถ๋ ฅ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ์ด๋ฌํ ์์ฑ์ ํํฐ๋งํ๊ฑฐ๋ ์์ ํ๋๋ก ์๊ฒฉ ์ธก์ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ์ธ์ - ์๋ณธ Anthropic Messages API ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ก๋์ง ์์ต๋๋ค. ์ด๋ฅผ ํฌํจํ๋ ค๋ฉด
OTEL_LOG_RAW_API_BODIES๋ฅผ ์ค์ ํ์ธ์.=1์ผ ๋ ๊ฐ API ํธ์ถ์body์์ฑ์ด JSON ์ง๋ ฌํ๋ ํ์ด๋ก๋(60KB์์ ์๋ฆผ)์ธapi_request_body๋ฐapi_response_body๋ก๊ทธ ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ ๋๋ค.=file:<dir>์ผ ๋ ์๋ฆฌ์ง ์์ ๋ณธ๋ฌธ์ ํด๋น ๋๋ ํ ๋ฆฌ ์๋์.request.json๋ฐ.response.jsonํ์ผ์ ๊ธฐ๋ก๋๊ณ ์ด๋ฒคํธ๋ ์ธ๋ผ์ธ ๋ณธ๋ฌธ ๋์body_ref๊ฒฝ๋ก๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋ก๊ทธ ์์ง๊ธฐ ๋๋ ์ฌ์ด๋์นด์ ํจ๊ป ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๋ ์๊ฒฉ ์ธก์ ์คํธ๋ฆผ์ ํตํด์๋ ๋ฐฐํฌํ์ง ๋ง์ธ์. ๋ ๋ชจ๋ ๋ชจ๋์์ ๋ณธ๋ฌธ์๋ ์ ์ฒด ๋ํ ๊ธฐ๋ก(์์คํ ํ๋กฌํํธ, ๋ชจ๋ ์ด์ ์ฌ์ฉ์ ๋ฐ ์ด์์คํดํธ ํด, ๋๊ตฌ ๊ฒฐ๊ณผ)์ด ํฌํจ๋๋ฏ๋ก ์ด๋ฅผ ํ์ฑํํ๋ฉด ๋ค๋ฅธOTEL_LOG_*์ฝํ ์ธ ํ๋๊ทธ๊ฐ ๊ณต๊ฐํ ๋ชจ๋ ๊ฒ์ ๋์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. Claude์ ํ์ฅ ์ฌ๊ณ ์ฝํ ์ธ ๋ ๋ค๋ฅธ ์ค์ ์ ๊ด๊ณ์์ด ํญ์ ์ด๋ฌํ ๋ณธ๋ฌธ์์ ์์ ๋ฉ๋๋ค
Amazon Bedrock์์ Claude Code ๋ชจ๋ํฐ๋ง
Amazon Bedrock์ Claude Code ์ฌ์ฉ ๋ชจ๋ํฐ๋ง์ ๋ํ ์์ธํ ์ง์นจ์ Claude Code ๋ชจ๋ํฐ๋ง ๊ตฌํ (Bedrock)์ ์ฐธ์กฐํ์ธ์.