Pemantauan
Pelajari cara mengaktifkan dan mengonfigurasi OpenTelemetry untuk Claude Code.
Lacak penggunaan Claude Code, biaya, dan aktivitas alat di seluruh organisasi Anda dengan mengekspor data telemetri melalui OpenTelemetry (OTel). Claude Code mengekspor metrik sebagai data deret waktu melalui protokol metrik standar, acara melalui protokol log/acara, dan secara opsional distributed traces melalui protokol traces.
Mulai cepat
Konfigurasikan OpenTelemetry menggunakan variabel lingkungan:
# 1. Aktifkan telemetri
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. Pilih pengekspor (keduanya bersifat opsional - konfigurasikan hanya yang Anda butuhkan)
export OTEL_METRICS_EXPORTER=otlp # Opsi: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # Opsi: otlp, console, none
# 3. Konfigurasikan titik akhir OTLP (untuk pengekspor OTLP)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. Atur autentikasi (jika diperlukan)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. Untuk debugging: kurangi interval ekspor, dan atur ulang untuk penggunaan produksi
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 detik (default: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 detik (default: 5000ms)
# 6. Jalankan Claude Code
claude
Untuk memverifikasi pengaturan yang mengekspor metrik, periksa backend Anda untuk metrik claude_code.session.count, yang Claude Code keluarkan saat sesi dimulai. Untuk memverifikasi pengaturan hanya log, kirimkan prompt dan periksa acara claude_code.user_prompt.
Jika tidak ada yang tiba, jalankan claude --debug dan periksa log debug. Claude Code melaporkan kegagalan dari pengekspor yang Anda konfigurasikan sebagai kesalahan [3P telemetry], di mana 3P berarti pihak ketiga. Baris yang diawali dengan [Anthropic telemetry] menjelaskan telemetri operasional terpisah Anthropic dan tidak menunjukkan masalah dengan pengaturan Anda.
Untuk opsi konfigurasi lengkap, lihat spesifikasi OpenTelemetry.
Konfigurasi administrator
Administrator dapat mengonfigurasi pengaturan OpenTelemetry untuk semua pengguna melalui file pengaturan terkelola. Lihat prioritas pengaturan untuk informasi lebih lanjut tentang bagaimana pengaturan diterapkan.
Contoh konfigurasi pengaturan terkelola:
{
"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 tidak meneruskan variabel lingkungan OTEL_* ke subproses yang dihasilkannya, termasuk alat Bash, hooks, server MCP, dan language servers. Aplikasi yang diinstrumentasi OpenTelemetry yang Anda jalankan melalui alat Bash tidak mewarisi titik akhir pengekspor atau header Claude Code, jadi atur variabel tersebut langsung dalam perintah jika aplikasi itu perlu mengekspor telemetrinya sendiri.
Bagaimana pengaturan terkelola mengunci tujuan OTLP
Ketika Anda menetapkan variabel OTEL_EXPORTER_OTLP_* dalam pengaturan terkelola, Claude Code menghapus variabel yang ditetapkan pengembang yang bertentangan saat startup dan mencatat peringatan yang dapat Anda lihat dengan claude --debug. Apa yang dihapusnya tergantung pada variabel mana yang Anda tetapkan:
-
Endpoints: ketika Anda menetapkan
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code menghapus setiap titik akhir per-sinyal yang ditetapkan pengembang. Pengembang tidak dapat mengarahkan satu sinyal ke kolektor yang berbeda, jadi Anda tidak perlu juga menetapkan variabel titik akhir per-sinyal dalam pengaturan terkelola. -
Protokol: ketika Anda menetapkan
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code menghapus setiap protokol per-sinyal yang ditetapkan pengembang. -
Kredensial: ketika Anda menetapkan
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEY, atauOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code menghapus versi per-sinyal dari variabel tersebut yang ditetapkan pengembang, ditambah setiap variabel titik akhir yang ditetapkan pengembang, generik atau per-sinyal, karena kredensial tersebut akan mencapai kolektor yang tidak dipilih pengaturan terkelola. -
Pemilih pengekspor:
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTER, danOTEL_TRACES_EXPORTERbeta mengikuti prioritas per-kunci normal. Pengaturan pengembang masih dapat menonaktifkan sinyal atau mengalihkannya ke pengekspor konsol, jadi tetapkan pemilih dalam pengaturan terkelola juga jika Anda perlu menguncinya. Di seluruh sumber admin,OTEL_LOGS_EXPORTERmengikuti unit telemetri sementara dua pemilih lainnya digabungkan per kunci. Memerlukan Claude Code v2.1.223 atau lebih baru. -
Titik akhir pelacakan beta: dengan pelacakan beta terperinci aktif, Claude Code mengekspor log dan jejak ke
BETA_TRACING_ENDPOINTalih-alih melalui pengekspor log dan jejak. Claude Code oleh karena itu menghapusBETA_TRACING_ENDPOINTyang ditetapkan pengembang kapan pun salah satu pengaturan terkelola ini memutuskan tujuan sinyal:- Titik akhir atau kredensial generik atau log/jejak
- Sebuah
otelHeadersHelper - Pemilih pengekspor log atau jejak yang ditetapkan ke
none,console, atau kosong, nilai yang membuat sinyal tetap di luar kolektor CLAUDE_CODE_ENABLE_TELEMETRYdimatikan
Titik akhir atau kredensial khusus metrik tidak menghapusnya. Sebelum v2.1.251,
BETA_TRACING_ENDPOINTyang ditetapkan pengembang mengarahkan ulang log dan jejak yang diekspor pelacakan beta terperinci bahkan ketika pengaturan terkelola menyematkan kolektor.
Claude Code tidak menghapus variabel per-sinyal yang Anda tetapkan dalam pengaturan terkelola itu sendiri, jadi Anda dapat merutekan satu sinyal ke kolektor yang berbeda dengan menetapkan variabelnya di sana, seperti yang dilakukan contoh SIEM. Jika Anda menetapkan kredensial per-sinyal di sana, Claude Code menghapus titik akhir yang ditetapkan pengembang untuk sinyal itu.
Perilaku penghapusan ini mengubah di mana telemetri dikirimkan, bukan apa yang dikumpulkan Claude Code.
Sebelum v2.1.217, setiap variabel mengikuti prioritas pengaturan per-kunci secara independen, jadi titik akhir khusus sinyal yang ditetapkan dalam pengaturan pengguna atau shell mengarahkan ulang sinyal itu dari kolektor terkelola.
Ketika aplikasi desktop atau pelari lingkungan yang di-host sendiri meluncurkan Claude Code dan menamai titik akhir OTLP dalam lingkungan yang disediakannya, Claude Code menyematkan tujuan dengan cara yang sama: variabel telemetri peluncur menghapus variabel yang ditetapkan pengembang persis seperti pengaturan terkelola. Claude Code tidak menghapus variabel yang ditetapkan peluncur itu sendiri. Memerlukan Claude Code v2.1.251 atau lebih baru.
Detail konfigurasi
Variabel konfigurasi umum
Variabel-variabel ini mengonfigurasi pengekspor, titik akhir, dan perilaku ekspor untuk semua penerapan. Jika Anda menetapkan variabel titik akhir atau protokol per-sinyal, seperti OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code menggunakannya sebagai gantinya dari variabel generik untuk sinyal tersebut. Jika Anda menetapkan variabel header per-sinyal, seperti OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code menggabungkannya dengan OTEL_EXPORTER_OTLP_HEADERS generik untuk sinyal tersebut. Pada mesin dengan pengaturan terkelola, lihat Bagaimana pengaturan terkelola mengunci tujuan OTLP untuk mengetahui apa yang Claude Code hapus.
| Variabel Lingkungan | Deskripsi | Nilai Contoh |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
Mengaktifkan pengumpulan telemetri (diperlukan) | 1 |
OTEL_METRICS_EXPORTER |
Jenis pengekspor metrik, dipisahkan koma. Gunakan none untuk menonaktifkan |
console, otlp, prometheus, none |
OTEL_LOGS_EXPORTER |
Jenis pengekspor log/acara, dipisahkan koma. Gunakan none untuk menonaktifkan |
console, otlp, none |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protokol untuk pengekspor OTLP, berlaku untuk semua sinyal. Claude Code tidak memiliki protokol default, jadi atur ini atau variabel protokol per-sinyal untuk setiap pengekspor otlp yang Anda aktifkan |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
Titik akhir pengumpul OTLP untuk semua sinyal | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
Protokol untuk metrik, menimpa pengaturan umum | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
Titik akhir metrik OTLP, menimpa pengaturan umum | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
Protokol untuk log, menimpa pengaturan umum | grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Titik akhir log OTLP, menimpa pengaturan umum | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS |
Header autentikasi untuk OTLP | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_HEADERS |
Header autentikasi untuk metrik, digabungkan dengan header umum | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_LOGS_HEADERS |
Header autentikasi untuk log, digabungkan dengan header umum | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
Interval ekspor dalam milidetik (default: 60000) | 5000, 60000 |
OTEL_LOGS_EXPORT_INTERVAL |
Interval ekspor log dalam milidetik (default: 5000) | 1000, 10000 |
OTEL_LOG_USER_PROMPTS |
Aktifkan pencatatan konten prompt pengguna (default: dinonaktifkan) | 1 untuk mengaktifkan |
OTEL_LOG_ASSISTANT_RESPONSES |
Aktifkan pencatatan teks respons asisten pada acara assistant_response (default: dinonaktifkan). Saat tidak diatur, kembali ke nilai OTEL_LOG_USER_PROMPTS. Memerlukan Claude Code v2.1.193 atau lebih baru |
1 untuk mengaktifkan, 0 untuk tetap disunting |
OTEL_LOG_TOOL_DETAILS |
Aktifkan pencatatan parameter alat dan argumen input dalam acara alat dan atribut span trace: perintah Bash, nama server MCP dan alat, nama skill, nama workflow yang ditulis pengguna, dan input alat. Juga mengaktifkan nama perintah custom, plugin, dan MCP pada acara user_prompt (default: dinonaktifkan). Untuk server bawaan Claude Desktop, dalam sesi yang dimiliki Claude Desktop, mcp_server_name/mcp_tool_name dipancarkan pada tool_decision/tool_result bahkan dengan flag mati. Pengecualian memerlukan Claude Code v2.1.214 atau lebih baru |
1 untuk mengaktifkan |
OTEL_LOG_TOOL_CONTENT |
Aktifkan pencatatan konten input dan output alat dalam acara span (default: dinonaktifkan). Memerlukan tracing. Konten dipotong pada batas konten (60 KB secara default) | 1 untuk mengaktifkan |
OTEL_LOG_RAW_API_BODIES |
Emit badan permintaan dan respons JSON API Anthropic Messages lengkap sebagai acara log api_request_body / api_response_body (default: dinonaktifkan). Badan mencakup seluruh riwayat percakapan. Mengaktifkan ini menyiratkan persetujuan untuk semua yang akan diungkapkan oleh OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS, dan OTEL_LOG_TOOL_CONTENT |
1 untuk badan inline dipotong pada batas konten (60 KB secara default), atau file:<dir> untuk badan tidak dipotong di disk dengan pointer body_ref dalam acara |
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH |
Batas konten: panjang maksimum atribut yang mengandung konten seperti respons model, konten alat, prompt sistem, dan badan API mentah, termasuk penanda pemotongan, dalam unit kode UTF-16 (default: 61440, yaitu 60 KB). Default diukur untuk backend yang membatasi nilai atribut pada 64 KB; naikkan hanya jika backend Anda menerima nilai yang lebih besar, atau turunkan untuk mengurangi volume telemetri. Saat batas atribut SDK OpenTelemetry, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT atau salah satu varian logrecord dan span-nya, diatur lebih rendah, Claude Code memotong pada nilai yang lebih kecil itu sehingga penanda [TRUNCATED ...] tetap dalam batas SDK. Memerlukan Claude Code v2.1.214 atau lebih baru |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
Preferensi temporalitas metrik (default: delta). Atur ke cumulative jika backend Anda mengharapkan temporalitas kumulatif |
delta, cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
Interval untuk menyegarkan header dinamis (default: 1740000ms / 29 menit) | 900000 |
Untuk protokol http/protobuf dan http/json, Claude Code mengirim setiap permintaan ekspor dengan header Content-Length. Sebelum v2.1.212, versi Claude Code dari v2.1.191 ke depan mengirim permintaan ini dengan chunked transfer encoding; Azure Monitor dan titik akhir lain yang memerlukan panjang yang dideklarasikan menolaknya dengan kesalahan 411 Length Required atau 400.
Autentikasi mTLS
Cara Anda mengonfigurasi sertifikat klien untuk pengekspor OTLP tergantung pada protokol OTLP yang digunakan untuk sinyal tersebut, diatur melalui OTEL_EXPORTER_OTLP_PROTOCOL atau override per-sinyal. Konfigurasi yang sama berlaku untuk metrik, log, dan traces.
| Protokol | Variabel sertifikat klien | Percayai CA pengumpul dengan |
|---|---|---|
http/protobuf, http/json |
CLAUDE_CODE_CLIENT_CERT, CLAUDE_CODE_CLIENT_KEY, dan secara opsional CLAUDE_CODE_CLIENT_KEY_PASSPHRASE. Lihat Konfigurasi jaringan |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY dan OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, atau varian per-sinyal seperti OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY untuk menggunakan sertifikat berbeda per sinyal |
OTEL_EXPORTER_OTLP_CERTIFICATE |
Untuk grpc, SDK OpenTelemetry membaca variabel OTLP standar secara langsung, jadi konfigurasi yang ada yang menetapkan variabel metrik per-sinyal terus berfungsi. Pada mesin dengan pengaturan terkelola, Claude Code mungkin menghapus kredensial dan titik akhir per-sinyal yang ditetapkan pengembang saat startup.
Kontrol kardinalitas metrik
Variabel lingkungan berikut mengontrol atribut mana yang disertakan dalam metrik untuk mengelola kardinalitas:
| Variabel Lingkungan | Deskripsi | Nilai Default | Contoh untuk Menonaktifkan |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
Sertakan atribut session.id dalam metrik | true |
false |
OTEL_METRICS_INCLUDE_VERSION |
Sertakan atribut app.version dalam metrik | false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
Sertakan atribut user.account_uuid dan user.account_id dalam metrik | true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
Sertakan atribut app.entrypoint dalam metrik | false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
Sertakan kunci dari OTEL_RESOURCE_ATTRIBUTES sebagai atribut pada titik data metrik |
true |
false |
Kardinalitas yang lebih rendah umumnya berarti kinerja yang lebih baik dan biaya penyimpanan yang lebih rendah tetapi data yang kurang granular untuk analisis.
Traces (beta)
Distributed tracing mengekspor spans yang menghubungkan setiap prompt pengguna ke permintaan API dan eksekusi alat yang dipicunya, sehingga Anda dapat melihat permintaan lengkap sebagai satu trace di backend tracing Anda.
Tracing dimatikan secara default. Untuk mengaktifkannya, atur CLAUDE_CODE_ENABLE_TELEMETRY=1 dan CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, kemudian atur OTEL_TRACES_EXPORTER untuk memilih tempat spans dikirim. Traces menggunakan kembali konfigurasi OTLP umum untuk titik akhir, protokol, header, dan mTLS. Pada mesin dengan pengaturan terkelola, Claude Code mungkin menghapus kredensial dan titik akhir per-sinyal yang ditetapkan pengembang saat startup.
| Variabel Lingkungan | Deskripsi | Nilai Contoh |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
Aktifkan span tracing (diperlukan). ENABLE_ENHANCED_TELEMETRY_BETA juga diterima |
1 |
OTEL_TRACES_EXPORTER |
Jenis pengekspor traces, dipisahkan koma. Gunakan none untuk menonaktifkan |
console, otlp, none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
Protokol untuk traces, menimpa OTEL_EXPORTER_OTLP_PROTOCOL |
grpc, http/json, http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Titik akhir traces OTLP, menimpa OTEL_EXPORTER_OTLP_ENDPOINT |
http://localhost:4318/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
Header autentikasi untuk traces, digabungkan dengan OTEL_EXPORTER_OTLP_HEADERS |
Authorization=Bearer token |
OTEL_TRACES_EXPORT_INTERVAL |
Interval ekspor batch span dalam milidetik (default: 5000) | 1000, 10000 |
Spans menyunting teks prompt pengguna, detail input alat, dan konten alat secara default. Atur OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1, dan OTEL_LOG_TOOL_CONTENT=1 untuk menyertakannya.
Saat tracing aktif, subproses Bash dan PowerShell secara otomatis mewarisi variabel lingkungan TRACEPARENT yang berisi konteks trace W3C dari span eksekusi alat yang aktif. Ini memungkinkan subproses apa pun yang membaca TRACEPARENT untuk membuat parent spans-nya di bawah trace yang sama, memungkinkan distributed tracing end-to-end melalui skrip dan perintah yang dijalankan Claude.
Saat tracing aktif dan Claude Code terhubung langsung ke API Anthropic, setiap permintaan model membawa header W3C traceparent yang diatur ke konteks span claude_code.llm_request, dan header traceresponse API dicatat sebagai link span. Bersama-sama ini menghubungkan spans sisi klien Claude Code ke trace sisi server melalui perantara yang sesuai. Outbound HTTP MCP requests membawa traceparent dengan cara yang sama. Header tidak dikirim ke penyedia pihak ketiga.
Secara default, header traceparent pada permintaan model dan HTTP MCP dikirim hanya saat ANTHROPIC_BASE_URL tidak diatur atau menunjuk ke API Anthropic, karena beberapa proxy menolak header yang tidak dikenali. Variabel TRACEPARENT subproses dikendalikan oleh switch yang sama untuk konsistensi. Jika Anda menjalankan Claude Code melalui proxy ANTHROPIC_BASE_URL kustom dan ingin konteks trace dipropagasi, atur CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
Dalam sesi Agent SDK dan non-interaktif yang dimulai dengan -p, Claude Code juga membaca TRACEPARENT dan TRACESTATE dari lingkungannya sendiri saat memulai setiap span interaksi. Ini memungkinkan proses embedding untuk melewatkan konteks trace W3C aktifnya ke dalam subproses sehingga spans Claude Code muncul sebagai anak dari distributed trace pemanggil. Sesi interaktif mengabaikan TRACEPARENT inbound untuk menghindari secara tidak sengaja mewarisi nilai ambient dari lingkungan CI atau container.
Konteks trace inbound juga berlaku untuk events. Dalam sesi Agent SDK dan -p dengan TRACEPARENT diatur, setiap catatan log acara OTLP membawa nilai trace_id dan span_id yang menghubungkannya ke trace aplikasi Anda, bahkan saat pengekspor traces tidak dikonfigurasi, sehingga backend logging Anda dapat mengorelasikan acara dengan sisa trace.
Catatan yang dipancarkan saat interaksi aktif membawa ID span interaksi, bahkan saat Claude Code memancarkannya di luar konteks async span, seperti dalam callback prompt izin atau untuk catatan yang di-buffer selama startup dan diekspor nanti. Catatan yang dipancarkan tanpa span interaksi aktif membawa ID TRACEPARENT inbound secara langsung. Sebelum v2.1.214, catatan yang dipancarkan di luar konteks async span membawa ID TRACEPARENT inbound sebagai gantinya dari ID span. Sebelum v2.1.212, catatan acara yang dipancarkan di luar span aktif tidak membawa trace_id atau span_id.
Hierarki span
Setiap prompt pengguna memulai span root claude_code.interaction. Panggilan API, panggilan alat, dan eksekusi hook dicatat sebagai anak-anaknya. Spans alat memiliki dua span anak mereka sendiri: satu untuk waktu yang dihabiskan menunggu keputusan izin dan satu untuk eksekusi itu sendiri. Ketika alat Agent atau alat Task legacy menghasilkan subagent, spans API dan alat subagent bersarang di bawah span claude_code.tool induk.
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (memerlukan detailed beta tracing)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans
Dalam sesi Agent SDK dan claude -p, claude_code.interaction itu sendiri menjadi anak dari span pemanggil saat TRACEPARENT diatur dalam lingkungan.
Saat hook PreToolUse menunda panggilan alat, Claude Code menyimpan konteks trace dari giliran yang menundanya. Saat Anda melanjutkan sesi dan alat dijalankan kembali, spans alat bergabung dengan trace giliran sebelumnya sebagai anak dari span claude_code.interaction giliran.
Atribut span
Setiap span membawa atribut standar ditambah atribut span.type yang cocok dengan namanya. Tabel di bawah mencantumkan atribut tambahan yang diatur pada setiap span. Spans llm_request, tool.execution, dan hook menetapkan status OpenTelemetry ERROR saat mereka mencatat kegagalan; span lainnya selalu berakhir dengan status UNSET.
claude_code.interaction
| Atribut | Deskripsi | Gated by |
|---|---|---|
user_prompt |
Teks prompt. Nilai adalah <REDACTED> kecuali gate diatur |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
Panjang prompt dalam karakter | |
interaction.sequence |
Penghitung berbasis 1 dari interaksi dalam sesi ini | |
parent.source |
Bagaimana span mendapatkan parent trace-nya: env saat itu parent di bawah TRACEPARENT inbound, none saat itu memulai trace-nya sendiri. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
interaction.duration_ms |
Durasi wall-clock dari giliran |
claude_code.llm_request
| Atribut | Deskripsi | Gated by |
|---|---|---|
model |
Pengidentifikasi model | |
gen_ai.system |
Selalu anthropic. Konvensi semantik GenAI OpenTelemetry |
|
gen_ai.request.model |
Nilai yang sama dengan model. Konvensi semantik GenAI OpenTelemetry |
|
query_source |
Subsistem yang mengeluarkan permintaan, seperti repl_main_thread atau nama subagent |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
Bentuk terbatas dari query_source, dipancarkan apakah atau tidak detailed beta tracing aktif, dengan nilai seperti repl_main_thread atau agent.builtin.general-purpose. : menjadi . dan agen yang dinamai pengguna muncul sebagai agent.custom. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
agent_id |
Pengidentifikasi subagent atau rekan kerja yang mengeluarkan permintaan. Tidak ada pada sesi utama | |
parent_agent_id |
Pengidentifikasi agen yang menghasilkan yang ini. Tidak ada untuk sesi utama dan untuk agen yang dihasilkan langsung darinya | |
workflow.run_id |
Pengidentifikasi run dari run alat Workflow yang menghasilkan agen ini, dengan awalan wf_. Tidak ada untuk agen yang tidak dihasilkan oleh workflow |
|
workflow.name |
Nama workflow yang menghasilkan agen ini. Nama yang ditulis pengguna diganti dengan custom kecuali gate diatur |
OTEL_LOG_TOOL_DETAILS |
speed |
fast atau normal |
|
llm_request.context |
interaction, tool, atau standalone tergantung pada span induk |
|
duration_ms |
Durasi wall-clock termasuk retry | |
ttft_ms |
Waktu ke token pertama dalam milidetik | |
first_content_ms |
Waktu dari awal permintaan ke blok konten pertama dari upaya yang berhasil, dalam milidetik. Tidak ada pada permintaan yang kembali ke jalur non-streaming. Memerlukan Claude Code v2.1.268 atau lebih baru | |
input_tokens |
Jumlah token input dari blok penggunaan API | |
output_tokens |
Jumlah token output | |
cache_read_tokens |
Token yang dibaca dari prompt cache | |
cache_creation_tokens |
Token yang ditulis ke prompt cache | |
request_id |
ID permintaan API Anthropic dari header respons request-id |
|
gen_ai.response.id |
Nilai yang sama dengan request_id. Konvensi semantik GenAI OpenTelemetry |
|
client_request_id |
x-client-request-id yang dihasilkan klien dari upaya terakhir |
|
attempt |
Total upaya yang dilakukan untuk permintaan ini | |
success |
true atau false |
|
status_code |
Kode status HTTP saat permintaan gagal | |
error |
Pesan kesalahan saat permintaan gagal | |
error_class |
Token kelas kesalahan pendek saat permintaan gagal, seperti api_timeout atau server_overload. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
response.has_tool_call |
true saat respons berisi blok tool-use |
|
stop_reason |
API response stop_reason, seperti end_turn, tool_use, max_tokens, stop_sequence, pause_turn, atau refusal |
|
gen_ai.response.finish_reasons |
Nilai yang sama dengan stop_reason, dibungkus dalam array string. Konvensi semantik GenAI OpenTelemetry |
Setiap upaya retry juga dicatat sebagai acara span gen_ai.request.attempt dengan atribut attempt dan client_request_id.
claude_code.tool
| Atribut | Deskripsi | Gated by |
|---|---|---|
tool_name |
Nama alat | |
tool_name_safe |
Bentuk tool_name yang tidak membawa nama yang dipilih pengguna. Nama alat bawaan lulus verbatim. Nama alat MCP muncul sebagai mcp_other, kecuali nama alat yang cocok dengan beberapa bentuk tetap, seperti alat playwright yang dinamai browser_*, yang lulus verbatim. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
bash_command_class |
Untuk alat Bash: kategori program pertama perintah dari daftar tetap, seperti vcs atau package_manager. other untuk program di luar daftar, unparsed saat baris tidak dapat diuraikan. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
bash_argv0 |
Untuk alat Bash: program pertama perintah saat itu berada di daftar tetap yang sama, seperti git atau npm. other untuk program apa pun di luar daftar. Memerlukan Claude Code v2.1.268 atau lebih baru |
|
duration_ms |
Durasi wall-clock termasuk tunggu izin dan eksekusi | |
result_tokens |
Ukuran token perkiraan dari hasil alat | |
agent_id |
Pengidentifikasi subagent atau rekan kerja yang menjalankan alat. Tidak ada pada sesi utama | |
parent_agent_id |
Pengidentifikasi agen yang menghasilkan yang ini. Tidak ada untuk sesi utama dan untuk agen yang dihasilkan langsung darinya | |
workflow.run_id |
Pengidentifikasi run dari run alat Workflow yang menghasilkan agen ini, dengan awalan wf_. Tidak ada untuk agen yang tidak dihasilkan oleh workflow |
|
workflow.name |
Nama workflow yang menghasilkan agen ini. Nama yang ditulis pengguna diganti dengan custom kecuali gate diatur |
OTEL_LOG_TOOL_DETAILS |
tool_use_id |
ID blok tool_use model untuk panggilan ini. Cocok dengan tool_use_id pada acara tool_result dan tool_decision serta dalam payload hook, sehingga Anda dapat menggabungkan span ke catatan tersebut |
|
gen_ai.tool.call.id |
Nilai yang sama dengan tool_use_id. Konvensi semantik GenAI OpenTelemetry |
|
file_path |
Jalur file target untuk alat Read, Edit, dan Write | OTEL_LOG_TOOL_DETAILS |
full_command |
String perintah untuk alat Bash | OTEL_LOG_TOOL_DETAILS |
skill_name |
Nama skill untuk alat Skill | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Jenis subagent untuk alat Agent atau alat Task legacy | OTEL_LOG_TOOL_DETAILS |
Saat OTEL_LOG_TOOL_CONTENT=1, span ini juga mencatat acara span tool.output yang atributnya berisi badan input dan output alat, dipotong pada batas konten (60 KB secara default) per atribut.
claude_code.tool.blocked_on_user
| Atribut | Deskripsi | Gated by |
|---|---|---|
duration_ms |
Waktu yang dihabiskan menunggu keputusan izin | |
decision |
accept atau reject |
|
source |
Sumber keputusan, cocok dengan acara Tool decision event |
claude_code.tool.execution
| Atribut | Deskripsi | Gated by |
|---|---|---|
duration_ms |
Waktu yang dihabiskan menjalankan badan alat | |
tool_use_id |
Nilai yang sama dengan span claude_code.tool induk |
|
gen_ai.tool.call.id |
Nilai yang sama dengan tool_use_id. Konvensi semantik GenAI OpenTelemetry |
|
success |
true atau false |
|
error |
String kategori kesalahan saat eksekusi gagal, seperti Error:ENOENT atau ShellError. Berisi pesan kesalahan lengkap sebagai gantinya saat gate diatur |
OTEL_LOG_TOOL_DETAILS |
error_class |
Kategori kesalahan dalam bentuk pengidentifikasi, dengan karakter di luar huruf, digit, dan garis bawah diganti dengan _, seperti Error_ENOENT atau ShellError. Membawa kategori bahkan saat error membawa pesan lengkap. Memerlukan Claude Code v2.1.268 atau lebih baru |
claude_code.hook
Span ini muncul hanya saat detailed beta tracing aktif, yang memerlukan ENABLE_BETA_TRACING_DETAILED=1 dan BETA_TRACING_ENDPOINT, sepasang yang juga mengubah tempat log dan traces Anda pergi. Atur pasangan dalam shell, pengaturan pengguna, atau pengaturan terkelola; kedua variabel diabaikan dalam pengaturan proyek dan lokal. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA saja tidak menghasilkannya.
Dalam sesi CLI interaktif, detailed beta tracing juga memerlukan organisasi Anda untuk berada dalam daftar putih untuk fitur ini. Sesi Agent SDK dan non-interaktif -p tidak memerlukan daftar putih.
| Atribut | Deskripsi | Gated by |
|---|---|---|
hook_event |
Jenis acara hook, seperti PreToolUse |
|
hook_name |
Nama hook lengkap, seperti PreToolUse:Write |
|
num_hooks |
Jumlah perintah hook yang cocok dieksekusi | |
hook_definitions |
Konfigurasi hook yang diserialisasi JSON | OTEL_LOG_TOOL_DETAILS |
duration_ms |
Durasi wall-clock dari semua hook yang cocok | |
num_success |
Jumlah hook yang selesai dengan sukses | |
num_blocking |
Jumlah hook yang mengembalikan keputusan blocking | |
num_non_blocking_error |
Jumlah hook yang gagal tanpa blocking | |
num_cancelled |
Jumlah hook yang dibatalkan sebelum selesai |
Atribut tambahan yang mengandung konten seperti new_context, system_prompt_preview, user_system_prompt, tool_input, dan response.model_output dipancarkan hanya saat detailed beta tracing aktif. Mereka bukan bagian dari skema span yang stabil.
user_system_prompt juga memerlukan OTEL_LOG_USER_PROMPTS=1. Ini membawa hanya teks prompt sistem yang Anda berikan melalui opsi SDK systemPrompt atau flag --system-prompt dan --append-system-prompt, dipotong pada batas konten (60 KB secara default), dan dipancarkan sekali per sesi daripada per permintaan.
Header dinamis
Untuk lingkungan perusahaan yang memerlukan autentikasi dinamis, Anda dapat mengonfigurasi skrip untuk menghasilkan header secara dinamis. Header dinamis hanya berlaku untuk protokol http/protobuf dan http/json. Dengan protokol grpc, Claude Code hanya menggunakan variabel header statis, OTEL_EXPORTER_OTLP_HEADERS dan varian per-sinyalnya.
Konfigurasi pengaturan
Tambahkan ke .claude/settings.json Anda, mengganti jalur dengan skrip Anda sendiri:
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
Nilai dapat berupa jalur ke file yang dapat dieksekusi, termasuk jalur yang berisi spasi, atau baris perintah shell dengan argumen. Di Windows, nilai selalu berjalan melalui shell, jadi kutip jalur yang berisi spasi di dalam nilai JSON.
Persyaratan skrip
Skrip harus menampilkan JSON yang valid dengan pasangan kunci-nilai string yang mewakili header HTTP:
#!/bin/bash
# Contoh: Header ganda
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
Jika pembantu gagal atau mencetak output yang tidak memenuhi persyaratan ini, Claude Code melaporkan kesalahan dalam:
- Output
/status - Log debug, saat berjalan dengan
--debugatau setelah menjalankan/debugdalam sesi - stderr, dalam sesi non-interaktif yang dimulai dengan
-p
Perilaku penyegaran
Skrip pembantu header berjalan saat startup dan secara berkala setelahnya untuk mendukung penyegaran token. Secara default, skrip berjalan setiap 29 menit. Sesuaikan interval dengan variabel lingkungan CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Dukungan organisasi multi-tim
Organisasi dengan beberapa tim atau departemen dapat menambahkan atribut khusus untuk membedakan antara kelompok yang berbeda menggunakan variabel lingkungan OTEL_RESOURCE_ATTRIBUTES:
# Tambahkan atribut khusus untuk identifikasi tim
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
Atribut khusus ini akan disertakan dalam semua metrik dan acara, memungkinkan Anda untuk:
- Filter metrik berdasarkan tim atau departemen
- Lacak biaya per pusat biaya
- Buat dasbor khusus tim
- Atur peringatan untuk tim tertentu
Claude Code melampirkan nilai-nilai ini sebagai atribut pada setiap titik data metrik dan catatan acara, selain mengirimkannya dalam blok sumber daya OTLP. Karena sebagian besar backend metrik mengekspos atribut titik data sebagai label yang dapat dikueri, Anda dapat mengelompokkan dan memfilter metrik berdasarkan kunci khusus Anda secara langsung. Kunci khusus tidak pernah menimpa atribut standar seperti user.id atau session.id: saat kunci bertabrakan, Claude Code mempertahankan nilai built-in.
Setiap kunci khusus menjadi label pada setiap deret metrik, jadi nilai kardinalitas tinggi meningkatkan biaya penyimpanan di backend metrik Anda. Untuk mengirim atribut khusus dalam blok sumber daya saja dan menghilangkannya dari label titik data, atur OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Lihat Kontrol kardinalitas metrik.
Variabel lingkungan OTEL_RESOURCE_ATTRIBUTES menggunakan pasangan kunci=nilai yang dipisahkan koma dengan persyaratan pemformatan yang ketat:
- Tidak ada spasi yang diizinkan: nilai tidak dapat berisi spasi. Misalnya,
user.organizationName=My Companytidak valid - Format: harus berupa pasangan kunci=nilai yang dipisahkan koma:
key1=value1,key2=value2 - Karakter yang diizinkan: hanya karakter US-ASCII yang tidak termasuk karakter kontrol, spasi, tanda kutip ganda, koma, titik koma, dan garis miring terbalik
- Karakter khusus: karakter di luar rentang yang diizinkan harus dikodekan persen
Untuk nilai yang memerlukan spasi, gunakan garis bawah atau camelCase sebagai gantinya. Contoh berikut menetapkan org.name dengan setiap bentuk:
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"
Anda dapat mengkodekan persen karakter apa pun, bukan hanya yang dikecualikan. Contoh ini mengkodekan spasi dan apostrof:
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
Membungkus nilai dalam tanda kutip tidak menghindari spasi. Misalnya, org.name="My Company" menghasilkan nilai literal "My Company" dengan tanda kutip disertakan, bukan My Company.
Konfigurasi contoh
Atur variabel lingkungan ini sebelum menjalankan claude. Setiap skenario di bawah menunjukkan konfigurasi lengkap, dan setiap variabel dijelaskan di bawah Variabel konfigurasi umum. Untuk mengonfirmasi konfigurasi berlaku, periksa backend Anda untuk metrik claude_code.session.count setelah memulai sesi; Quick start mencakup verifikasi hanya-log dan apa yang harus diperiksa saat tidak ada yang tiba.
Untuk debugging konsol dengan interval ekspor 1 detik:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
Untuk OTLP over 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
Untuk Prometheus, di-scrape dari http://localhost:9464/metrics:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
Pada lingkungan self-hosted, sesi mengikat port 9464 hanya pada kapasitas default runner satu. Pada kapasitas yang lebih tinggi, runner kembali mengekspos penghitung sesi dan gauge pada titik akhir /metrics miliknya sendiri.
Untuk mengirim metrik ke beberapa pengekspor:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
Untuk mengirim metrik dan log ke titik akhir atau backend yang berbeda:
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
Untuk mengekspor hanya metrik, tanpa acara atau log:
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
Untuk mengekspor hanya acara dan log, tanpa metrik:
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
Metrik dan acara yang tersedia
Atribut standar
Semua metrik dan acara berbagi atribut standar ini:
| Atribut | Deskripsi | Dikendalikan Oleh |
|---|---|---|
session.id |
Pengidentifikasi sesi unik | OTEL_METRICS_INCLUDE_SESSION_ID (default: true) |
app.version |
Versi Claude Code saat ini | OTEL_METRICS_INCLUDE_VERSION (default: false) |
app.entrypoint |
Bagaimana sesi diluncurkan, seperti cli, sdk-cli, sdk-ts, sdk-py, atau claude-vscode |
OTEL_METRICS_INCLUDE_ENTRYPOINT (default: false) |
organization.id |
UUID organisasi (saat diautentikasi) | Selalu disertakan saat tersedia |
user.account_uuid |
UUID akun (saat diautentikasi) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID (default: true) |
user.account_id |
ID akun dalam format yang ditandai sesuai dengan API admin Anthropic (saat diautentikasi), seperti user_01BWBeN28... |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID (default: true) |
user.id |
Pengidentifikasi anonim acak yang dihasilkan pada run pertama dan disimpan di ~/.claude.json. Tidak mengandung informasi pribadi dan tidak berasal dari akun Claude Anda. Menghapus file menghasilkan nilai yang tidak terkait pada run berikutnya. |
Selalu disertakan |
user.email |
Alamat email pengguna, dari sign-in Anda atau, dalam sesi cloud, dari kredensial sesi itu sendiri | Selalu disertakan saat tersedia |
terminal.type |
Jenis terminal, seperti iTerm.app, vscode, cursor, atau tmux |
Selalu disertakan saat terdeteksi |
Kunci dari OTEL_RESOURCE_ATTRIBUTES |
Atribut khusus yang Anda atur, seperti department atau team.id. Lihat Dukungan organisasi multi-tim |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (default: true) |
Saat Claude Code masuk ke gateway aplikasi Claude, CLI memberi stempel ekspor dengan identitas yang diautentikasi dari sesi gateway: user.id adalah subjek IdP daripada pengidentifikasi instalasi anonim, user.email adalah email yang masuk, dan user.groups membawa keanggotaan grup IdP sebagai string yang dipisahkan koma. Setiap ekspor juga membawa identity.source: gateway-oidc. Identitas gateway diterapkan terakhir, jadi kunci user.* dan identity.* yang diatur melalui OTEL_RESOURCE_ATTRIBUTES diabaikan pada sesi gateway.
Acara juga menyertakan atribut berikut. Ini tidak pernah dilampirkan pada metrik karena akan menyebabkan kardinalitas tak terbatas:
prompt.id: UUID yang menghubungkan prompt pengguna dengan semua acara berikutnya hingga prompt berikutnya. Lihat Atribut korelasi acara.workspace.host_paths: direktori ruang kerja host yang dipilih di aplikasi desktop, sebagai array stringworkflow.run_id: pengidentifikasi run, dengan awalanwf_, pada acara API dan alat yang dipancarkan oleh agen yang termasuk dalam run alat Workflow. Memfilter acara berdasarkan satuworkflow.run_idmerekonstruksi permintaan API dan hasil alat run tersebut. Pengidentifikasi mencakup agen yang dihasilkan skrip workflow dan agen apa pun yang dihasilkan agen tersebut pada gilirannya, seperti invokasi skill. Ini cocok dengan pengidentifikasi run yang dilaporkan dalam hasil alat Workflow. Tidak ada pada semua acara lainnya. Memerlukan Claude Code v2.1.202 atau lebih baruworkflow.name: nama workflow,meta.nameskrip-nya, dipancarkan bersamaworkflow.run_id. Nama workflow built-in muncul verbatim saat run mengeksekusi skrip built-in yang tidak dimodifikasi. Nama yang ditulis pengguna, termasuk salinan yang diedit dari skrip built-in, diganti dengancustomkecualiOTEL_LOG_TOOL_DETAILS=1diatur. Memerlukan Claude Code v2.1.202 atau lebih baru
Metrik
Claude Code mengekspor metrik berikut. Kolom Unit menunjukkan string unit OpenTelemetry yang dilampirkan pada setiap metrik; metrik count tidak membawa satuan apa pun.
| Nama Metrik | Deskripsi | Unit |
|---|---|---|
claude_code.session.count |
Jumlah sesi CLI yang dimulai | none |
claude_code.lines_of_code.count |
Jumlah baris kode yang dimodifikasi | none |
claude_code.pull_request.count |
Jumlah permintaan tarik yang dibuat | none |
claude_code.commit.count |
Jumlah komit git yang dibuat | none |
claude_code.cost.usage |
Biaya sesi Claude Code | USD |
claude_code.token.usage |
Jumlah token yang digunakan | tokens |
claude_code.code_edit_tool.decision |
Jumlah keputusan izin alat pengeditan kode | none |
claude_code.active_time.total |
Total waktu aktif | s |
Saat prometheus adalah satu-satunya pengekspor yang tercantum dalam OTEL_METRICS_EXPORTER, Claude Code menghilangkan unit USD, tokens, dan s dari metrik yang diekspor sehingga scrape tetap dalam format teks Prometheus yang valid. Nama metrik tidak berubah, dan konfigurasi yang menggabungkan pengekspor, seperti otlp,prometheus, menyimpan unit. Sebelum v2.1.216, scrape Prometheus menyertakan baris # UNIT khusus OpenMetrics yang beberapa scraper menolak.
Detail metrik
Setiap metrik mencakup atribut standar yang tercantum di atas. Metrik dengan atribut khusus konteks tambahan dicatat di bawah ini.
Penghitung sesi
Ditingkatkan pada awal setiap sesi.
Atribut:
- Semua atribut standar
start_type: Bagaimana sesi dimulai. Salah satu dari"fresh","resume","continue", atau"agents_view". Nilai"agents_view"mengidentifikasi proses dashboardclaude agents, antarmuka lokal yang diluncurkan pengguna daripada sesi percakapan. Filter pada nilai ini untuk memisahkan peluncuran proses UI dari sesi percakapan di dasbor Anda.
Penghitung baris kode
Ditingkatkan saat kode ditambahkan atau dihapus.
Atribut:
- Semua atribut standar
type: ("added","removed")model: Pengidentifikasi model untuk model yang membuat perubahan (misalnya, "claude-sonnet-5")
Penghitung permintaan tarik
Ditingkatkan saat Claude Code membuat permintaan tarik atau merge request melalui perintah shell atau alat MCP.
Atribut:
- Semua atribut standar
Penghitung komit
Ditingkatkan saat membuat komit git melalui Claude Code.
Atribut:
- Semua atribut standar
Penghitung biaya
Ditingkatkan setelah setiap permintaan API.
Atribut:
- Semua atribut standar
model: Pengidentifikasi model (misalnya, "claude-sonnet-5")query_source: Kategori subsistem yang mengeluarkan permintaan. Salah satu dari"main","subagent", atau"auxiliary"speed:"fast"saat permintaan menggunakan mode cepat. Tidak ada sebaliknyaeffort: Tingkat effort yang diterapkan pada permintaan:"low","medium","high","xhigh", atau"max". Tidak ada saat model tidak mendukung effort.agent.name: Jenis subagent yang mengeluarkan permintaan. Nama agen built-in dan agen dari plugin marketplace resmi muncul verbatim. Nama agen yang ditentukan pengguna lainnya diganti dengan"custom". Tidak ada saat permintaan tidak dikeluarkan oleh jenis subagent bernama.skill.name: Skill aktif untuk permintaan, diatur oleh alat Skill, perintah/, atau diwarisi oleh subagent yang dihasilkan. Nama skill built-in, bundled, yang ditentukan pengguna, dan plugin marketplace resmi muncul verbatim. Nama skill plugin pihak ketiga diganti dengan"third-party". Tidak ada saat tidak ada skill yang aktif.plugin.name: Plugin pemilik saat skill atau subagent aktif disediakan oleh plugin. Nama plugin marketplace resmi muncul verbatim. Nama plugin pihak ketiga diganti dengan"third-party". Tidak ada saat skill atau subagent tidak memiliki plugin pemilik.marketplace.name: Marketplace tempat plugin pemilik diinstal. Hanya dipancarkan untuk plugin marketplace resmi. Tidak ada sebaliknya.mcp_server.name: Server MCP yang alatnya berjalan dalam giliran yang menghasilkan permintaan ini. Nama server built-in, claude.ai-proxied, dan official-registry muncul verbatim. Nama server yang dikonfigurasi pengguna diganti dengan"custom". Tidak ada saat tidak ada alat MCP yang berjalan. Sebelum v2.1.222, Claude Code menetapkan atribut ini pada setiap permintaan setelah panggilan alat MCP, bukan hanya pada permintaan yang menggunakan hasil alat, jadi dasbor yang mengagregasinya menunjukkan penurunan setelah Anda upgrade.mcp_tool.name: Alat MCP yang berjalan dalam giliran yang menghasilkan permintaan ini, dengan redaksi yang sama dan perilaku versi sebagaimcp_server.name. Tidak ada saat tidak ada alat MCP yang berjalan.
Penghitung token
Ditingkatkan setelah setiap permintaan API.
Atribut:
- Semua atribut standar
type: ("input","output","cacheRead","cacheCreation")model: Pengidentifikasi model (misalnya, "claude-sonnet-5")query_source: Kategori subsistem yang mengeluarkan permintaan. Salah satu dari"main","subagent", atau"auxiliary"speed:"fast"saat permintaan menggunakan mode cepat. Tidak ada sebaliknyaeffort: Tingkat effort yang diterapkan pada permintaan. Lihat Penghitung biaya untuk detail.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribusi skill, plugin, agen, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku redaksi.
Penghitung keputusan alat pengeditan kode
Ditingkatkan saat pengguna menerima atau menolak penggunaan alat Edit, Write, atau NotebookEdit.
Atribut:
- Semua atribut standar
tool_name: Nama alat ("Edit","Write","NotebookEdit")decision: Keputusan pengguna ("accept","reject")source: Sumber keputusan. Salah satu dari"config","hook","user_permanent","user_temporary","user_abort", atau"user_reject". Lihat Acara keputusan alat untuk mengetahui apa arti setiap nilai.language: Bahasa pemrograman file yang diedit, seperti"TypeScript","Python","JavaScript", atau"Markdown". Mengembalikan"unknown"untuk ekstensi file yang tidak dikenali.
Penghitung waktu aktif
Melacak waktu aktual yang dihabiskan secara aktif menggunakan Claude Code, tidak termasuk waktu idle. Metrik ini ditingkatkan selama interaksi pengguna, seperti mengetik dan membaca respons, dan selama pemrosesan CLI, seperti eksekusi alat dan pembuatan respons AI.
Atribut:
- Semua atribut standar
type:"user"untuk interaksi keyboard,"cli"untuk eksekusi alat dan respons AI
Acara
Claude Code mengekspor acara berikut melalui log/acara OpenTelemetry (saat OTEL_LOGS_EXPORTER dikonfigurasi):
Atribut korelasi acara
Saat pengguna mengirimkan prompt, Claude Code dapat membuat beberapa panggilan API dan menjalankan beberapa alat. Atribut prompt.id memungkinkan Anda menghubungkan semua acara tersebut kembali ke prompt tunggal yang memicunya.
| Atribut | Deskripsi |
|---|---|
prompt.id |
Pengidentifikasi UUID v4 yang menghubungkan semua acara yang dihasilkan saat memproses prompt pengguna tunggal |
message.uuid |
UUID pesan seperti yang disimpan dalam transkrip sesi, file ~/.claude/projects/*/*.jsonl. Hadir pada assistant_response, dan pada user_prompt kecuali untuk command dispatches, yang dapat menghasilkan nol atau banyak pesan. Pada assistant_response, ini adalah entri transkrip akhir respons, yang parentUuid giliran berikutnya berantai dari. Memerlukan Claude Code v2.1.214 atau lebih baru |
client_request_id |
UUID yang dihasilkan klien dikirim sebagai header permintaan x-client-request-id. Hadir pada api_request dan api_error pada koneksi API pihak pertama; tidak ada pada backend penyedia pihak ketiga dan saat permintaan diulang melalui fallback non-streaming. Memasangkan permintaan dengan responsnya dan tetap tersedia untuk kegagalan seperti timeout yang tidak pernah menghasilkan request_id server. Cocok dengan atribut yang sama pada span trace llm_request. Memerlukan Claude Code v2.1.214 atau lebih baru |
Untuk melacak semua aktivitas yang dipicu oleh prompt tunggal, filter acara Anda berdasarkan nilai prompt.id tertentu. Ini mengembalikan acara user_prompt, acara api_request apa pun, dan acara tool_result apa pun yang terjadi saat memproses prompt tersebut.
Untuk rekonstruksi tingkat pesan, setiap kelas acara membawa kunci yang cocok dengan bidang dalam transkrip sesi. Format entri transkrip adalah internal untuk Claude Code dan berubah antar versi, jadi pipeline yang bergabung pada bidang ini dapat rusak pada rilis apa pun; perlakukan penggabungan sebagai spesifik versi daripada kontrak stabil:
message.uuidpadauser_promptdanassistant_responserequest_idpada acara API, disimpan sebagairequestIdpada entri asisten transkriptool_use_idpada acaratool_resultdantool_decision
Acara prompt pengguna
Dicatat saat pengguna mengirimkan prompt.
Nama Acara: claude_code.user_prompt
Atribut:
- Semua atribut standar
event.name:"user_prompt"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiprompt_length: Panjang promptprompt: Konten prompt. Diredaksi secara default. AturOTEL_LOG_USER_PROMPTS=1untuk menyertakannyamessage.uuid: UUID pesan pengguna yang dihasilkan, cocok dengan entri transkrip yang disimpan. Tidak ada pada command dispatches, yang dapat menghasilkan nol atau banyak pesan. Memerlukan Claude Code v2.1.214 atau lebih barucommand_name: Nama perintah saat prompt memanggil satu. Nama perintah built-in dan bundled seperticompactataudebugdipancarkan apa adanya; alias sepertiresetdipancarkan sebagai yang diketik daripada nama kanonik. Nama perintah custom, plugin, dan MCP runtuh menjadicustomataumcpkecualiOTEL_LOG_TOOL_DETAILS=1diaturcommand_source: Asal perintah saat ada:builtin,custom, ataumcp. Perintah yang disediakan plugin melaporkan sebagaicustom
Acara respons asisten
Dicatat setelah setiap permintaan API yang mengembalikan konten teks dari model. Hanya blok teks respons yang disertakan; blok thinking dan blok tool-use dikecualikan. Memerlukan Claude Code v2.1.193 atau lebih baru.
Nama Acara: claude_code.assistant_response
Atribut:
- Semua atribut standar
event.name:"assistant_response"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiresponse_length: Panjang teks respons dalam karakterresponse: Teks respons, dipotong pada batas konten (60 KB secara default). Diredaksi menjadi<REDACTED>secara default. AturOTEL_LOG_ASSISTANT_RESPONSES=1untuk menyertakannya. SaatOTEL_LOG_ASSISTANT_RESPONSEStidak diatur,OTEL_LOG_USER_PROMPTSmengontrolnya sebagai gantinya, jadi aturOTEL_LOG_ASSISTANT_RESPONSES=0untuk menjaga respons diredaksi saat logging prompt aktifmodel: Pengidentifikasi model (misalnya, "claude-sonnet-5")request_id: ID permintaan API Anthropic dari headerrequest-idrespons. Hadir hanya saat API mengembalikan satumessage.uuid: UUID entri transkrip akhir respons. Respons API disimpan sebagai satu entri transkrip per blok konten; ini adalah yang terakhir, yangparentUuidgiliran berikutnya berantai dari. Memerlukan Claude Code v2.1.214 atau lebih baruquery_source: Subsistem yang mengeluarkan permintaan, seperti"repl_main_thread","compact", atau nama subagent
Acara hasil alat
Dicatat saat alat menyelesaikan eksekusi. Tidak dipancarkan jika panggilan alat ditolak; lihat Acara keputusan alat untuk penolakan.
Nama Acara: claude_code.tool_result
Atribut:
- Semua atribut standar
event.name:"tool_result"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesitool_name: Nama alattool_use_id: Pengidentifikasi unik untuk invokasi alat ini. Cocok dengantool_use_idyang diteruskan ke hooks, memungkinkan korelasi antara acara OTel dan data yang ditangkap hook.success:"true"atau"false"duration_ms: Waktu eksekusi dalam milidetikerror_type: String kategori kesalahan saat alat gagal, seperti"Error:ENOENT"atau"ShellError"error(saatOTEL_LOG_TOOL_DETAILS=1): Pesan kesalahan lengkap saat alat gagaldecision_type: Selalu"accept", karena acara ini hanya dipancarkan setelah alat berjalan. Panggilan yang ditolak tidak menghasilkan hasil alatdecision_source: Sumber keputusan izin. Salah satu dari"config","hook","user_permanent", atau"user_temporary". Lihat Acara keputusan alat untuk mengetahui apa arti setiap nilai. Sumber hanya-tolak"user_abort"dan"user_reject"tidak pernah muncul pada acara ini.tool_input_size_bytes: Ukuran input alat yang diserialisasi JSON dalam bytetool_result_size_bytes: Ukuran hasil alat dalam bytemcp_server_scope: Pengidentifikasi cakupan server MCP (untuk alat MCP)tool_parameters(saatOTEL_LOG_TOOL_DETAILS=1): String JSON yang berisi parameter khusus alat. Untuk server built-in Claude Desktop, dalam sesi yang dimiliki Claude Desktop, pasanganmcp_server_name/mcp_tool_namedisertakan bahkan dengan flag off, pengecualian yang sama yang ditulis host seperti Acara keputusan alat, memerlukan Claude Code v2.1.214 atau lebih baru. Parameter bervariasi menurut alat:- Untuk alat Bash: mencakup
bash_command,full_command,timeout,description,dangerouslyDisableSandbox, dangit_commit_id(SHA komit, saat perintahgit commitberhasil). Alat bash ruang kerja aplikasi desktop juga melaporkantool_namesebagaiBash, tetapi hanya mencakupbash_command,full_command, dantimeout - Untuk alat MCP: mencakup
mcp_server_name,mcp_tool_name - Untuk alat Skill: mencakup
skill_name - Untuk alat Agent atau alat Task legacy: mencakup
subagent_type
- Untuk alat Bash: mencakup
tool_input(saatOTEL_LOG_TOOL_DETAILS=1): Argumen alat yang diserialisasi JSON. Nilai individual di atas 512 karakter dipotong, dan muatan penuh dibatasi hingga ~4 K karakter. Berlaku untuk semua alat termasuk alat MCP.
Acara permintaan API
Dicatat untuk setiap permintaan API ke Claude.
Nama Acara: claude_code.api_request
Atribut:
- Semua atribut standar
event.name:"api_request"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimodel: Model yang digunakan (misalnya, "claude-sonnet-5")cost_usd: Biaya perkiraan dalam USDcost_usd_micros: Biaya perkiraan dalam jutaan dolar AS, dipancarkan sebagai integerduration_ms: Durasi permintaan dalam milidetikinput_tokens: Jumlah token inputoutput_tokens: Jumlah token outputcache_read_tokens: Jumlah token yang dibaca dari cachecache_creation_tokens: Jumlah token yang digunakan untuk pembuatan cacherequest_id: ID permintaan API Anthropic dari headerrequest-idrespons, seperti"req_011...". Hadir hanya saat API mengembalikan satu.client_request_id: UUID yang dihasilkan klien dikirim sebagai header permintaanx-client-request-id; lihat tabel atribut korelasi acara untuk kapan itu ada. Memerlukan Claude Code v2.1.214 atau lebih baruspeed:"fast"atau"normal", menunjukkan apakah mode cepat aktifquery_source: Subsistem yang mengeluarkan permintaan, seperti"repl_main_thread","compact", atau nama subagenteffort: Tingkat effort yang diterapkan pada permintaan:"low","medium","high","xhigh", atau"max". Tidak ada saat model tidak mendukung effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribusi skill, plugin, agen, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku redaksi.
Acara kesalahan API
Dicatat saat permintaan API ke Claude gagal.
Nama Acara: claude_code.api_error
Atribut:
- Semua atribut standar
event.name:"api_error"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimodel: Model yang digunakan (misalnya, "claude-sonnet-5")error: Pesan kesalahanstatus_code: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP seperti kegagalan koneksi.duration_ms: Durasi permintaan dalam milidetikattempt: Jumlah total upaya yang dilakukan, termasuk permintaan awal (1berarti tidak ada retry yang terjadi)request_id: ID permintaan API Anthropic dari headerrequest-idrespons, seperti"req_011...". Hadir hanya saat API mengembalikan satu.client_request_id: UUID yang dihasilkan klien dikirim sebagai header permintaanx-client-request-id. Tersedia bahkan saat kegagalan seperti timeout atau kesalahan koneksi tidak pernah menghasilkanrequest_idserver; lihat tabel atribut korelasi acara untuk kapan itu ada. Memerlukan Claude Code v2.1.214 atau lebih baruspeed:"fast"atau"normal", menunjukkan apakah mode cepat aktifquery_source: Subsistem yang mengeluarkan permintaan, seperti"repl_main_thread","compact", atau nama subagenteffort: Tingkat effort yang diterapkan pada permintaan. Tidak ada saat model tidak mendukung effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribusi skill, plugin, agen, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku redaksi.
Acara penolakan API
Dicatat saat permintaan API mengembalikan stop_reason: "refusal". Penolakan tiba pada aliran respons yang berhasil daripada sebagai kesalahan HTTP, jadi acara api_error tidak terpicu untuk mereka. Acara ini memungkinkan Anda melacak frekuensi penolakan dan mengelompokkan penolakan berdasarkan atribut yang sama dengan api_request dan api_error.
Nama Acara: claude_code.api_refusal
Atribut:
- Semua atribut standar
event.name:"api_refusal"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimodel: Pengidentifikasi model dari permintaanrequest_id: ID permintaan API Anthropic dari headerrequest-idrespons, seperti"req_011...". Hadir hanya saat API mengembalikan satu.query_source: Subsistem yang mengeluarkan permintaan, seperti"repl_main_thread","compact", atau nama subagent. Lihatapi_requestuntuk definisi.speed: Baik"fast"saat Mode cepat aktif, atau"normal"attempt: Nomor upaya retry. Upaya pertama adalah1.effort: Tingkat effort yang diterapkan pada permintaan. Tidak ada saat model tidak mendukung effort.server_fallback_hop:truesaat fallback model server-side API sudah mencoba ulang penolakan ini pada model yang berbeda, jadi pengguna tidak melihat penolakan khusus ini.falsesaat permintaan berakhir dalam penolakan. Satu giliran dapat memancarkan acara hoptruedan acara akhirfalseyang lebih baru saat model fallback juga menolak.has_category:truesaat respons API membawastop_details.categorydari"cyber","bio","frontier_llm", atau"reasoning_extraction".falsesaat respons tidak membawa kategori atau nilai di luar set itu. Tidak ada saatserver_fallback_hopadalahtrue, karena blok hop tidak membawastop_details.has_explanation:truesaat respons API membawastop_details.explanation, sebaliknyafalse. Tidak ada saatserver_fallback_hopadalahtrue.category: Nilaistop_details.categorydari respons API. Salah satu dari"cyber","bio","frontier_llm", atau"reasoning_extraction". Hanya ada saatOTEL_LOG_TOOL_DETAILS=1diatur danhas_categoryadalahtrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Atribusi skill, plugin, agen, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku redaksi.
Acara badan permintaan API
Dicatat untuk setiap upaya permintaan API saat OTEL_LOG_RAW_API_BODIES diatur. Satu acara dipancarkan per upaya, jadi retry dengan parameter yang disesuaikan masing-masing menghasilkan acara mereka sendiri.
Nama Acara: claude_code.api_request_body
Atribut:
- Semua atribut standar
event.name:"api_request_body"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesibody: Parameter permintaan Messages API yang diserialisasi JSON, seperti system prompt, messages, dan tools, dipotong pada batas konten (60 KB secara default). Konten extended-thinking dalam giliran asisten sebelumnya diredaksi. Dipancarkan hanya dalam mode inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Jalur absolut ke file<dir>/<uuid>.request.jsonyang berisi badan yang tidak dipotong. Dipancarkan hanya dalam mode file (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Panjang badan yang tidak dipotong. Byte UTF-8 saatOTEL_LOG_RAW_API_BODIES=file:<dir>, atau unit kode UTF-16 saat=1body_truncated:"true"saat pemotongan inline terjadi. Tidak ada dalam mode file dan saat tidak ada pemotongan yang terjadi.model: Pengidentifikasi model dari parameter permintaanquery_source: Subsistem yang mengeluarkan permintaan (misalnya,"compact")
Acara badan respons API
Dicatat untuk setiap respons API yang berhasil saat OTEL_LOG_RAW_API_BODIES diatur.
Nama Acara: claude_code.api_response_body
Atribut:
- Semua atribut standar
event.name:"api_response_body"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesibody: Respons Messages API yang diserialisasi JSON, termasuk id, content blocks, usage, dan stop reason, dipotong pada batas konten (60 KB secara default). Konten extended-thinking diredaksi. Dipancarkan hanya dalam mode inline (OTEL_LOG_RAW_API_BODIES=1).body_ref: Jalur absolut ke file<dir>/<request_id>.response.jsonyang berisi badan yang tidak dipotong. Dipancarkan hanya dalam mode file (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Panjang badan yang tidak dipotong. Byte UTF-8 saatOTEL_LOG_RAW_API_BODIES=file:<dir>, atau unit kode UTF-16 saat=1body_truncated:"true"saat pemotongan inline terjadi. Tidak ada dalam mode file dan saat tidak ada pemotongan yang terjadi.model: Pengidentifikasi modelquery_source: Subsistem yang mengeluarkan permintaanrequest_id: ID permintaan API Anthropic dari headerrequest-idrespons, seperti"req_011...". Hadir hanya saat API mengembalikan satu.
Acara keputusan alat
Dicatat saat keputusan izin alat dibuat (terima/tolak).
Nama Acara: claude_code.tool_decision
Atribut:
- Semua atribut standar
event.name:"tool_decision"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesitool_name: Nama alat (misalnya, "Read", "Edit", "Write", "NotebookEdit")tool_use_id: Pengidentifikasi unik untuk invokasi alat ini. Cocok dengantool_use_idyang diteruskan ke hooks, memungkinkan korelasi antara acara OTel dan data yang ditangkap hook.decision: Baik"accept"atau"reject"tool_source: Selalu ada. Provenance alat, sebagai set nilai yang ditulis CLI tertutup. Memerlukan Claude Code v2.1.214 atau lebih baru"builtin": alat CLI sendiri"mcp": server MCP secara umum"sdk_host_builtin_mcp": server in-process built-in ke Claude Desktop itu sendiri, dalam sesi yang dimiliki Claude Desktop. Claude Desktop memiliki sesi yang dimulai dari salah satu entrypoint-nya sendiri,claude-desktop,claude-desktop-3p, ataulocal-agent, saat sesi itu bukan anak bersarang; sesi bersarang, termasuk sesi yang Claude Code sendiri hasilkan, melaporkan server ini sebagai"mcp"
source: Sumber keputusan:"config": Diputuskan secara otomatis tanpa diminta, berdasarkan pengaturan proyek, aturan izin atau tolak dalam pengaturan pribadi pengguna, kebijakan terkelola perusahaan, flag--allowedToolsatau--disallowedTools, mode izin aktif, hibah berskop sesi dari prompt sebelumnya dalam sesi CLI interaktif yang sama, atau karena alat itu aman secara inheren. Acara tidak menunjukkan sumber mana yang cocok. Claude Code juga melaporkan"config"saat permintaan prompt izin itu sendiri gagal, misalnya saat callbackcanUseToolAgent SDK atau alat--permission-prompt-toolmengembalikan hasil yang tidak valid, atau saat aliran input ditutup saat permintaan tertunda. Sebelum v2.1.216, Claude Code melaporkan kegagalan ini sebagai"user_reject"."hook": HookPreToolUseatauPermissionRequestmengembalikan keputusan."user_permanent": Dipancarkan saat pengguna memilih "Ya, dan jangan tanya lagi untuk ..." saat diminta, yang menyimpan aturan izin ke pengaturan pribadi mereka. Dalam CLI interaktif ini dipancarkan hanya untuk pilihan itu sendiri; panggilan nanti yang cocok dengan aturan tersimpan memancarkan"config"sebagai gantinya. Dalam sesi Agent SDK atau non-interaktif-p, baik pilihan awal maupun kecocokan aturan nanti memancarkan"user_permanent". Diperlakukan sebagai penerimaan."user_temporary": Dipancarkan saat pengguna memilih "Ya" saat diminta untuk persetujuan satu kali, atau memilih opsi yang memberikan akses untuk sisa sesi pada prompt pengeditan atau pembacaan file. Dalam CLI interaktif ini dipancarkan hanya untuk pilihan itu sendiri; panggilan nanti yang diizinkan oleh hibah berskop sesi itu memancarkan"config"sebagai gantinya. Dalam sesi Agent SDK atau non-interaktif-p, baik pilihan maupun kecocokan nanti memancarkan"user_temporary". Diperlakukan sebagai penerimaan."user_abort": Dipancarkan saat pengguna menutup prompt izin tanpa menjawab. Dalam sesi Agent SDK dan non-interaktif-p, ini termasuk mengganggu giliran saat permintaan izincanUseToolatau--permission-prompt-tooltertunda; sebelum v2.1.216, Claude Code melaporkan gangguan itu sebagai"user_reject". Diperlakukan sebagai penolakan."user_reject": Dipancarkan saat pengguna memilih "Tidak" saat diminta. Dalam CLI interaktif ini dipancarkan hanya untuk pilihan itu sendiri; panggilan yang cocok dengan aturan penolakan dalam pengaturan pribadi mereka memancarkan"config"sebagai gantinya. Dalam sesi Agent SDK atau non-interaktif-p, panggilan yang cocok dengan aturan penolakan dalam pengaturan pribadi memancarkan"user_reject". Diperlakukan sebagai penolakan.
tool_parameters(saatOTEL_LOG_TOOL_DETAILS=1): String JSON yang berisi parameter khusus alat. Bentuk yang sama dengan Acara hasil alat, minus bidang pasca-eksekusi sepertigit_commit_id. Nilai mungkin berbeda daritool_resultuntuk panggilan yang diterima jika keputusan izin menulis ulang input alat melaluiupdatedInput. Gunakan atribut ini untuk melihat perintah mana yang ditolak saatdecisionadalah"reject".- Untuk alat
"sdk_host_builtin_mcp":mcp_server_namedanmcp_tool_namedisertakan bahkan saatOTEL_LOG_TOOL_DETAILSoff, karena aplikasi host mendefinisikan nama ini; tanpanya, panggilan yang ditolak ke salah satu server built-in ini tidak dapat dikaitkan pada aliran default. Untuk server MCP yang dikonfigurasi pengguna,tool_nameacara selalu literal"mcp_tool", dan nama server dan alat muncul hanya dalamtool_parametersdengan flag on; konten argumen memerlukan flag di mana-mana. Memerlukan Claude Code v2.1.214 atau lebih baru - Untuk alat Bash: mencakup
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. Alat bash ruang kerja aplikasi desktop juga melaporkantool_namesebagaiBash, tetapi hanya mencakupbash_command,full_command, dantimeout - Untuk alat MCP: mencakup
mcp_server_name,mcp_tool_name - Untuk alat Skill: mencakup
skill_name - Untuk alat Agent atau alat Task legacy: mencakup
subagent_type
- Untuk alat
Acara mode izin berubah
Dicatat saat mode izin berubah, misalnya dari siklus Shift+Tab, keluar dari plan mode, atau pemeriksaan gate mode otomatis.
Nama Acara: claude_code.permission_mode_changed
Atribut:
- Semua atribut standar
event.name:"permission_mode_changed"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesifrom_mode: Mode izin sebelumnya, misalnya"default","plan","acceptEdits","auto", atau"bypassPermissions"to_mode: Mode izin barutrigger: Apa yang menyebabkan perubahan. Salah satu dari"shift_tab","exit_plan_mode","auto_gate_denied", atau"auto_opt_in". Tidak ada saat transisi berasal dari SDK atau bridge
Acara auth
Dicatat saat /login atau /logout selesai.
Nama Acara: claude_code.auth
Atribut:
- Semua atribut standar
event.name:"auth"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiaction:"login"atau"logout"success:"true"atau"false"auth_method: Metode autentikasi, seperti"oauth"error_category: Jenis kesalahan kategori saat tindakan gagal. Pesan kesalahan mentah tidak pernah disertakanstatus_code: Kode status HTTP sebagai string saat tindakan gagal dengan kesalahan HTTP
Acara koneksi server MCP
Dicatat saat server MCP terhubung, terputus, atau gagal terhubung.
Nama Acara: claude_code.mcp_server_connection
Atribut:
- Semua atribut standar
event.name:"mcp_server_connection"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesistatus:"connected","failed", atau"disconnected"transport_type: Transport server, seperti"stdio","sse", atau"http"server_scope: Cakupan server dikonfigurasi di, seperti"user","project", atau"local"duration_ms: Durasi upaya koneksi dalam milidetikerror_code: Kode kesalahan saat koneksi gagalis_plugin:truesaat server disediakan oleh plugin,falsesebaliknyaplugin_id_hash(saatis_pluginadalahtrue): Hash stabil dari nama plugin dan marketplace, untuk mengelompokkan acara berdasarkan plugin tanpa mengekspos nama. Claude Code menghitungnya seperti yang dijelaskan di bawah acara plugin dimuatplugin.name(saatis_pluginadalahtrue): Nama plugin yang menyediakan server. Untuk plugin pihak ketiga ini adalah string literal"third-party"kecualiOTEL_LOG_TOOL_DETAILS=1; ini melindungi nama plugin pihak ketiga dari muncul dalam log secara default. Plugin dari sumber Anthropic resmi selalu diidentifikasi berdasarkan nama. Atributplugin_id_hashdanplugin.namemengalir ke backend monitoring Anda sendiri dan tidak dikirim ke Anthropicserver_name(saatOTEL_LOG_TOOL_DETAILS=1): Nama server yang dikonfigurasierror(saatOTEL_LOG_TOOL_DETAILS=1): Pesan kesalahan lengkap saat koneksi gagal
Acara kesalahan internal
Dicatat saat Claude Code menangkap kesalahan internal yang tidak terduga. Hanya nama kelas kesalahan dan kode gaya errno yang dicatat. Pesan kesalahan dan stack trace tidak pernah disertakan. Acara ini tidak dipancarkan saat berjalan terhadap Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry, atau saat DISABLE_ERROR_REPORTING diatur.
Nama Acara: claude_code.internal_error
Atribut:
- Semua atribut standar
event.name:"internal_error"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesierror_name: Nama kelas kesalahan, seperti"TypeError"atau"SyntaxError"error_code: Kode errno Node.js seperti"ENOENT"saat ada pada kesalahan
Acara plugin terinstal
Dicatat saat plugin selesai menginstal, dari perintah CLI claude plugin install dan UI interaktif /plugin.
Nama Acara: claude_code.plugin_installed
Atribut:
- Semua atribut standar
event.name:"plugin_installed"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimarketplace.is_official:"true"jika marketplace adalah marketplace Anthropic resmi,"false"sebaliknyainstall.trigger:"cli"atau"ui"plugin.name: Nama plugin yang diinstal. Untuk marketplace pihak ketiga ini disertakan hanya saatOTEL_LOG_TOOL_DETAILS=1plugin.version: Versi plugin saat dideklarasikan dalam entri marketplace. Untuk marketplace pihak ketiga ini disertakan hanya saatOTEL_LOG_TOOL_DETAILS=1marketplace.name: Marketplace plugin diinstal dari. Untuk marketplace pihak ketiga ini disertakan hanya saatOTEL_LOG_TOOL_DETAILS=1
Acara plugin dimuat
Dicatat sekali per plugin yang diaktifkan saat startup sesi. Gunakan acara ini untuk menginventarisasi plugin mana yang aktif di seluruh armada Anda, sebagai pelengkap plugin_installed yang mencatat tindakan instalasi itu sendiri.
Nama Acara: claude_code.plugin_loaded
Atribut:
- Semua atribut standar
event.name:"plugin_loaded"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiplugin.name: nama plugin. Untuk plugin di luar marketplace resmi dan bundel built-in nilainya adalah"third-party"kecualiOTEL_LOG_TOOL_DETAILS=1marketplace.name: marketplace tempat plugin diinstal, saat diketahui. Diredaksi menjadi"third-party"di bawah kondisi yang sama denganplugin.nameplugin.version: versi dari manifest plugin. Disertakan hanya saat nama tidak diredaksi dan manifest mendeklarasikan versiplugin.scope: kategori provenance untuk plugin:"official","community","org","user-local", atau"default-bundle"enabled_via: bagaimana plugin menjadi diaktifkan:"default-enable","org-policy","admin-install","seed-mount", atau"user-install". Nilai"admin-install"berarti plugin diatur sebagai required atau auto-install untuk organisasi Anda di Pengaturan Organisasi > Plugins. Sebelum v2.1.246, Claude Code melaporkan plugin ini sebagai"user-install"atau"seed-mount"plugin_id_hash: hash deterministik dari nama plugin dan marketplace, dikirim hanya ke pengekspor yang dikonfigurasi. Memungkinkan Anda menghitung berapa banyak plugin pihak ketiga yang berbeda dimuat di seluruh armada Anda tanpa merekam nama mereka. Untuk plugin yang disinkronkan dari claude.ai, Claude Code menghash nama plugin dengan nama marketplace yang dilaporkan claude.ai untuk plugin, atau dengansyncedsebaliknya. Sebelum v2.1.246, Claude Code tidak menggunakan nama marketplace yang dilaporkan claude.ai dalam hashhas_hooks: apakah plugin berkontribusi hookshas_mcp: apakah plugin berkontribusi server MCPhost_owned_mcp:truesaat host SDK mengelola koneksi MCP plugin ini dan Claude Code melewati pembacaan konfigurasi server MCP plugin,falsesebaliknya. Memerlukan Claude Code v2.1.172 atau lebih baruskill_path_count: jumlah direktori skill yang dideklarasikan plugincommand_path_count: jumlah direktori perintah yang dideklarasikan pluginagent_path_count: jumlah direktori agen yang dideklarasikan pluginsafe_mode:"true"saat sesi dimulai dengan--safe-mode,"false"sebaliknya. Dalam mode aman acara ini melaporkan inventaris yang dikonfigurasi saja; perintah, skill, hooks, dan server MCP plugin tidak dimuat. Memerlukan Claude Code v2.1.169 atau lebih baru
Acara skill diaktifkan
Dicatat saat skill dipanggil, baik Claude memanggilnya melalui alat Skill atau Anda menjalankannya sebagai perintah /.
Nama Acara: claude_code.skill_activated
Atribut:
- Semua atribut standar
event.name:"skill_activated"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiskill.name: Nama skill. Untuk skill yang ditentukan pengguna dan plugin pihak ketiga nilainya adalah placeholder"custom_skill"kecualiOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Bagaimana skill dipicu ("user-slash","claude-proactive", atau"nested-skill")skill.source: Tempat skill dimuat dari (misalnya,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"saat skill adalah skill workflow. Tidak ada sebaliknyaplugin.name(saatOTEL_LOG_TOOL_DETAILS=1atau plugin dari marketplace resmi): Nama plugin pemilik saat skill disediakan oleh pluginmarketplace.name(saatOTEL_LOG_TOOL_DETAILS=1atau plugin dari marketplace resmi): Marketplace plugin pemilik diinstal dari, saat skill disediakan oleh plugin
Acara mention @
Dicatat saat Claude Code menyelesaikan mention @ dalam prompt. Tidak setiap mention memancarkan acara: jalur early-exit seperti penolakan izin, file berukuran besar, lampiran referensi PDF, dan kegagalan listing direktori kembali tanpa logging.
Nama Acara: claude_code.at_mention
Atribut:
- Semua atribut standar
event.name:"at_mention"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimention_type: Jenis mention ("file","directory","agent","mcp_resource","peer"). Nilai"peer"berarti Anda menyebutkan salah satu sesi Claude Code lain Anda. Memerlukan Claude Code v2.1.232 atau lebih barusuccess: Apakah mention berhasil diselesaikan ("true"atau"false")
Acara retry API habis
Dicatat sekali saat permintaan API gagal setelah lebih dari satu upaya. Dipancarkan bersama acara api_error terakhir.
Nama Acara: claude_code.api_retries_exhausted
Atribut:
- Semua atribut standar
event.name:"api_retries_exhausted"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesimodel: Model yang digunakanerror: Pesan kesalahan terakhirstatus_code: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP.total_attempts: Jumlah total upaya yang dilakukantotal_retry_duration_ms: Total waktu wall-clock di semua upayaspeed:"fast"atau"normal"
Acara hook terdaftar
Dicatat sekali per hook yang dikonfigurasi saat startup sesi. Gunakan acara ini untuk menginventarisasi hook mana yang aktif di seluruh armada Anda, sebagai pelengkap acara hook_execution_start dan hook_execution_complete per eksekusi.
Nama Acara: claude_code.hook_registered
Atribut:
- Semua atribut standar
event.name:"hook_registered"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesihook_event: jenis acara hook, seperti"PreToolUse"atau"PostToolUse"hook_type: jenis implementasi hook:"command","prompt","mcp_tool","http", atau"agent"hook_source: tempat hook didefinisikan:"userSettings","projectSettings","localSettings","flagSettings","policySettings", atau"pluginHook"safe_mode:"true"saat sesi dimulai dengan--safe-mode,"false"sebaliknya. Memerlukan Claude Code v2.1.169 atau lebih baruhook_matcher(saatOTEL_LOG_TOOL_DETAILS=1): string matcher dari konfigurasi hook, saat satu diaturplugin.name(saathook_sourceadalah"pluginHook"): nama plugin yang berkontribusi. Untuk plugin di luar marketplace resmi dan bundel built-in nilainya adalah"third-party"kecualiOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(saathook_sourceadalah"pluginHook"): hash deterministik dari nama plugin dan marketplace, dikirim hanya ke pengekspor yang dikonfigurasi. Memungkinkan Anda menghitung plugin yang berkontribusi berbeda tanpa merekam nama mereka. Claude Code menghitungnya seperti yang dijelaskan di bawah acara plugin dimuat
Acara mulai eksekusi hook
Dicatat saat satu atau lebih hooks mulai dieksekusi untuk acara hook.
Nama Acara: claude_code.hook_execution_start
Atribut:
- Semua atribut standar
event.name:"hook_execution_start"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesihook_event: Jenis acara hook, seperti"PreToolUse"atau"PostToolUse"hook_name: Nama hook lengkap termasuk matcher, seperti"PreToolUse:Write"num_hooks: Jumlah perintah hook yang cocokmanaged_only:"true"saat hanya hooks kebijakan terkelola yang diizinkanhook_source:"policySettings"atau"merged"safe_mode:"true"saat sesi dimulai dengan--safe-mode,"false"sebaliknya. Memerlukan Claude Code v2.1.169 atau lebih baruhook_definitions: Konfigurasi hook yang diserialisasi JSON. Disertakan hanya saat detailed beta tracing danOTEL_LOG_TOOL_DETAILS=1keduanya diaktifkan
Acara eksekusi hook selesai
Dicatat saat semua hooks untuk acara hook selesai.
Nama Acara: claude_code.hook_execution_complete
Atribut:
- Semua atribut standar
event.name:"hook_execution_complete"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesihook_event: Jenis acara hookhook_name: Nama hook lengkap termasuk matchernum_hooks: Jumlah perintah hook yang cocoknum_success: Jumlah yang selesai dengan suksesnum_blocking: Jumlah yang mengembalikan keputusan blockingnum_non_blocking_error: Jumlah yang gagal tanpa blockingnum_cancelled: Jumlah dibatalkan sebelum selesaitotal_duration_ms: Durasi wall-clock dari semua hooks yang cocokmanaged_only:"true"saat hanya hooks kebijakan terkelola yang diizinkanhook_source:"policySettings"atau"merged"safe_mode:"true"saat sesi dimulai dengan--safe-mode,"false"sebaliknya. Memerlukan Claude Code v2.1.169 atau lebih baruhook_definitions: Konfigurasi hook yang diserialisasi JSON. Disertakan hanya saat detailed beta tracing danOTEL_LOG_TOOL_DETAILS=1keduanya diaktifkan
Acara metrik plugin hook
Dicatat saat hook plugin marketplace resmi memancarkan metrik per-invokasi. Hanya plugin yang diinstal dari marketplace Anthropic resmi yang dapat memancarkan ini. Plugin marketplace pihak ketiga dan hook yang dikonfigurasi pengguna tidak memancarkan ke acara ini. Gunakan acara ini untuk memantau perilaku plugin seperti tingkat penemuan, biaya, dan durasi dari stack observabilitas Anda sendiri.
Nama Acara: claude_code.hook_plugin_metrics
Atribut:
- Semua atribut standar
event.name:"hook_plugin_metrics"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiplugin_id: pengidentifikasi plugin dalam bentuk<name>@<marketplace>hook_event: jenis acara hook yang memancarkan metrik- Hingga 20 kunci metrik yang dipancarkan plugin. Nama cocok dengan
^[a-z][a-z0-9_]{0,39}$. Nilai adalah boolean atau angka.
Acara pemadatan
Dicatat saat pemadatan percakapan selesai.
Nama Acara: claude_code.compaction
Atribut:
- Semua atribut standar
event.name:"compaction"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesitrigger:"auto"atau"manual"success:"true"atau"false"duration_ms: Durasi pemadatanpre_tokens: Jumlah token perkiraan sebelum pemadatanpost_tokens: Jumlah token perkiraan setelah pemadatanerror: Pesan kesalahan saat pemadatan gagalprecompute_reuse: Hanya diatur saattriggeradalah"manual". Auto-compaction dapat menyiapkan ringkasan di latar belakang sebelum jendela konteks penuh, dan atribut ini mencatat apakah/compactmenggunakan kembali ringkasan yang disiapkan itu."hit"berarti itu digunakan kembali;"miss_custom_instructions","miss_hook", dan"miss_not_ready"memberikan alasan ringkasan segar dihitung sebagai gantinya. Memerlukan Claude Code v2.1.153 atau lebih baru
Acara subagent selesai
Dicatat saat subagent selesai dan mengembalikan hasilnya ke percakapan yang memulainya. Gunakan untuk menggabungkan penggunaan alat dan waktu run berdasarkan jenis subagent; untuk rollup token atau biaya, gunakan penghitung token dan penghitung biaya yang disaring ke query_source "subagent", karena total_tokens acara ini hanya mencakup permintaan akhir. Kategori "subagent" juga menghitung permintaan dari hooks berbasis agen, yang tidak memancarkan acara subagent.
Nama Acara: claude_code.subagent_completed
Atribut:
- Semua atribut standar
event.name:"subagent_completed"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiagent_type: Jenis subagent. Nama agen built-in dan agen dari plugin marketplace resmi muncul verbatim; nama agen lainnya diganti dengan"custom"kecualiOTEL_LOG_TOOL_DETAILS=1diaturagent.source: Tempat definisi agen berasal:built-in,plugin, atau sumber pengaturan yang mendefinisikan agen khusus, sepertiuserSettingsatauprojectSettingsis_built_in: Apakah subagent adalah jenis agen built-inis_async: Apakah subagent berjalan di latar belakangtotal_tokens: Jejak token permintaan API akhir subagent: token input, pembuatan cache, pembacaan cache, dan output permintaan itu, kira-kira ukuran konteks subagent saat selesai. Bukan jumlah di seluruh runtotal_tool_uses: Jumlah panggilan alat yang dibuat subagent di seluruh runduration_ms: Waktu run dalam milidetikmodel: Model yang diselesaikan subagent untuk dijalankanfinal_model: Model yang menghasilkan respons akhir subagent, yang berbeda darimodelsetelah switch mid-run seperti fallback. Memerlukan Claude Code v2.1.212 atau lebih barumodel_swapped: Apakah lebih dari satu model melayani permintaan subagent. Memerlukan Claude Code v2.1.212 atau lebih baruplugin_id_hash,plugin.name: Ada untuk agen yang disediakan plugin. Nama plugin marketplace resmi muncul verbatim; nama plugin lainnya diganti dengan"third-party"kecualiOTEL_LOG_TOOL_DETAILS=1diatur
Acara survei umpan balik
Dicatat saat survei kualitas sesi ditampilkan atau dijawab. Lihat Survei kualitas sesi untuk mengetahui apa yang dikumpulkan survei dan cara mengontrolnya.
Nama Acara: claude_code.feedback_survey
Atribut:
- Semua atribut standar
event.name:"feedback_survey"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesievent_type: Acara siklus hidup survei, misalnya"appeared","responded", atau"transcript_prompt_appeared"appearance_id: ID unik yang menghubungkan acara yang dipancarkan untuk satu instance surveisurvey_type: Survei mana yang menghasilkan acara."session"adalah prompt rating "Bagaimana Claude melakukannya?"response: Pilihan pengguna pada acararespondedenabled_via_override:truesaatCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELdiatur. Dipancarkan sebagai boolean, bukan string. Hadir pada acara surveisession. Filter pada atribut ini untuk mengkonfirmasi override diterapkan di seluruh armada
Acara penyapuan retensi
Dicatat sekali per run penyapuan pembersihan retensi, yang menghapus transkrip sesi dan data aplikasi lainnya yang lebih lama dari pengaturan cleanupPeriodDays. Claude Code menjalankan penyapuan di latar belakang paling banyak sekali per sesi, dan run yang tidak menghapus apa pun masih memancarkan acara. Jika Claude Code menjalankan penyapuan dalam sesi apa pun di mesin yang sama dalam 24 jam terakhir, itu menunda penyapuan sesi ini setidaknya 10 menit, jadi sesi yang keluar lebih cepat tidak memancarkan apa pun. Saat Anda menjalankan claude -p dengan --bare, Claude Code tidak menjalankan penyapuan dan tidak memancarkan apa pun.
Seperti setiap acara OTel di halaman ini, itu hanya pergi ke backend telemetri yang Anda konfigurasi. Memerlukan Claude Code v2.1.227 atau lebih baru.
Saat Claude Code tidak dapat dengan aman menentukan periode retensi, itu menghentikan penyapuan dan memancarkan acara dengan result diatur ke "skipped" dan skip_reason. Saat pengaturan terkelola menetapkan cleanupPeriodDays, nilai terkelola menjepit periode retensi dan penyapuan berjalan bahkan saat file pengaturan dalam cakupan prioritas lebih rendah rusak atau tidak valid. Saat managed-settings.json itu sendiri tidak dapat dibaca, Claude Code masih menghentikan penyapuan kecuali tingkat terkelola memasok cleanupPeriodDays dari tempat lain, seperti pengaturan terkelola server atau drop-in managed-settings.d/ di samping file yang rusak. Atribut penghitung penghapusan ada hanya saat result adalah "complete".
Nama Acara: claude_code.retention_sweep
Atribut:
- Semua atribut standar
event.name:"retention_sweep"event.timestamp: Stempel waktu ISO 8601event.sequence: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesiresult:"complete"saat penyapuan berjalan,"skipped"saat Claude Code menghentikannyaperiod_days: NilaicleanupPeriodDaysdari pengaturan yang digabungkan, dalam hari, atau30saat tidak ada sumber yang menetapkannya. Pada acara yang dilewati, nilai yang akan digunakan penyapuan, dihitung dari sumber pengaturan yang dapat dibaca Claude Codeused_default:"true"saat tidak ada sumber pengaturan yang dapat dibaca yang menetapkancleanupPeriodDays,"false"sebaliknya. Pada acara lengkap,"true"berarti default 30 hari diterapkanskip_reason: Mengapa Claude Code menghentikan penyapuan. Ada hanya saatresultadalah"skipped":"user_source_disabled": Pengaturan pengguna dikecualikan, misalnya oleh flag--setting-sourcesatau opsisettingSourcesSDK, dan tidak ada sumber yang diaktifkan yang menyediakancleanupPeriodDays"settings_unknowable": File pengaturan tidak dapat dibaca atau diuraikan, jadicleanupPeriodDaysataudesktopSessionCleanupPeriodDaysmungkin diatur ke nilai yang tidak dapat dilihat Claude Code"settings_invalid_key_set": Pengaturan memiliki kesalahan validasi dancleanupPeriodDaysataudesktopSessionCleanupPeriodDayssecara eksplisit diatur, jadi fallback ke default dapat menghapus atau menyimpan file terhadap pengaturan itu
transcripts_deleted: Jumlah transkrip sesi, file~/.claude/projects/*/*.jsonltingkat atas, yang dihapus penyapuantranscripts_exempted_desktop: Jumlah transkrip melewati periode retensi yang disimpan penyapuan di bawah aturan Claude Desktop dan Cowork. Ini tidak dihitung menujufiles_past_cutoff. Memerlukan Claude Code v2.1.248 atau lebih barusession_files_deleted: Jumlah artefak yang dihapus penyapuan file sesi: transkrip plus file pendamping per sesi seperti sidecars, recordings, dan hasil alatartifacts_deleted: Total item yang dihapus penyapuan di seluruh direktori data yang dicakupnya, termasuk file sesi. Beberapa penyapuan menghitung pohon direktori yang dihapus seluruhnya sebagai satu item dan beberapa pass pembersihan tidak berkontribusi pada penghitung, jadi perlakukan nilai sebagai lantai daripada hitungan file yang tepatfiles_retained_fresh: File yang diperiksa dan ditinggalkan di tempat karena masih dalam periode retensi. Hanya penyapuan per-file yang menghitung ini, jadi nilainya adalah lantai; nilai bukan nol adalah keadaan tunak normalfiles_past_cutoff: File yang lebih lama dari periode retensi yang gagal dihapus penyapuan, misalnya karena kesalahan izin atau file yang dipegang terbuka. Nilai di atas nol berarti file melampaui periode retensi yang dikonfigurasi; nol bukan bukti bahwa tidak ada, karena penghapusan yang gagal dari seluruh direktori dihitung menujuerror_countsebagai gantinyaerror_count: Jumlah kesalahan yang dihadapi penyapuan saat membuat daftar atau menghapus file
Menafsirkan data metrik dan acara
Metrik dan acara yang diekspor mendukung berbagai analisis:
Pemantauan penggunaan
| Metrik | Peluang Analisis |
|---|---|
claude_code.token.usage |
Pecahkan berdasarkan type (input/output), pengguna, tim, model, skill.name, plugin.name, atau agent.name |
claude_code.session.count |
Lacak adopsi dan keterlibatan dari waktu ke waktu |
claude_code.lines_of_code.count |
Ukur produktivitas dengan melacak penambahan dan penghapusan kode, dipecah berdasarkan model |
claude_code.commit.count & claude_code.pull_request.count |
Pahami dampak pada alur kerja pengembangan |
Pemantauan biaya
Metrik claude_code.cost.usage membantu dengan:
- Melacak tren penggunaan di seluruh tim atau individu
- Mengidentifikasi sesi penggunaan tinggi untuk optimasi
- Atribusi pengeluaran ke skill, plugin, atau jenis subagent tertentu melalui atribut
skill.name,plugin.name, danagent.name
Metrik biaya adalah perkiraan. Untuk data penagihan resmi, lihat penyedia API Anda (Claude Console, Amazon Bedrock, atau Google Cloud's Agent Platform).
Claude Code menghitung setiap respons streaming terhadap metrik biaya dan token tepat sekali, termasuk ketika gateway atau proxy di belakang ANTHROPIC_BASE_URL melakukan streaming penggunaan secara progresif di beberapa frame. Sebelum v2.1.214, stream yang membawa penggunaan di lebih dari satu frame menginflasi claude_code.cost.usage dan claude_code.token.usage dengan kira-kira satu permintaan penuh tambahan per frame tambahan.
Peringatan dan segmentasi
Peringatan umum untuk dipertimbangkan:
- Lonjakan biaya
- Konsumsi token yang tidak biasa
- Volume sesi tinggi dari pengguna tertentu
Semua metrik dapat disegmentasikan berdasarkan atribut standar. Atribut model tersedia pada claude_code.token.usage, claude_code.cost.usage, dan dari v2.1.172, claude_code.lines_of_code.count.
Rincian per-model dari commit hanya dapat didekati dengan menggabungkan terhadap metrik token atau biaya pada session.id, karena satu sesi dapat mencakup beberapa model. Filter sisi token atau biaya ke baris di mana query_source adalah "main" sehingga permintaan auxiliary dan subagent tidak mengatribusikan commit sesi ke model yang tidak membuatnya.
Deteksi kelelahan retry
Claude Code mencoba ulang permintaan API yang gagal secara internal dan hanya memancarkan acara claude_code.api_error tunggal setelah menyerah, jadi acara itu sendiri adalah sinyal terminal untuk permintaan tersebut. Upaya retry perantara tidak dicatat sebagai acara terpisah.
Atribut attempt pada acara mencatat berapa banyak upaya yang dilakukan secara total. CLAUDE_CODE_MAX_RETRIES default ke 10 dan dibatasi pada 15. Pada v2.1.199 atau lebih baru, Anda dapat mengatur CLAUDE_CODE_RETRY_WATCHDOG untuk menaikkan default dan menghapus batas.
Ketika permintaan menghabiskan semua retry pada kesalahan transien, attempt sama dengan satu lebih dari batas efektif tersebut: 11 secara default, dan tidak pernah lebih dari 16 kecuali watchdog diatur. Nilai yang lebih rendah menunjukkan kesalahan yang tidak dapat dicoba ulang seperti respons 400, atau penyebab dengan anggaran retry yang lebih kecil. Misalnya, Claude Code mencoba ulang kegagalan untuk memuat kredensial AWS atau Google Cloud paling banyak dua kali.
Untuk membedakan sesi yang pulih dari sesi yang terhenti, kelompokkan acara berdasarkan session.id dan periksa apakah acara api_request yang lebih baru ada setelah kesalahan.
Analisis acara
Data acara memberikan wawasan terperinci tentang interaksi Claude Code:
Pola Penggunaan Alat: analisis acara hasil alat untuk mengidentifikasi:
- Alat yang paling sering digunakan
- Tingkat keberhasilan alat
- Waktu eksekusi alat rata-rata
- Pola kesalahan berdasarkan jenis alat
Pemantauan Kinerja: lacak durasi permintaan API dan waktu eksekusi alat untuk mengidentifikasi hambatan kinerja.
Audit acara keamanan
Acara OpenTelemetry adalah sumber data audit untuk aktivitas Claude Code. Setiap acara membawa atribut identitas yang menghubungkan panggilan alat, aktivitas MCP, dan keputusan izin kembali ke pengguna yang memicunya. Pengekspor log OTLP dapat mengirimkan acara ini ke platform Security Information and Event Management (SIEM) apa pun dengan penerima OTLP, atau ke OpenTelemetry Collector yang meneruskan ke SIEM Anda.
Atribut tindakan untuk pengguna
Atribut standar pada setiap acara mencakup identitas pengguna yang diautentikasi: user.email, user.account_uuid, user.account_id, dan organization.id saat masuk dengan akun Claude atau, dalam sesi cloud, ketika kredensial sesi itu sendiri membawanya, ditambah user.id dan session.id per-sesi. user.id adalah pengidentifikasi berskop instalasi, kecuali pada sesi Claude apps gateway, di mana ini adalah subjek IdP dari token yang dikeluarkan gateway.
Panggilan alat MCP, perintah Bash, dan pengeditan file oleh karena itu dikaitkan dengan pengembang yang memulai sesi. Claude Code tidak bertindak di bawah akun layanan terpisah; identitas yang dicatat pada setiap acara adalah akun Claude pengembang itu sendiri, atau identitas IdP pengembang pada sesi Claude apps gateway.
Saat Claude Code diautentikasi dengan kunci API langsung, atau terhadap Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry, tidak ada akun Claude dalam sesi dan hanya user.id dan session.id yang diisi. Dalam penerapan ini, lampirkan identitas pengguna sendiri dengan OTEL_RESOURCE_ATTRIBUTES, atur per pengguna melalui file pengaturan terkelola atau pembungkus peluncuran. Sesi Claude apps gateway tidak memerlukan apa pun dari ini: CLI mencap identitas IdP secara otomatis, seperti yang dijelaskan dalam Atribut standar.
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
Audit aktivitas MCP
Untuk menangkap aktivitas server MCP dengan detail panggilan lengkap, aktifkan pengekspor log dan atur OTEL_LOG_TOOL_DETAILS=1. Setiap operasi MCP kemudian menghasilkan acara terstruktur yang membawa nama server, nama alat, dan argumen panggilan bersama atribut identitas standar:
| Acara | Apa yang dicatat untuk MCP |
|---|---|
mcp_server_connection |
Server terhubung, terputus, dan kegagalan koneksi dengan server_name, transport_type, server_scope, dan detail kesalahan |
tool_result |
Setiap panggilan alat MCP dengan tool_name dan mcp_server_scope, muatan tool_parameters yang berisi mcp_server_name dan mcp_tool_name, dan muatan tool_input yang berisi argumen panggilan |
tool_decision |
Apakah panggilan diizinkan atau ditolak, apakah keputusan berasal dari config, hook, atau pengguna, dan muatan tool_parameters yang berisi mcp_server_name dan mcp_tool_name |
Tanpa OTEL_LOG_TOOL_DETAILS, acara ini menghilangkan detail pengidentifikasi:
tool_result: menyimpanmcp_server_scopedantool_namediredaksi ke literal"mcp_tool"untuk server yang dikonfigurasi pengguna, menghilangkan konten argumen. Untuk server bawaan Claude Desktop, dalam sesi yang dimiliki Claude Desktop, ini juga menyimpan pasanganmcp_server_name/mcp_tool_namedi dalamtool_parameters, pengecualian yang sama yang dipengaruhi host sepertitool_decision, memerlukan Claude Code v2.1.214 atau lebih barutool_decision: menyimpantool_sourcedantool_namediredaksi ke literal"mcp_tool"untuk server yang dikonfigurasi pengguna, menghilangkan konten argumen. Untuk server bawaan Claude Desktop, dalam sesi yang dimiliki Claude Desktop, ini juga menyimpan pasanganmcp_server_name/mcp_tool_namedi dalamtool_parameters;tool_sourcedan pasangan nama keduanya memerlukan Claude Code v2.1.214 atau lebih barumcp_server_connection: menghilangkanserver_namedan pesan kesalahan, tetapi menyimpanis_plugin,plugin_id_hash, danplugin.name, dengan nama plugin non-Anthropic diredaksi ke literal"third-party", sehingga server yang disediakan plugin tetap dapat dibedakan tanpa pencatatan terperinci
Peta pertanyaan keamanan ke acara
Saat membangun aturan deteksi, cari sinyal yang ingin Anda pantau dan kueri backend Anda untuk acara dan atribut yang sesuai:
| Sinyal | Acara | Atribut Kunci |
|---|---|---|
| Panggilan alat diizinkan atau ditolak, dan oleh apa | tool_decision |
decision, source, tool_name, tool_parameters |
| Eskalasi mode izin | permission_mode_changed |
from_mode, to_mode, trigger |
| Hook kebijakan memblokir tindakan | hook_execution_complete |
hook_event, num_blocking |
| Login, logout, dan kegagalan autentikasi | auth |
action, success, error_category |
| Server MCP terhubung atau gagal | mcp_server_connection |
status, server_name, is_plugin, error_code |
| Plugin diinstal dan sumbernya | plugin_installed |
plugin.name, marketplace.name, marketplace.is_official |
| Perintah yang dijalankan dan file yang disentuh | tool_result (dieksekusi) atau tool_decision (ditolak) dengan OTEL_LOG_TOOL_DETAILS=1 |
tool_parameters; tool_input (tool_result saja) |
Claude Code memancarkan aliran acara mentah saja. Deteksi anomali, baselining, korelasi lintas sesi, dan peringatan adalah tanggung jawab backend SIEM atau observabilitas Anda.
Kirim acara ke SIEM
Arahkan OTEL_EXPORTER_OTLP_LOGS_ENDPOINT ke penerima OTLP SIEM Anda, atau ke OpenTelemetry Collector yang meneruskan ke API ingest asli SIEM Anda. Contoh pengaturan terkelola berikut mengekspor acara saja, dengan detail alat lengkap diaktifkan untuk audit MCP dan 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"
}
}
Untuk mengonfirmasi acara tiba, kirimkan prompt dalam sesi yang berjalan di bawah konfigurasi ini dan periksa SIEM Anda untuk acara claude_code.user_prompt. Jika tidak ada yang tiba, jalankan claude --debug dan periksa log debug untuk kesalahan ekspor [3P telemetry].
Pertimbangan backend
Pilihan backend metrik, log, dan traces Anda menentukan jenis analisis yang dapat Anda lakukan:
Untuk metrik
- Database deret waktu: Perhitungan laju, metrik agregat
- Toko kolumnar: Kueri kompleks, analisis pengguna unik
- Platform observabilitas lengkap: Kueri lanjutan, visualisasi, peringatan
Untuk acara/log
- Sistem agregasi log: Pencarian teks lengkap, analisis log
- Toko kolumnar: Analisis acara terstruktur
- Platform observabilitas lengkap: Korelasi antara metrik dan acara
Untuk traces
Pilih backend yang mendukung penyimpanan distributed trace dan korelasi span:
- Sistem distributed tracing: Visualisasi span, request waterfalls, analisis latensi
- Platform observabilitas lengkap: Pencarian trace dan korelasi dengan metrik dan log
Untuk organisasi yang memerlukan metrik Pengguna Aktif Harian/Mingguan/Bulanan (DAU/WAU/MAU), pertimbangkan backend yang mendukung kueri nilai unik yang efisien.
Informasi layanan
Semua metrik dan acara diekspor dengan atribut sumber daya berikut:
service.name:claude-codeuntuk sesi terminal,claude-code-desktopuntuk sesi yang dimulai dari tab Code di aplikasi Claude Desktopservice.version: Versi Claude Code saat ini, atau versi aplikasi Desktop untuk sesi tab Codeos.type: Jenis sistem operasi (misalnya,linux,darwin,windows)os.version: String versi sistem operasihost.arch: Arsitektur host (misalnya,amd64,arm64)wsl.version: Nomor versi WSL (hanya ada saat berjalan di Windows Subsystem for Linux)- Nama Meter:
com.anthropic.claude_code
Jika pipeline pengumpul atau dasbor Anda memfilter pada service.name = claude-code, tambahkan claude-code-desktop ke filter untuk juga menangkap telemetri dari sesi tab Code.
Sumber daya pengukuran ROI
Untuk panduan komprehensif tentang mengukur pengembalian investasi untuk Claude Code, termasuk pengaturan telemetri, analisis biaya, metrik produktivitas, dan pelaporan otomatis, lihat Panduan Pengukuran ROI Claude Code. Repositori ini menyediakan konfigurasi Docker Compose siap pakai, pengaturan Prometheus dan OpenTelemetry, dan template untuk menghasilkan laporan produktivitas yang terintegrasi dengan alat seperti Linear.
Keamanan dan privasi
- Ekspor OpenTelemetry ke backend Anda adalah opt-in dan memerlukan konfigurasi eksplisit. Untuk telemetri operasional terpisah Anthropic dan cara menonaktifkannya, lihat Penggunaan data
- Konten file mentah dan cuplikan kode tidak disertakan dalam metrik atau acara. Trace spans adalah jalur data terpisah: lihat poin
OTEL_LOG_TOOL_CONTENTdi bawah - Saat diautentikasi melalui OAuth,
user.emaildisertakan dalam atribut telemetri, dikirim hanya ke titik akhir OTel yang Anda konfigurasikan, tidak pernah ke Anthropic. Jika ini menjadi perhatian bagi organisasi Anda, bekerja dengan backend telemetri Anda untuk memfilter atau menyunting bidang ini - Konten prompt pengguna tidak dikumpulkan secara default. Hanya panjang prompt yang dicatat. Untuk menyertakan konten prompt, atur
OTEL_LOG_USER_PROMPTS=1 - Teks respons asisten tidak dikumpulkan secara default. Hanya panjang respons yang dicatat. Untuk menyertakan teks respons, atur
OTEL_LOG_ASSISTANT_RESPONSES=1. Seperti semua data OpenTelemetry dari Claude Code, teks respons dikirim hanya ke titik akhir OTel yang Anda konfigurasikan, tidak pernah ke Anthropic. Ketika variabel ini tidak diatur,OTEL_LOG_USER_PROMPTSdigunakan sebagai fallback, jadi aturOTEL_LOG_ASSISTANT_RESPONSES=0jika Anda menginginkan konten prompt tanpa konten respons - Argumen input alat dan parameter tidak dicatat secara default. Untuk menyertakannya, atur
OTEL_LOG_TOOL_DETAILS=1. Untuk server bawaan Claude Desktop, dalam sesi yang dimiliki Claude Desktop,tool_decisiondantool_resultmembawa pasanganmcp_server_name/mcp_tool_name, nama yang ditulis host daripada konten argumen, bahkan dengan flag mati. Pengecualian memerlukan Claude Code v2.1.214 atau lebih baru. Data ini dikirim hanya ke titik akhir OTEL yang Anda konfigurasikan, tidak pernah ke Anthropic. Argumen mungkin masih berisi nilai sensitif, jadi konfigurasikan backend telemetri Anda untuk memfilter atau menyunting atribut ini sesuai kebutuhan. Saat diaktifkan:- Acara
tool_resultdantool_decisionmenyertakan atributtool_parametersdengan perintah Bash, nama server MCP dan alat, dan nama skill. Bidang sepertifull_commanddipancarkan tanpa pemotongan - Acara
tool_resultjuga menyertakan atributtool_inputdengan jalur file, URL, pola pencarian, dan argumen lainnya. Nilai individual di atas 512 karakter dipotong dan total dibatasi hingga ~4 K karakter - Acara
user_promptmenyertakancommand_nameverbatim untuk perintah custom, plugin, dan MCP - Trace spans menyertakan atribut
tool_inputyang sama dan atribut yang diturunkan dari input sepertifile_path, dengan pemotongan yang sama dengantool_input
- Acara
- Konten input dan output alat tidak dicatat dalam trace spans secara default. Untuk menyertakannya, atur
OTEL_LOG_TOOL_CONTENT=1. Saat diaktifkan, acara span menyertakan konten input dan output alat lengkap dipotong pada batas konten (60 KB secara default) per atribut. Ini dapat mencakup konten file mentah dari hasil alat Read dan output perintah Bash. Konfigurasikan backend telemetri Anda untuk memfilter atau menyunting atribut ini sesuai kebutuhan - Badan permintaan dan respons API Anthropic Messages mentah tidak dicatat secara default. Untuk menyertakannya, atur
OTEL_LOG_RAW_API_BODIESdi shell, pengaturan pengguna, atau pengaturan terkelola Anda. Ini diabaikan dalam pengaturan proyek dan lokal. Badan berisi riwayat percakapan lengkap, termasuk system prompt, setiap giliran pengguna dan asisten sebelumnya, dan hasil alat, jadi mengaktifkan ini menyiratkan persetujuan untuk semua yang akan diungkapkan oleh flag kontenOTEL_LOG_*lainnya. Claude Code selalu menyunting konten extended-thinking Claude dari badan ini, terlepas dari pengaturan lain. Nilai yang Anda atur menentukan bagaimana Claude Code mengirimkan badan:- Dengan
=1, Claude Code memancarkan acara logapi_request_bodydanapi_response_bodyuntuk setiap panggilan API. Atributbodyacara membawa muatan yang diserialisasi JSON, dipotong pada batas konten (60 KB secara default) - Dengan
=file:<dir>, Claude Code menulis badan yang tidak dipotong ke file.request.jsondan.response.jsondi bawah direktori tersebut, dan acara membawa jalurbody_refsebagai gantinya dari badan inline. Kirim direktori dengan pengumpul log atau sidecar daripada melalui aliran telemetri
- Dengan
Memantau Claude Code di Amazon Bedrock
Untuk panduan pemantauan penggunaan Claude Code terperinci untuk Amazon Bedrock, lihat Claude Code Monitoring Implementation (Amazon Bedrock).