SpyBara
Go Premium

monitoring-usage.md 2026-11-11 22:59 UTC to 2026-11-12 23:02 UTC

No changes for this document in this history range.

2026
Mon 2 23:57 Tue 3 23:58 Tue 10 21:57 Wed 11 22:59

Pemantauan

Pelajari cara mengaktifkan dan mengonfigurasi OpenTelemetry untuk Claude Code.

Lacak penggunaan Claude Code, biaya, dan aktivitas tool 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 OpenTelemetry.

[!NOTE]

Untuk Claude API atau Managed Agents, lihat OpenTelemetry untuk Claude API.

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 Code dengan claude --debug-file <path> dan periksa log yang ditulisnya ke jalur tersebut. 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"
  }
}

Dalam aplikasi Claude Desktop, sesi tab Code membaca pengaturan terkelola ini dari sumber yang menjangkau setiap jenis sesi Desktop. Formulir OpenTelemetry untuk Cowork di bawah Monitoring dalam pengaturan Data dan privasi konsol admin berlaku hanya untuk sesi Cowork, jadi baik CLI terminal maupun tab Code tidak mengekspor ke kolektor yang Anda tetapkan di sana.

Claude Code mengabaikan variabel pengekspor OpenTelemetry dalam .claude/settings.json dan .claude/settings.local.json repositori, jadi repositori tidak dapat menggunakannya untuk menghidupkan telemetri, memilih ke mana telemetri pergi, atau menangkap konten. Atur variabel tersebut dalam pengaturan terkelola, atau biarkan setiap pengembang mengaturnya dalam shell atau ~/.claude/settings.json mereka. Repositori masih dapat mematikan sinyal dengan menetapkan pemilih pengekspor, seperti OTEL_LOGS_EXPORTER, ke none, kecuali pengaturan terkelola, file --settings, atau lingkungan tempat Anda memulai Claude Code menetapkan variabel tersebut.

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 dalam debug log. 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, atau OTEL_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, dan OTEL_TRACES_EXPORTER beta 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_EXPORTER mengikuti 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_ENDPOINT alih-alih melalui pengekspor log dan jejak. Claude Code oleh karena itu menghapus BETA_TRACING_ENDPOINT yang 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_TELEMETRY dimatikan

    Titik akhir atau kredensial khusus metrik tidak menghapusnya. Sebelum v2.1.251, BETA_TRACING_ENDPOINT yang 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 eksporter, endpoint, dan perilaku ekspor untuk semua deployment.

Jika Anda menetapkan variabel endpoint atau protokol per-sinyal, seperti OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code menggunakannya sebagai pengganti 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 eksporter metrik, dipisahkan koma. Gunakan none untuk menonaktifkan console, otlp, prometheus, none
OTEL_LOGS_EXPORTER Jenis eksporter log/event, dipisahkan koma. Gunakan none untuk menonaktifkan console, otlp, none
OTEL_EXPORTER_OTLP_PROTOCOL Protokol untuk eksporter OTLP, berlaku untuk semua sinyal. Claude Code tidak memiliki protokol default, jadi atur ini atau variabel protokol spesifik sinyal untuk setiap eksporter otlp yang Anda aktifkan grpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT Endpoint kolektor 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 Endpoint 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 Endpoint 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, digabung dengan header umum Authorization=Bearer token
OTEL_EXPORTER_OTLP_LOGS_HEADERS Header autentikasi untuk log, digabung 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 event assistant_response (default: dinonaktifkan). Ketika tidak diatur, kembali ke nilai OTEL_LOG_USER_PROMPTS 1 untuk mengaktifkan, 0 untuk tetap disembunyikan
OTEL_LOG_TOOL_DETAILS Aktifkan pencatatan parameter alat dan argumen input dalam event alat dan atribut span jejak: perintah Bash, nama server dan alat MCP, nama skill, nama workflow yang ditulis pengguna, dan input alat. Juga mengaktifkan nama perintah kustom, plugin, dan MCP pada event user_prompt, dan nama asli agen, skill, plugin, dan server serta nama alat MCP pada penghitung biaya dan token (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 alat dalam tool.output span event (default: dinonaktifkan). Atribut span membawa konten alat di bawah gerbang mereka sendiri. Memerlukan tracing. Konten dipotong pada batas konten (60 KB secara default) 1 untuk mengaktifkan
OTEL_LOG_MANAGED_SETTINGS Tambahkan pengaturan terkelola yang disembunyikan, dan digest SHA-256 dari pengaturan sebelum penyembunyian, ke event managed settings resolved (default: dinonaktifkan). Nilai dalam pengaturan proyek atau lokal tidak mengaktifkannya. Memerlukan Claude Code v2.1.274 atau lebih baru 1 untuk mengaktifkan
OTEL_LOG_RAW_API_BODIES Pancarkan permintaan dan respons JSON API Pesan Anthropic lengkap sebagai event log api_request_body / api_response_body (default: dinonaktifkan). Badan mencakup seluruh riwayat percakapan. Mengaktifkan ini menyiratkan persetujuan untuk semua yang OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS, dan OTEL_LOG_TOOL_CONTENT akan ungkapkan 1 untuk badan inline yang dipotong pada batas konten (60 KB secara default), atau file:<dir> untuk badan yang tidak dipotong di disk dengan pointer body_ref dalam event
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH Batas konten: panjang maksimum atribut yang membawa konten seperti respons model, konten tool, system prompt, 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. Ketika 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 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.

Autentikasi mTLS

Cara Anda mengonfigurasi sertifikat klien untuk eksporter OTLP tergantung pada protokol OTLP yang digunakan untuk sinyal tersebut, diatur melalui OTEL_EXPORTER_OTLP_PROTOCOL atau penggantian spesifik sinyal. Konfigurasi yang sama berlaku untuk metrik, log, dan jejak.

Protokol Variabel sertifikat klien Percayai CA kolektor 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 spesifik 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 spesifik sinyal terus berfungsi. Pada mesin dengan pengaturan terkelola, Claude Code dapat menghapus kredensial dan endpoint spesifik sinyal yang ditetapkan pengembang saat startup.

Kontrol kardinalitas metrik

Environment variable berikut mengontrol atribut mana yang disertakan dalam metrik dan event untuk mengelola kardinalitas:

Variabel Lingkungan Deskripsi Nilai Default Contoh untuk Menonaktifkan
OTEL_METRICS_INCLUDE_SESSION_ID Sertakan atribut session.id dan, pada sesi cloud, ccr.session.id dalam metrik dan event true false
OTEL_METRICS_INCLUDE_VERSION Sertakan atribut app.version dalam metrik dan event false true
OTEL_METRICS_INCLUDE_ACCOUNT_UUID Sertakan atribut user.account_uuid dan user.account_id dalam metrik dan event true false
OTEL_METRICS_INCLUDE_ENTRYPOINT Sertakan atribut app.entrypoint dalam metrik dan event false true
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES Sertakan kunci dari OTEL_RESOURCE_ATTRIBUTES sebagai atribut pada titik data metrik dan event true false
OTEL_METRICS_INCLUDE_REPOSITORY Sertakan atribut identitas repositori vcs.* repository identity attributes pada metrik dan event. Memerlukan Claude Code v2.1.269 atau lebih baru false true

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 span yang menghubungkan setiap prompt pengguna ke permintaan API dan eksekusi alat yang dipicunya, sehingga Anda dapat melihat permintaan lengkap sebagai jejak tunggal 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 span dikirim. Traces menggunakan kembali konfigurasi OTLP umum untuk endpoint, protokol, header, dan mTLS. Pada mesin dengan pengaturan terkelola, Claude Code dapat menghapus kredensial dan endpoint spesifik 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 eksporter jejak, dipisahkan koma. Gunakan none untuk menonaktifkan console, otlp, none
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL Protokol untuk jejak, menimpa OTEL_EXPORTER_OTLP_PROTOCOL grpc, http/json, http/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT Endpoint jejak OTLP, menimpa OTEL_EXPORTER_OTLP_ENDPOINT http://localhost:4318/v1/traces
OTEL_EXPORTER_OTLP_TRACES_HEADERS Header autentikasi untuk jejak, digabung dengan OTEL_EXPORTER_OTLP_HEADERS Authorization=Bearer token
OTEL_TRACES_EXPORT_INTERVAL Interval ekspor batch span dalam milidetik (default: 5000) 1000, 10000

Span menyembunyikan 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.

Ketika tracing aktif, subproses Bash dan PowerShell secara otomatis mewarisi variabel lingkungan TRACEPARENT yang berisi konteks jejak W3C dari span eksekusi alat yang aktif. Ini memungkinkan subproses apa pun yang membaca TRACEPARENT untuk membuat span-nya sendiri sebagai anak dari jejak yang sama, memungkinkan distributed tracing end-to-end melalui skrip dan perintah yang Claude jalankan.

Ketika 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 span sisi klien Claude Code ke jejak sisi server melalui perantara yang sesuai. Permintaan HTTP MCP keluar 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 ketika 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 jejak 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 melewatkan konteks jejak W3C aktifnya ke subproses sehingga span Claude Code muncul sebagai anak dari jejak distributed pemanggil. Sesi interaktif mengabaikan TRACEPARENT masuk untuk menghindari secara tidak sengaja mewarisi nilai ambient dari lingkungan CI atau kontainer.

Konteks jejak masuk juga berlaku untuk event. Dalam sesi Agent SDK dan -p dengan TRACEPARENT diatur, setiap catatan log event OTLP membawa nilai trace_id dan span_id yang menghubungkannya ke jejak aplikasi Anda, bahkan ketika eksporter jejak tidak dikonfigurasi, sehingga backend logging Anda dapat mengorelasikan event dengan sisa jejak.

Catatan yang dipancarkan saat interaksi aktif membawa ID span interaksi, bahkan ketika Claude Code memancarkannya di luar konteks async span, seperti dalam callback permintaan izin atau untuk catatan yang di-buffer selama startup dan diekspor nanti. Catatan yang dipancarkan tanpa span interaksi aktif membawa ID TRACEPARENT masuk secara langsung.

Hierarki span

Setiap prompt pengguna memulai span root claude_code.interaction. Panggilan API, panggilan alat, dan eksekusi hook dicatat sebagai anak-anaknya. Span 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 warisan, memunculkan subagen, span API dan alat subagen bersarang di bawah span claude_code.tool induk.

claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook                    (requires 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 ketika TRACEPARENT diatur dalam lingkungan.

Ketika hook PreToolUse menunda panggilan alat, Claude Code menyimpan konteks jejak dari giliran yang menundanya. Ketika Anda melanjutkan sesi dan alat berjalan kembali, span alat bergabung dengan jejak 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. Span llm_request, tool.execution, dan hook menetapkan status OpenTelemetry ERROR ketika mereka mencatat kegagalan; span lainnya selalu berakhir dengan status UNSET.

claude_code.interaction

Atribut Deskripsi Gerbang oleh
user_prompt Teks prompt. Nilai adalah <REDACTED> kecuali gerbang diatur OTEL_LOG_USER_PROMPTS
user_prompt_length Panjang prompt dalam karakter
interaction.sequence Penghitung berbasis 1 dari interaksi, dihitung per proses Claude Code daripada per sesi, seperti yang dijelaskan untuk event.sequence
parent.source Bagaimana span mendapat induk jejak: env ketika itu induk di bawah TRACEPARENT masuk, none ketika itu memulai jejak sendiri. Memerlukan Claude Code v2.1.268 atau lebih baru
interaction.duration_ms Durasi wall-clock dari giliran

claude_code.llm_request

Atribut Deskripsi Gerbang oleh
model Pengenal 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 subagen ENABLE_BETA_TRACING_DETAILED
query_source_safe Bentuk terbatas dari query_source, dipancarkan apakah atau tidak tracing beta terperinci aktif, dengan nilai seperti repl_main_thread atau agent.builtin.general-purpose. : menjadi . dan agen bernama pengguna muncul sebagai agent.custom. Memerlukan Claude Code v2.1.268 atau lebih baru
agent_id Pengenal subagen atau rekan kerja yang mengeluarkan permintaan. Tidak ada pada sesi utama
parent_agent_id Pengenal agen yang memunculkan yang ini. Tidak ada untuk sesi utama dan untuk agen yang dimunculkan langsung darinya
workflow.run_id Pengenal jalankan dari alat Workflow yang memunculkan agen ini, dengan awalan wf_. Tidak ada untuk agen yang tidak dimunculkan oleh workflow
workflow.name Nama workflow yang memunculkan agen ini. Nama yang ditulis pengguna diganti dengan custom kecuali gerbang diatur OTEL_LOG_TOOL_DETAILS
speed fast atau normal
effort Tingkat upaya yang diterapkan pada permintaan: low, medium, high, xhigh, atau max. Tidak ada ketika Claude Code tidak mengirim tingkat upaya, misalnya pada model yang tidak mendukung upaya. Memerlukan Claude Code v2.1.274 atau lebih baru
llm_request.context interaction, tool, atau standalone tergantung pada span induk
duration_ms Durasi wall-clock termasuk percobaan ulang
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. Tidak termasuk token yang dibaca dari atau ditulis ke cache prompt, yang dilaporkan dalam cache_read_tokens dan cache_creation_tokens
output_tokens Jumlah token output
cache_read_tokens Token yang dibaca dari cache prompt
cache_creation_tokens Token yang ditulis ke cache prompt
request_id ID permintaan API. Nilai yang sama dengan atribut korelasi event request_id event correlation attribute
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 ketika permintaan gagal
error Pesan kesalahan ketika permintaan gagal
error_class Token kelas kesalahan pendek ketika permintaan gagal, seperti api_timeout atau server_overload. Memerlukan Claude Code v2.1.268 atau lebih baru
response.has_tool_call true ketika 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 percobaan ulang juga dicatat sebagai event span gen_ai.request.attempt dengan atribut attempt dan client_request_id.

claude_code.tool

Atribut Deskripsi Gerbang oleh
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 bernama 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 ketika baris tidak dapat diuraikan. Memerlukan Claude Code v2.1.268 atau lebih baru
bash_argv0 Untuk alat Bash: program pertama perintah ketika itu ada 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 Pengenal subagen atau rekan kerja yang menjalankan alat. Tidak ada pada sesi utama
parent_agent_id Pengenal agen yang memunculkan yang ini. Tidak ada untuk sesi utama dan untuk agen yang dimunculkan langsung darinya
workflow.run_id Pengenal jalankan dari alat Workflow yang memunculkan agen ini, dengan awalan wf_. Tidak ada untuk agen yang tidak dimunculkan oleh workflow
workflow.name Nama workflow yang memunculkan agen ini. Nama yang ditulis pengguna diganti dengan custom kecuali gerbang diatur OTEL_LOG_TOOL_DETAILS
tool_use_id ID blok tool_use model untuk panggilan ini. Cocok dengan tool_use_id pada event tool_result dan tool_decision serta dalam payload hook, sehingga Anda dapat menghubungkan 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 subagen untuk alat Agent atau alat Task warisan OTEL_LOG_TOOL_DETAILS

tool.output span event pada claude_code.tool

Jika Anda menetapkan OTEL_LOG_TOOL_CONTENT=1, panggilan Read dan Bash dapat mencatat event span tool.output pada span claude_code.tool. Panggilan Edit dan Write mencatat satu hanya ketika Anda juga menetapkan OTEL_LOG_TOOL_DETAILS=1. Variabel itu tidak dibatasi pada kedua alat itu, jadi periksa barisnya dalam tabel konfigurasi untuk argumen yang ditambahkannya di tempat lain.

Alat MCP, WebFetch, dan WebSearch juga mencatat event ini, pada Claude Code v2.1.283 atau lebih baru.

Claude Code menulis event ini dari pengembalian sukses panggilan alat, jadi panggilan yang menimbulkan kesalahan tidak mencatat apa pun, apa pun alatnya. Di antara panggilan yang memang kembali, itu tidak mencatat event tool.output untuk:

  • Panggilan ke alat apa pun selain Read, Edit, Write, Bash, WebFetch, WebSearch, dan alat MCP
  • Read yang mengembalikan apa pun selain teks file, seperti gambar, PDF, atau pembacaan ulang file yang isinya belum berubah
  • Panggilan Edit atau Write, kecuali Anda juga menetapkan OTEL_LOG_TOOL_DETAILS=1
  • Panggilan WebFetch atau WebSearch yang Claude Code pindahkan ke latar belakang saat berjalan agar pesan yang sedang menunggu dapat mencapai Claude. Hasil yang tiba kemudian juga tidak dicatat. Untuk mengetahui kapan Claude Code memindahkan panggilan, lihat Kapan Claude Code mengirim apa yang Anda antrekan untuk terminal dan field priority untuk sesi Agent SDK

Event membawa atribut ini, masing-masing dipotong pada batas konten (60 KB secara default). Gated by menamai variabel yang atribut butuhkan di atas OTEL_LOG_TOOL_CONTENT=1, dan untuk Edit dan Write variabel itu membuka gerbang event itu sendiri daripada atribut.

Atribut Deskripsi Gerbang oleh
content Teks yang dikembalikan alat Read, atau teks yang diminta panggilan Write untuk ditulis OTEL_LOG_TOOL_DETAILS untuk alat Write
output Untuk alat Bash, output gabungan perintah, dengan stderr yang disisipi ke stdout. Untuk alat MCP, WebFetch, atau WebSearch, hasil yang dikembalikan alat: blok teks digabung dengan baris baru, dengan gambar atau dokumen diganti dengan placeholder seperti [image]
diff Patch terstruktur yang diterapkan alat Edit OTEL_LOG_TOOL_DETAILS
file_path Jalur file target untuk alat Read, Edit, dan Write, mengulangi atribut span dengan nama yang sama OTEL_LOG_TOOL_DETAILS
bash_command String perintah untuk alat Bash OTEL_LOG_TOOL_DETAILS

Atribut tool_name span induk memberi tahu Anda alat mana yang berasal dari event. Atribut yang dipotong pada batas konten disertai dengan <attribute>_truncated dan <attribute>_original_length.

claude_code.tool.blocked_on_user

Atribut Deskripsi Gerbang oleh
duration_ms Waktu yang dihabiskan menunggu keputusan izin
decision accept, reject, atau cancelled, di mana cancelled berarti Claude Code berhenti menunggu keputusan izin untuk panggilan tool tersebut dan tidak menjalankannya
source Untuk accept atau reject, asal keputusan, seperti config, hook, atau user_temporary, dengan makna yang dijelaskan di bawah Tool decision event. Untuk cancelled, hal yang mengakhiri penantian sebelum keputusan apa pun dibuat, seperti user_abort

Keputusan cancelled dengan source user_abort berarti sebuah pesan yang memerlukan pengiriman segera menginterupsi giliran saat permintaan izin atau pemeriksaan auto mode masih tertunda. Misalnya, selama pemeriksaan auto mode, pengguna memiliki pesan dalam antrean dan mengirimnya segera.

claude_code.tool.execution

Atribut Deskripsi Gerbang oleh
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 ketika eksekusi gagal, seperti Error:ENOENT atau ShellError. Berisi pesan kesalahan lengkap sebagai gantinya ketika gerbang diatur OTEL_LOG_TOOL_DETAILS
error_class Kategori kesalahan dalam bentuk pengenal, dengan karakter di luar huruf, digit, dan garis bawah diganti dengan _, seperti Error_ENOENT atau ShellError. Membawa kategori bahkan ketika error membawa pesan lengkap. Memerlukan Claude Code v2.1.268 atau lebih baru

claude_code.hook

Span ini muncul hanya ketika tracing beta terperinci aktif, yang memerlukan ENABLE_BETA_TRACING_DETAILED=1 dan BETA_TRACING_ENDPOINT, pasangan yang juga mengubah tempat log dan jejak 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, tracing beta terperinci juga memerlukan organisasi Anda untuk diizinkan untuk fitur tersebut. Sesi Agent SDK dan non-interaktif -p tidak memerlukan izin.

[!WARNING]

Atur ENABLE_BETA_TRACING_DETAILED hanya untuk debugging, bukan di produksi. Tracing beta terperinci memiliki volume ekspor yang tinggi, dan atribut kontennya bukan bagian dari skema span yang stabil.

Atribut Deskripsi Gerbang oleh
hook_event Jenis event 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 diselesaikan dengan sukses
num_blocking Jumlah hook yang mengembalikan keputusan pemblokiran
num_non_blocking_error Jumlah hook yang gagal tanpa memblokir
num_cancelled Jumlah hook yang dibatalkan sebelum penyelesaian

Atribut konten di bawah tracing beta terperinci

[!NOTE]

Atribut tambahan yang membawa konten seperti new_context, system_reminders, system_prompt_preview, user_system_prompt, tool_input, dan response.model_output dipancarkan hanya ketika tracing beta terperinci aktif. Atribut-atribut ini bukan bagian dari skema span yang stabil.

Atribut-atribut ini muncul pada span di bawah, dan Gated by menamai variabel yang dibutuhkan atribut di atas tracing beta terperinci. Nilai yang lebih panjang dari batas konten (60 KB secara default) dipotong.

Atribut Span Deskripsi Gerbang oleh
new_context claude_code.interaction Prompt pengguna OTEL_LOG_USER_PROMPTS
new_context claude_code.llm_request Pesan pengguna baru dan hasil tool yang dikirim bersama permintaan OTEL_LOG_USER_PROMPTS
system_reminders claude_code.llm_request Teks system reminder di antara pesan baru permintaan OTEL_LOG_USER_PROMPTS
system_prompt_preview claude_code.llm_request 500 karakter pertama dari system prompt lengkap yang dikirim bersama permintaan OTEL_LOG_USER_PROMPTS
user_system_prompt claude_code.llm_request Hanya teks system prompt yang Anda berikan melalui opsi SDK systemPrompt atau flag --system-prompt dan --append-system-prompt. Dipancarkan sekali per sesi daripada per permintaan OTEL_LOG_USER_PROMPTS
response.model_output claude_code.llm_request Teks respons model terhadap permintaan OTEL_LOG_USER_PROMPTS
new_context claude_code.tool Hasil panggilan tool, apa pun tool-nya OTEL_LOG_TOOL_CONTENT
tool_input claude_code.tool Input panggilan tool yang diserialisasi OTEL_LOG_TOOL_DETAILS

Di bawah tracing beta terperinci dengan OTEL_LOG_USER_PROMPTS=1, Claude Code juga memancarkan event claude_code.system_prompt yang membawa system prompt lengkap, dipotong pada batas konten. Event ini tiba pertama kali sebuah sesi mengirim setiap system prompt yang berbeda, dan lagi setelah compaction.

Header dinamis

Untuk lingkungan perusahaan yang memerlukan autentikasi dinamis, Anda dapat mengonfigurasi skrip untuk menghasilkan header secara dinamis. Header dinamis berlaku hanya untuk protokol http/protobuf dan http/json. Dengan protokol grpc, Claude Code hanya menggunakan variabel header statis, OTEL_EXPORTER_OTLP_HEADERS dan varian spesifik sinyal-nya.

Konfigurasi pengaturan

Tambahkan ke .claude/settings.json Anda, ganti 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: Multiple headers
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

Jika helper gagal atau mencetak output yang tidak memenuhi persyaratan ini, ekspor gagal dan backend telemetri Anda tidak menerima apa pun dari sesi sampai helper berfungsi lagi. Claude Code melaporkan kegagalan dalam:

  • Notifikasi peringatan dalam sesi interaktif, otelHeadersHelper failed; telemetry is not being exported, ditampilkan sekali per sesi ketika helper pertama kali gagal
  • Output /status
  • Log debug, saat berjalan dengan --debug atau setelah menjalankan /debug dalam sesi
  • stderr, dalam sesi non-interaktif yang dimulai dengan -p

Perilaku penyegaran

Skrip helper 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 kustom untuk membedakan antara kelompok yang berbeda menggunakan variabel lingkungan OTEL_RESOURCE_ATTRIBUTES:

# Tambahkan atribut kustom untuk identifikasi tim
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

Atribut kustom ini disertakan dalam semua metrik dan event, memungkinkan Anda untuk:

  • Filter metrik berdasarkan tim atau departemen
  • Lacak biaya per pusat biaya
  • Buat dashboard khusus tim
  • Atur peringatan untuk tim tertentu

Claude Code melampirkan nilai-nilai ini sebagai atribut pada setiap titik data metrik dan catatan event, selain mengirimkannya dalam blok sumber daya OTLP. Karena sebagian besar backend metrik mengekspos atribut titik data sebagai label yang dapat dipertanyakan, Anda dapat mengelompokkan dan memfilter metrik berdasarkan kunci kustom Anda secara langsung. Kecuali untuk atribut repositori vcs.* repository attributes, kunci kustom tidak pernah menimpa atribut standar seperti user.id atau session.id: ketika kunci bertabrakan, Claude Code menyimpan nilai bawaan.

Setiap kunci kustom menjadi label pada setiap seri metrik, jadi nilai kardinalitas tinggi meningkatkan biaya penyimpanan di backend metrik Anda. Untuk mengirim atribut kustom dalam blok sumber daya saja dan menghilangkannya dari label titik data, atur OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Lihat Kontrol kardinalitas metrik.

[!WARNING]

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 Company tidak valid
  • Format: harus berupa pasangan kunci=nilai yang dipisahkan koma: key1=value1,key2=value2
  • Karakter yang diizinkan: hanya karakter US-ASCII yang mengecualikan 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.

Atribusikan telemetri ke sesi SSH Desktop

Untuk melihat di mesin jarak jauh mana sebuah sesi SSH Desktop berjalan, beri nama setiap mesin dalam atribut kustom. Metrik dan event tidak menyebutkan mesin tempat sebuah sesi berjalan.

Di setiap mesin jarak jauh, tambahkan OTEL_RESOURCE_ATTRIBUTES ke blok env yang mengaktifkan telemetri, dalam file pengaturan terkelola yang dibaca sesi. Tuliskan namanya secara eksplisit di file setiap mesin. Claude Code tidak mengekspansi nilai tersebut, sehingga host.name=$(hostname) tiba sebagai karakter-karakter itu apa adanya.

Contoh berikut menamai mesin build-7:

{
  "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_RESOURCE_ATTRIBUTES": "host.name=build-7"
  }
}

Ketika tidak ada hal lain yang menetapkan variabel tersebut, host.name tiba di blok sumber daya, dalam sesi SSH Desktop dan di CLI pada mesin tersebut. Untuk tempat lain atribut kustom muncul, lihat Dukungan organisasi multi-tim.

Jika nama tersebut tidak tiba, periksa salah satu penyebab berikut:

  • Anda menetapkannya di komputer yang menjalankan Desktop: Desktop tidak meneruskan nilai yang Anda tetapkan di sana ke sesi SSH
  • Anda mengekspornya di /etc/profile atau file lain yang hanya dibaca oleh login shell: nama tersebut tiba ketika Anda menjalankan claude dari login shell, tetapi tidak dalam sesi SSH Desktop. Desktop tidak memulai Claude Code melalui login shell. Sebagai gantinya, tetapkan variabel tersebut di bawah env dalam file pengaturan terkelola di mesin jarak jauh.
  • Sebuah nilai mengandung spasi: Claude Code kemudian tidak menyalin satu pun kunci ke event atau titik data dan tidak melaporkan error. Hapus spasi dari nilai tersebut.
  • Sesuatu yang lain sudah menetapkan variabel tersebut: dalam sesi yang dimulai oleh aplikasi desktop, variabel yang sudah ditetapkan di lingkungan peluncuran diutamakan daripada file pengaturan. Log debug menyebutkan setiap variabel yang diabaikan. Ketika deployment Desktop pihak ketiga menyebutkan endpoint OTLP dalam lingkungan yang disediakannya, lingkungan tersebut membawa OTEL_RESOURCE_ATTRIBUTES milik Desktop sendiri.

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 log saja dan apa yang harus diperiksa ketika 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 melalui 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, yang discrape dari http://localhost:9464/metrics:

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus

Pada lingkungan yang di-host sendiri, sesi mengikat port 9464 hanya pada kapasitas default runner satu. Pada kapasitas yang lebih tinggi, runner kembali mengekspos penghitung dan gauge sesi pada endpoint /metrics miliknya sendiri sebagai gantinya.

Untuk mengirim metrik ke beberapa eksporter:

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 endpoint 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/v1/metrics
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

Untuk mengekspor metrik saja, tanpa event 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 event dan log saja, 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

Telemetri dari sesi cloud dan Claude Tag

Sesi cloud, termasuk sesi saluran Claude Tag, berjalan di lingkungan cloud daripada di perangkat pengguna Anda, jadi file pengaturan terkelola atau profil shell di perangkat tersebut tidak mengonfigurasi telemetri mereka. Untuk sesi di lingkungan yang dihosting Anthropic, bagian ini mencakup tempat untuk menetapkan variabel telemetri, cara membuat kolektor Anda dapat diakses dari lingkungan, dan cara membedakan sesi cloud dan Claude Tag dalam data yang diekspor.

Untuk mengekspor telemetri dari sesi tersebut, atur CLAUDE_CODE_ENABLE_TELEMETRY dan variabel OTEL_*, menggunakan kunci yang sama seperti contoh konfigurasi administrator, di salah satu dari dua tempat:

  • Pengaturan yang dikelola server: tambahkan ke blok env dari pengaturan yang dikelola server organisasi Anda. Claude Code mengambil pengaturan tersebut saat startup di mana pun pengaturan yang dikelola server berlaku, yang mencakup mesin pengguna Anda dan sesi cloud selain sesi saluran Claude Tag. Sesi Claude Tag tidak menerima pengaturan yang dikelola server Anda, jadi rute ini tidak mengonfigurasinya.
  • Variabel lingkungan: tambahkan ke variabel lingkungan lingkungan cloud untuk mengonfigurasi hanya sesi yang berjalan di lingkungan tersebut. Ini adalah rute yang menjangkau sesi Claude Tag.

Siapa pun yang menggunakan lingkungan dapat membaca variabelnya, jadi jangan letakkan kredensial di sana, seperti token kolektor di OTEL_EXPORTER_OTLP_HEADERS. Rahasia jaringan di lingkungan juga tidak membantu, karena ekspor telemetri Claude Code sendiri adalah salah satu dari permintaan yang tidak pernah mendapatkan rahasia tersebut. Jika kolektor Anda memerlukan kredensial, konfigurasikan seluruh ekspor melalui pengaturan terkelola server sebagai gantinya, karena ketika Anda menetapkan kredensial di sana, Claude Code menghapus variabel endpoint yang ditetapkan di luar pengaturan terkelola.

Pertahankan batasan ini dalam pikiran ketika Anda mengonfigurasi telemetri untuk sesi cloud:

  • Biarkan sesi menjangkau kolektor: Claude Code mengirim ekspor melalui jaringan sesi, jadi apakah itu menjangkau host di OTEL_EXPORTER_OTLP_ENDPOINT Anda tergantung pada tingkat akses jaringan lingkungan. Jika sesi tidak dapat menjangkau domain kolektor pada tingkat yang Anda pilih, tambahkan domain ke daftar izin lingkungan, karena tidak ada pengaturan yang dikelola server yang menambahkan domain ke daftar izin jaringan lingkungan.
  • Channel Claude Tag: buat perubahan allowlist dan environment variable apa pun di lingkungan bersama yang ditetapkan sebagai default organisasi Anda atau disematkan ke channel.
  • Cowork dikonfigurasi secara terpisah: sesi Cowork tidak menerima pengaturan yang dikelola server, seperti yang ditunjukkan tabel cakupan permukaan, jadi blok env yang dikelola server tidak mengonfigurasi telemetri mereka.

Atribut telemetri ke sesi cloud

Secara default, metrik dan acara dari sesi cloud membawa atribut standar, termasuk session.id, ccr.session.id, dan organization.id, sehingga Anda dapat memfilter berdasarkan sesi atau organisasi tanpa konfigurasi tambahan. Nilai ccr.session.id adalah CLAUDE_CODE_REMOTE_SESSION_ID sesi. Untuk mengubahnya menjadi URL transkrip sesi, lihat Tautkan output kembali ke sesi.

Untuk membedakan sesi cloud satu sama lain, kelompokkan atau filter berdasarkan ccr.session.id, bukan session.id.

Untuk mengatribusikan telemetri secara lebih detail, gunakan opsi berikut:

  • Identifikasi sesi Claude Tag: atur OTEL_METRICS_INCLUDE_ENTRYPOINT=true, seperti yang dijelaskan di bawah Kontrol kardinalitas metrik. Metrik dan acara kemudian membawa app.entrypoint, yang nilainya adalah claude-in-slack untuk sesi Claude Tag.
  • Tambahkan atribut kustom: atur OTEL_RESOURCE_ATTRIBUTES di tempat yang sama di mana Anda menetapkan variabel OTEL_* lainnya untuk sesi tersebut. Jika Anda export di skrip setup lingkungan sebagai gantinya, nilainya tidak mencapai Claude Code: skrip setup adalah skrip Bash terpisah yang berjalan sebelum Claude Code diluncurkan, dan variabel yang diekspor berakhir dengannya.

Dalam sesi saluran Claude Tag, Claude bekerja sebagai identitas bersama organisasi Anda daripada sebagai anggota apa pun, jadi jangan andalkan atribut user.* untuk mengidentifikasi siapa yang menandai Claude.

Metrik dan event yang tersedia

Atribut standar

Semua metrik dan event berbagi atribut standar berikut:

Atribut Deskripsi Dikendalikan Oleh
session.id ID sesi milik Claude Code sendiri, yang diganti oleh /clear OTEL_METRICS_INCLUDE_SESSION_ID (default: true)
ccr.session.id Pengidentifikasi sesi cloud, yaitu nilai CLAUDE_CODE_REMOTE_SESSION_ID, pada sesi yang berjalan di lingkungan cloud OTEL_METRICS_INCLUDE_SESSION_ID (default: true)
app.version Versi Claude Code saat ini OTEL_METRICS_INCLUDE_VERSION (default: false)
app.entrypoint Cara sesi diluncurkan, seperti cli, sdk-cli, sdk-ts, sdk-py, claude-vscode, claude-desktop untuk sesi tab Code di Claude Desktop di luar cloud, claude-desktop-3p untuk sesi yang sama pada deployment pihak ketiga, atau claude-in-slack untuk sesi Claude Tag. Nilai sesi cloud mencakup remote, ditambah remote_desktop dan remote_mobile untuk sesi yang Anda mulai dari Claude Desktop atau aplikasi seluler OTEL_METRICS_INCLUDE_ENTRYPOINT (default: false)
organization.id UUID organisasi (saat terautentikasi) Selalu disertakan jika tersedia
user.account_uuid UUID akun (saat terautentikasi) OTEL_METRICS_INCLUDE_ACCOUNT_UUID (default: true)
user.account_id ID akun dalam format bertag yang sesuai dengan API admin Anthropic (saat terautentikasi), seperti user_01BWBeN28... OTEL_METRICS_INCLUDE_ACCOUNT_UUID (default: true)
user.id Pengidentifikasi anonim acak yang dibuat saat pertama kali dijalankan dan disimpan di ~/.claude.json. Pengidentifikasi ini tidak berisi informasi pribadi dan tidak diturunkan dari akun Claude Anda. Menghapus file tersebut akan menghasilkan nilai baru yang tidak terkait pada eksekusi berikutnya. Selalu disertakan
user.email Alamat email pengguna, dari proses masuk Anda atau, dalam sesi cloud, dari kredensial milik sesi itu sendiri Selalu disertakan jika tersedia
terminal.type Jenis terminal, seperti iTerm.app, vscode, cursor, atau tmux Selalu disertakan jika terdeteksi
Kunci dari OTEL_RESOURCE_ATTRIBUTES Atribut kustom yang Anda tetapkan, seperti department atau team.id. Lihat Dukungan organisasi multi-tim OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES (default: true)
vcs.repository.url.full, vcs.owner.name, vcs.repository.name, vcs.provider.name Identitas repositori sesi, diturunkan dari remote origin-nya. Lihat Atribut repositori OTEL_METRICS_INCLUDE_REPOSITORY (default: false). Memerlukan Claude Code v2.1.269 atau yang lebih baru

Dalam sesi yang masuk ke gateway aplikasi Claude melalui /login, CLI membubuhkan identitas yang terautentikasi pada ekspor: user.id adalah subjek IdP, user.email adalah email yang digunakan untuk masuk, dan user.groups membawa keanggotaan grup IdP sebagai string yang dipisahkan koma. Setiap ekspor juga membawa identity.source: gateway-oidc. Identitas gateway diterapkan paling akhir, sehingga kunci user.* dan identity.* yang ditetapkan melalui OTEL_RESOURCE_ATTRIBUTES diabaikan pada sesi tersebut.

[!NOTE]

Event yang dicatat Claude Code sebelum developer masuk tidak membawa identitas gateway. Saat Claude Code membuka sesi dalam keadaan keluar dari gateway, misalnya setelah gateway mengakhiri proses masuk, event startup yang dicatat sebelum masuk membawa user.id anonim dan tanpa identity.source. Event ini mencakup managed_settings_resolved, plugin_loaded, dan mcp_server_connection.

Untuk atribut identitas pada sesi Claude Desktop dan Cowork yang terhubung melalui gateway, lihat referensi telemetry gateway.

Event juga menyertakan atribut berikut. Atribut ini tidak pernah dilampirkan ke metrik karena akan menyebabkan kardinalitas yang tidak terbatas:

  • prompt.id: UUID yang mengorelasikan prompt pengguna dengan semua event berikutnya hingga prompt selanjutnya. Lihat Atribut korelasi event.
  • workspace.host_paths: direktori workspace host yang dipilih di aplikasi desktop, sebagai array string
  • workflow.run_id: pengidentifikasi run, dengan awalan wf_, pada event API dan tool yang dipancarkan oleh agent yang termasuk dalam run tool Workflow. Memfilter event berdasarkan satu workflow.run_id akan merekonstruksi permintaan API dan hasil tool dari run tersebut. Pengidentifikasi ini mencakup agent yang dimunculkan oleh skrip workflow dan agent apa pun yang kemudian dimunculkan oleh agent tersebut, seperti pemanggilan skill. Nilainya sama dengan pengidentifikasi run yang dilaporkan dalam hasil tool Workflow.
  • workflow.name: nama workflow, yaitu meta.name skripnya, yang dipancarkan bersama workflow.run_id. Nama workflow bawaan muncul apa adanya ketika run mengeksekusi skrip bawaan yang tidak dimodifikasi. Nama yang ditulis pengguna, termasuk salinan skrip bawaan yang telah diedit, diganti dengan custom kecuali OTEL_LOG_TOOL_DETAILS=1 ditetapkan.
  • agent_id: pengidentifikasi subagent yang memunculkan event, seperti a3f2c1b4d5e6f7a80. Event yang membawanya mencakup event API dan tool dari subagent, event assistant_response miliknya, dan subagent_completed untuk subagent yang telah selesai. Tidak ada pada event sesi utama dan event teammate in-process. agent_id span milik subagent memiliki nilai yang sama, atau menambahkan label setelah a di awal seperti pada acompact-3f2c1b4d5e6f7a80. Memerlukan Claude Code v2.1.310 atau yang lebih baru
  • parent_agent_id: agent_id dari agent yang memunculkan atau terakhir melanjutkan subagent yang memunculkan event. Tidak ada jika agent tersebut adalah sesi utama. Memerlukan Claude Code v2.1.310 atau yang lebih baru

Atribut repositori

Tetapkan OTEL_METRICS_INCLUDE_REPOSITORY=true untuk menandai metrik dan event dengan identitas repositori sesi, sehingga collector bersama dapat mengatribusikan penggunaan per repositori. Memerlukan Claude Code v2.1.269 atau yang lebih baru.

Claude Code menurunkan atribut ini sekali per sesi dari remote origin repositori. Ketika remote HTTPS dan SSH dari sebuah repositori menyebutkan host yang sama dan path yang sama, seperti pada GitHub, GitLab, dan Bitbucket Cloud, keduanya menghasilkan nilai yang identik:

Atribut Nilai
vcs.repository.url.full URL browser repositori tanpa .git, seperti https://github.com/example-org/example-repo
vcs.owner.name Path pemilik atau grup, seperti example-org; dihilangkan jika path remote hanya memiliki satu segmen
vcs.repository.name Nama repositori saja, seperti example-repo
vcs.provider.name github, gitlab, bitbucket, atau gitea saat Claude Code mengenali host atau bentuk URL remote sebagai salah satu penyedia tersebut; dihilangkan jika tidak

Nilai-nilai ini diubah menjadi huruf kecil, dan kredensial, query string, serta fragmen dari URL remote tidak pernah muncul di dalamnya. Atribut ini dihilangkan jika sesi tidak memiliki remote origin, jika remote tidak berbentuk URL, atau jika satu-satunya repositori yang melingkupinya adalah direktori home Anda.

Untuk mendapatkan atribut ini dari sesi cloud, tetapkan variabel telemetri, termasuk OTEL_METRICS_INCLUDE_REPOSITORY, pada lingkungan cloud-nya. Izinkan juga domain collector Anda di akses jaringan lingkungan tersebut.

Kunci vcs.* yang Anda deklarasikan dalam OTEL_RESOURCE_ATTRIBUTES menggantikan nilai turunan untuk kunci tersebut. Jika Anda mendeklarasikan vcs.repository.url.full, Claude Code tidak pernah membaca remote dan hanya melaporkan kunci yang Anda deklarasikan.

Jika clone HTTPS dan SSH dari satu repositori melaporkan nilai yang berbeda, seperti pada instalasi self-hosted yang URL clone HTTPS-nya membawa prefiks path yang tidak ada pada URL SSH, deklarasikan vcs.repository.url.full di OTEL_RESOURCE_ATTRIBUTES bersama setiap kunci vcs.* lain yang ingin Anda laporkan. Setiap clone kemudian melaporkan identitas yang Anda deklarasikan.

Atribut ini hanya mengalir ke exporter milik Anda sendiri; telemetri Anthropic membuang setiap kunci vcs.*.

Metrik

Claude Code mengekspor metrik berikut. Kolom Unit menampilkan string unit OpenTelemetry yang dilampirkan ke setiap metrik; metrik hitungan tidak membawa unit.

Nama Metrik Deskripsi Unit
claude_code.session.count Jumlah sesi yang dimulai tidak ada
claude_code.lines_of_code.count Jumlah baris kode yang dimodifikasi tidak ada
claude_code.pull_request.count Jumlah pull request yang dibuat tidak ada
claude_code.commit.count Jumlah commit git yang dibuat tidak ada
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 tool pengeditan kode tidak ada
claude_code.active_time.total Total waktu aktif s

Saat prometheus adalah satu-satunya exporter yang tercantum dalam OTEL_METRICS_EXPORTER, Claude Code menghilangkan unit USD, tokens, dan s dari metrik yang diekspor agar hasil scrape tetap berformat teks Prometheus yang valid. Nama metrik tidak berubah, dan konfigurasi yang menggabungkan beberapa exporter, seperti otlp,prometheus, tetap mempertahankan unit.

Detail metrik

Setiap metrik menyertakan atribut standar yang tercantum di atas. Metrik dengan atribut tambahan yang spesifik konteks dicatat di bawah ini.

Penghitung sesi

Bertambah pada awal setiap sesi. Untuk menghitung orang, lihat Pemantauan penggunaan.

Atribut:

  • Semua atribut standar
  • start_type: Cara sesi dimulai. Salah satu dari "fresh", "resume", "continue", atau "agents_view". Nilai "agents_view" mengidentifikasi proses dashboard claude agents, yaitu UI lokal yang diluncurkan pengguna, bukan sesi percakapan. Filter berdasarkan nilai ini untuk memisahkan peluncuran proses UI dari sesi percakapan di dashboard Anda.

Penghitung baris kode

Bertambah 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 pull request

Bertambah saat Claude Code membuat pull request atau merge request melalui perintah shell atau tool MCP.

Atribut:

Penghitung commit

Bertambah saat membuat commit git melalui Claude Code.

Atribut:

Penghitung biaya

Bertambah setelah setiap permintaan API.

Atribut agent.name, skill.name, plugin.name, mcp_server.name, dan mcp_tool.name masing-masing menyunting beberapa nama menjadi placeholder "custom" atau "third-party" secara default. Jika Anda menetapkan OTEL_LOG_TOOL_DETAILS=1, atribut tersebut membawa nama sebenarnya. Sebelum v2.1.273, penghitung biaya dan token serta event api_request, api_error, dan api_refusal membawa nilai yang disunting bahkan ketika OTEL_LOG_TOOL_DETAILS=1 ditetapkan.

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" ketika permintaan menggunakan fast mode. Tidak ada jika sebaliknya
  • effort: Tingkat effort yang diterapkan pada permintaan: "low", "medium", "high", "xhigh", atau "max". Tidak ada ketika Claude Code tidak mengirimkan tingkat effort, misalnya pada model yang tidak mendukung effort.
  • agent.name: Jenis subagent yang mengeluarkan permintaan. Nama agent bawaan dan agent dari plugin marketplace resmi muncul apa adanya. Nama agent lain yang ditentukan pengguna diganti dengan "custom". Tidak ada ketika permintaan tidak dikeluarkan oleh jenis subagent bernama.
  • skill.name: Skill yang aktif untuk permintaan, ditetapkan oleh tool Skill atau perintah /, atau diwarisi oleh subagent yang dimunculkan. Nama skill bawaan, bundel, yang ditentukan pengguna, dan plugin marketplace resmi muncul apa adanya. Nama skill plugin pihak ketiga diganti dengan "third-party". Tidak ada ketika tidak ada skill yang aktif.
  • plugin.name: Plugin pemilik ketika skill atau subagent yang aktif disediakan oleh plugin. Nama plugin marketplace resmi muncul apa adanya. Nama plugin pihak ketiga diganti dengan "third-party". Tidak ada ketika baik skill maupun subagent tidak memiliki plugin pemilik.
  • marketplace.name: Marketplace tempat plugin pemilik diinstal. Hanya dipancarkan untuk plugin marketplace resmi, bahkan ketika OTEL_LOG_TOOL_DETAILS=1 ditetapkan. Tidak ada jika sebaliknya.
  • mcp_server.name: Server MCP yang hasil tool-nya dikonsumsi oleh permintaan ini. Nama server bawaan, yang di-proxy melalui claude.ai, dan dari registri resmi muncul apa adanya. Nama server yang dikonfigurasi pengguna diganti dengan "custom". Tidak ada ketika permintaan tidak mengonsumsi hasil tool MCP. Sebelum v2.1.222, Claude Code mengatur atribut ini pada setiap permintaan setelah panggilan tool MCP, tidak hanya pada permintaan yang mengonsumsi hasil tool, sehingga dasbor yang mengagregasinya menunjukkan penurunan setelah Anda melakukan upgrade.
    • Sejak v2.1.312, nama server remote dengan URL tetap yang dideklarasikan oleh plugin dari marketplace resmi Anthropic juga muncul apa adanya, sebagai plugin_<plugin>_<server>. Nama tersebut diganti dengan "custom" ketika salinan marketplace plugin tidak berasal dari sumber terdaftar Anthropic, seperti salinan yang di-mount dari direktori seed dalam sesi cloud.
  • mcp_tool.name: Tool MCP yang hasilnya dikonsumsi oleh permintaan ini, dengan perilaku penyamaran dan versi yang sama seperti mcp_server.name, kecuali bahwa nilainya dapat berupa "custom" ketika mcp_server.name menunjukkan nama plugin_<plugin>_<server>. Tidak ada ketika permintaan tidak mengonsumsi hasil tool MCP.

Penghitung token

Bertambah setelah setiap permintaan API.

Atribut:

  • Semua atribut standar
  • type: ("input", "output", "cacheRead", "cacheCreation"). Jenis "input" tidak termasuk token yang dibaca dari atau ditulis ke cache prompt, yang dihitung di bawah "cacheRead" dan "cacheCreation". Jenis "cacheCreation" menghitung penulisan cache dengan masa berlaku cache lima menit dan satu jam secara bersamaan.
  • 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 fast mode. Tidak ada jika tidak demikian
  • effort: Tingkat effort yang diterapkan pada permintaan. Lihat Penghitung biaya untuk detailnya.
  • agent.name, skill.name, plugin.name, marketplace.name, mcp_server.name, mcp_tool.name: Atribusi skill, plugin, agent, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku penyuntingan.

Penghitung keputusan tool edit kode

Bertambah saat pengguna menerima atau menolak penggunaan tool Edit, Write, atau NotebookEdit.

Atribut:

  • Semua atribut standar
  • tool_name: Nama tool ("Edit", "Write", "NotebookEdit")
  • decision: Keputusan pengguna ("accept", "reject")
  • source: Asal keputusan. Salah satu dari "config", "hook", "user_permanent", "user_temporary", "user_abort", atau "user_reject". Lihat Event keputusan tool untuk 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 untuk menggunakan Claude Code secara aktif, tidak termasuk waktu idle. Metrik ini bertambah selama interaksi pengguna, seperti mengetik dan membaca respons, dan selama pemrosesan CLI, seperti eksekusi tool dan pembuatan respons AI.

Atribut:

  • Semua atribut standar
  • type: "user" untuk interaksi keyboard, "cli" untuk eksekusi tool dan respons AI

Event

Claude Code mengekspor event berikut melalui log/event OpenTelemetry (saat OTEL_LOGS_EXPORTER dikonfigurasi):

Atribut korelasi event

Saat pengguna mengirimkan prompt, Claude Code dapat melakukan beberapa panggilan API dan menjalankan beberapa tool. Atribut prompt.id memungkinkan Anda mengaitkan semua event tersebut kembali ke satu prompt yang memicunya.

Atribut Deskripsi
prompt.id Pengidentifikasi UUID v4 yang menautkan semua event yang dihasilkan selama pemrosesan satu prompt pengguna
event.sequence Penghitung berbasis 0 untuk mengurutkan event, dihitung per proses Claude Code, bukan per sesi
message.uuid UUID pesan sebagaimana disimpan dalam transkrip sesi, yaitu file ~/.claude/projects/*/*.jsonl. Ada pada assistant_response, pada api_response_body, dan pada user_prompt kecuali untuk dispatch perintah, yang dapat menghasilkan nol atau banyak pesan. Pada assistant_response dan api_response_body, ini adalah entri transkrip terakhir dari respons, yang menjadi sumber rantai parentUuid giliran berikutnya. Memerlukan Claude Code v2.1.274 atau yang lebih baru pada api_response_body
request_id ID permintaan API yang ditetapkan server, dibaca dari header respons request-id, seperti req_011.... Pada respons tanpa header request-id, seperti pada Amazon Bedrock, nilainya berasal dari header x-amzn-requestid. Ada pada api_request, api_error, api_refusal, assistant_response, api_response_body, tool_result, dan tool_decision ketika respons membawa salah satu header tersebut. Sama dengan atribut yang sama pada span trace llm_request. Sumber x-amzn-requestid memerlukan Claude Code v2.1.282 atau yang lebih baru
client_request_id UUID yang dihasilkan klien dan dikirim sebagai header permintaan x-client-request-id. Ada pada api_request dan api_error pada koneksi API pihak pertama; tidak ada pada backend penyedia pihak ketiga dan ketika permintaan dicoba ulang melalui fallback non-streaming. Memasangkan permintaan dengan responsnya dan tetap tersedia untuk kegagalan seperti timeout yang tidak pernah menghasilkan request_id server. Sama dengan atribut yang sama pada span trace llm_request

Untuk melacak semua aktivitas yang dipicu oleh satu prompt, filter event Anda berdasarkan nilai prompt.id tertentu. Ini mengembalikan event user_prompt, event api_request apa pun, dan event tool_result apa pun yang terjadi selama pemrosesan prompt tersebut.

event.sequence dimulai dari 0 setiap kali proses Claude Code dimulai dan terus bertambah sepanjang umur proses tersebut. Penghitung ini terus berjalan melewati /clear, yang menetapkan session.id baru. Jika Anda melanjutkan sesi tanpa fork, sesi tersebut mempertahankan session.id-nya tetapi mengambil nilai event.sequence dari proses yang melanjutkannya, sehingga dalam satu sesi, event yang lebih akhir dapat membawa nilai yang lebih rendah daripada event sebelumnya, atau mengulang nilai. Untuk mengurutkan event dalam sebuah sesi, urutkan berdasarkan event.timestamp dan gunakan event.sequence untuk mengurutkan event yang memiliki timestamp yang sama.

Untuk rekonstruksi tingkat pesan, setiap kelas event membawa kunci yang cocok dengan field dalam transkrip sesi. Format entri transkrip bersifat internal bagi Claude Code dan berubah antarversi, sehingga pipeline yang melakukan join pada field ini dapat rusak pada rilis mana pun; perlakukan join tersebut sebagai spesifik versi, bukan kontrak yang stabil:

  • message.uuid pada user_prompt, assistant_response, dan api_response_body
  • request_id pada event API, disimpan sebagai requestId pada entri asisten di transkrip
  • tool_use_id pada event tool_result dan tool_decision, dan pada event safety_event kecuali yang untuk akhir giliran

Event prompt pengguna

Dicatat ketika prompt dikirimkan, termasuk pada giliran yang dimulai Claude Code sendiri.

Nama Event: claude_code.user_prompt

Atribut:

  • Semua atribut standar
  • event.name: "user_prompt"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • prompt_length: Panjang prompt
  • prompt: Konten prompt. Disunting secara default. Tetapkan OTEL_LOG_USER_PROMPTS=1 untuk menyertakannya
  • prompt_text: Nilai yang sama dengan prompt, disunting dengan syarat yang sama. Backend yang menyimpan nama atribut bertitik sebagai objek bersarang membaca prompt.id sebagai id di dalam objek bernama prompt dan dapat kehilangan string prompt. Baca prompt_text di sana sebagai gantinya. Memerlukan Claude Code v2.1.287 atau yang lebih baru
  • message.uuid: UUID pesan pengguna yang dihasilkan, cocok dengan entri transkrip yang disimpan. Tidak ada pada dispatch perintah, yang dapat menghasilkan nol atau banyak pesan.
  • command_name: Nama perintah ketika prompt memanggil sebuah perintah. Nama perintah bawaan dan bundel seperti compact atau debug dipancarkan apa adanya; alias seperti reset dipancarkan sebagaimana diketik, bukan nama kanonisnya. Nama perintah kustom, plugin, dan MCP diringkas menjadi custom atau mcp kecuali OTEL_LOG_TOOL_DETAILS=1 ditetapkan
  • command_source: Asal perintah jika ada: builtin, custom, atau mcp. Perintah yang disediakan plugin dilaporkan sebagai custom

Event respons asisten

Dicatat setelah setiap permintaan API yang mengembalikan konten teks dari model. Hanya blok teks dari respons yang disertakan; thinking block dan blok tool-use dikecualikan.

Nama Event: claude_code.assistant_response

Atribut:

  • Semua atribut standar
  • event.name: "assistant_response"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • response_length: Panjang teks respons dalam karakter
  • response: Teks respons, dipotong pada batas konten (60 KB secara default). Disunting menjadi <REDACTED> secara default. Tetapkan OTEL_LOG_ASSISTANT_RESPONSES=1 untuk menyertakannya. Ketika OTEL_LOG_ASSISTANT_RESPONSES tidak ditetapkan, OTEL_LOG_USER_PROMPTS yang mengendalikannya, jadi tetapkan OTEL_LOG_ASSISTANT_RESPONSES=0 agar respons tetap disunting saat logging prompt aktif
  • model: Pengidentifikasi model (misalnya, "claude-sonnet-5")
  • request_id: ID permintaan API, dijelaskan di Atribut korelasi event
  • message.uuid: UUID entri transkrip terakhir dari respons. Respons API disimpan sebagai satu entri transkrip per blok konten; ini adalah entri terakhir, yang menjadi sumber rantai parentUuid giliran berikutnya.
  • query_source: Subsistem yang mengeluarkan permintaan, seperti "repl_main_thread", "compact", atau nama subagent

Event hasil tool

Dicatat saat tool selesai dieksekusi. Tidak dipancarkan jika panggilan tool ditolak; lihat Event keputusan tool untuk penolakan.

Nama Event: claude_code.tool_result

Atribut:

  • Semua atribut standar
  • event.name: "tool_result"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • tool_name: Nama tool
  • tool_use_id: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan tool_use_id yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.
  • request_id: request_id dari respons API yang berisi panggilan tool ini, sehingga Anda dapat melakukan join panggilan tersebut dengan event API dari respons itu. Tidak ada ketika respons tersebut tidak memiliki ID permintaan, atau ketika tidak ada respons API yang berisi panggilan tersebut. Memerlukan Claude Code v2.1.310 atau yang lebih baru
  • success: "true" atau "false"
  • duration_ms: Waktu eksekusi dalam milidetik
  • error_type: String kategori error saat tool gagal, seperti "Error:ENOENT" atau "ShellError"
  • error (saat OTEL_LOG_TOOL_DETAILS=1): Pesan error lengkap saat tool gagal
  • decision_type: Selalu "accept", karena event ini hanya dipancarkan setelah tool berjalan. Panggilan yang ditolak tidak menghasilkan hasil tool
  • decision_source: Asal keputusan izin. Salah satu dari "config", "hook", "user_permanent", atau "user_temporary". Lihat Event keputusan tool untuk arti setiap nilai. Sumber khusus penolakan "user_abort" dan "user_reject" tidak pernah muncul pada event ini.
  • tool_input_size_bytes: Ukuran input tool yang diserialisasi JSON dalam byte
  • tool_result_size_bytes: Ukuran hasil tool dalam byte
  • mcp_server_scope: Pengidentifikasi cakupan server MCP (untuk tool MCP)
  • vcs.ref.head.revision, vcs.ref.head.name, vcs.ref.head.type (ketika OTEL_LOG_TOOL_DETAILS=1): identitas commit dari git commit yang berhasil dijalankan oleh tool Bash atau PowerShell. vcs.ref.head.revision adalah SHA commit, vcs.ref.head.name adalah branch tempat commit dibuat, dan vcs.ref.head.type adalah branch. Nama dan jenis dihilangkan ketika commit dibuat pada detached HEAD. Memerlukan Claude Code v2.1.269 atau yang lebih baru
  • tool_parameters (ketika OTEL_LOG_TOOL_DETAILS=1): String JSON yang berisi parameter spesifik tool. Untuk server bawaan Claude Desktop, dalam sesi yang dimiliki Claude Desktop, pasangan mcp_server_name/mcp_tool_name disertakan bahkan ketika flag nonaktif, pengecualian yang sama untuk nama yang ditulis host seperti pada Event keputusan tool. Parameter bervariasi menurut tool:
    • Untuk tool Bash: mencakup bash_command, full_command, timeout, description, dan dangerouslyDisableSandbox, ditambah git_commit_id dan git_branch ketika perintah git commit berhasil. git_commit_id adalah SHA commit lengkap ketika commit tersebut adalah HEAD dari direktori kerja sesi, dan SHA singkat git jika tidak. git_branch adalah branch tempat commit dibuat, dihilangkan pada detached HEAD
    • Untuk tool Bash workspace aplikasi desktop, yang juga melaporkan tool_name sebagai Bash: hanya mencakup bash_command, full_command, dan timeout
    • Untuk tool MCP: mencakup mcp_server_name, mcp_tool_name
    • Untuk tool Skill: mencakup skill_name
    • Untuk tool Agent atau tool Task lama: mencakup subagent_type
  • tool_input (saat OTEL_LOG_TOOL_DETAILS=1): Argumen tool yang diserialisasi JSON. Nilai individual lebih dari 512 karakter dipotong, dan payload lengkap dibatasi hingga ~4 K karakter. Berlaku untuk semua tool termasuk tool MCP.

Event permintaan API

Dicatat untuk setiap permintaan API ke Claude.

Nama Event: claude_code.api_request

Atribut:

  • Semua atribut standar
  • event.name: "api_request"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • model: Model yang digunakan (misalnya, "claude-sonnet-5")
  • cost_usd: Estimasi biaya dalam USD
  • cost_usd_micros: Estimasi biaya dalam sepersejuta dolar AS, dipancarkan sebagai integer
  • duration_ms: Durasi permintaan dalam milidetik
  • input_tokens: Jumlah token input, tidak termasuk token yang dibaca dari atau ditulis ke cache prompt
  • output_tokens: Jumlah token output
  • cache_read_tokens: Jumlah token yang dibaca dari cache
  • cache_creation_tokens: Jumlah token yang digunakan untuk pembuatan cache
  • cache_creation_5m_tokens, cache_creation_1h_tokens: jumlah token yang dilaporkan respons API sebagai ditulis ke cache dengan masa berlaku cache lima menit dan jumlah yang ditulis dengan masa berlaku satu jam. Keduanya bernilai 0 ketika respons API tidak melaporkannya, bahkan ketika cache_creation_tokens lebih dari nol. Memerlukan Claude Code v2.1.300 atau yang lebih baru
  • request_id: ID permintaan API, seperti "req_011...", dijelaskan di Atribut korelasi event.
  • client_request_id: UUID yang dihasilkan klien dan dikirim sebagai header permintaan x-client-request-id; lihat tabel atribut korelasi event untuk kapan atribut ini ada
  • speed: "fast" atau "normal", menunjukkan apakah fast mode aktif
  • query_source: Subsistem yang mengeluarkan permintaan, seperti "repl_main_thread", "compact", atau nama subagent
  • effort: Tingkat effort yang diterapkan pada permintaan: "low", "medium", "high", "xhigh", atau "max". Tidak ada ketika Claude Code tidak mengirimkan tingkat effort, misalnya pada model yang tidak mendukung effort.
  • agent.name, skill.name, plugin.name, marketplace.name, mcp_server.name, mcp_tool.name: Atribusi skill, plugin, agent, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku penyuntingan.

Event error API

Dicatat saat permintaan API ke Claude gagal.

Nama Event: claude_code.api_error

Atribut:

  • Semua atribut standar
  • event.name: "api_error"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • model: Model yang digunakan (misalnya, "claude-sonnet-5")
  • error: Pesan error
  • status_code: Kode status HTTP sebagai angka. Tidak ada untuk error non-HTTP seperti kegagalan koneksi.
  • duration_ms: Durasi permintaan dalam milidetik
  • attempt: Jumlah percobaan yang dilakukan, termasuk permintaan awal. Mendeteksi habisnya retry menjelaskan kapan hitungan dimulai lagi
  • request_id: ID permintaan API, seperti "req_011...", dijelaskan di Atribut korelasi event.
  • client_request_id: UUID yang dihasilkan klien dan dikirim sebagai header permintaan x-client-request-id. Tersedia bahkan ketika kegagalan seperti timeout atau error koneksi tidak pernah menghasilkan request_id server; lihat tabel atribut korelasi event untuk kapan atribut ini ada.
  • speed: "fast" atau "normal", menunjukkan apakah fast mode aktif
  • query_source: Subsistem yang mengeluarkan permintaan, seperti "repl_main_thread", "compact", atau nama subagent
  • effort: Tingkat effort yang diterapkan pada permintaan. Tidak ada ketika Claude Code tidak mengirimkan tingkat effort, misalnya pada model yang tidak mendukung effort.
  • agent.name, skill.name, plugin.name, marketplace.name, mcp_server.name, mcp_tool.name: Atribusi skill, plugin, agent, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku penyuntingan.

Event penolakan API

Dicatat ketika permintaan API mengembalikan stop_reason: "refusal". Penolakan tiba pada stream respons yang berhasil, bukan sebagai error HTTP, sehingga event api_error tidak dipicu untuknya. Event ini memungkinkan Anda melacak frekuensi penolakan dan mengelompokkan penolakan berdasarkan atribut yang sama dengan api_request dan api_error.

Nama Event: claude_code.api_refusal

Atribut:

  • Semua atribut standar
  • event.name: "api_refusal"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • model: Pengidentifikasi model dari permintaan
  • request_id: ID permintaan API, seperti "req_011...", dijelaskan di Atribut korelasi event.
  • query_source: Subsistem yang mengeluarkan permintaan, seperti "repl_main_thread", "compact", atau nama subagent. Lihat api_request untuk definisinya.
  • speed: "fast" ketika Fast mode aktif, atau "normal"
  • attempt: Nomor percobaan retry. Percobaan pertama adalah 1.
  • effort: Tingkat effort yang diterapkan pada permintaan. Tidak ada ketika Claude Code tidak mengirimkan tingkat effort, misalnya pada model yang tidak mendukung effort.
  • server_fallback_hop: true ketika fallback model sisi server milik API sudah mencoba ulang penolakan ini pada model yang berbeda, sehingga pengguna tidak melihat penolakan khusus ini. false ketika permintaan berakhir dengan penolakan. Satu giliran dapat memancarkan event hop true dan event final false setelahnya ketika model fallback juga menolak.
  • has_category: true ketika respons API membawa stop_details.category bernilai "cyber", "bio", "frontier_llm", atau "reasoning_extraction". false ketika respons tidak membawa kategori atau membawa nilai di luar kumpulan tersebut. Tidak ada ketika server_fallback_hop bernilai true, karena blok hop tidak membawa stop_details.
  • has_explanation: true ketika respons API membawa stop_details.explanation, selain itu false. Tidak ada ketika server_fallback_hop bernilai true.
  • category: Nilai stop_details.category dari respons API. Salah satu dari "cyber", "bio", "frontier_llm", atau "reasoning_extraction". Hanya ada ketika OTEL_LOG_TOOL_DETAILS=1 ditetapkan dan has_category bernilai true.
  • agent.name, skill.name, plugin.name, marketplace.name, mcp_server.name, mcp_tool.name: Atribusi skill, plugin, agent, dan MCP untuk permintaan. Lihat Penghitung biaya untuk definisi dan perilaku penyuntingan.

Event body permintaan API

Dicatat untuk setiap percobaan permintaan API ketika OTEL_LOG_RAW_API_BODIES ditetapkan. Satu event dipancarkan per percobaan, sehingga setiap retry dengan parameter yang disesuaikan menghasilkan event-nya sendiri.

Nama Event: claude_code.api_request_body

Atribut:

  • Semua atribut standar
  • event.name: "api_request_body"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • body: Parameter permintaan Messages API yang diserialisasi JSON, seperti system prompt, pesan, dan tool, dipotong pada batas konten (60 KB secara default). Konten extended thinking pada giliran asisten sebelumnya disunting. Hanya dipancarkan dalam mode inline (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Path absolut ke file <dir>/<uuid>.request.json yang berisi body yang tidak dipotong. Hanya dipancarkan dalam mode file (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Panjang body yang tidak dipotong. Dalam byte UTF-8 ketika OTEL_LOG_RAW_API_BODIES=file:<dir>, atau dalam unit kode UTF-16 ketika =1
  • body_truncated: "true" ketika terjadi pemotongan inline. Tidak ada dalam mode file dan ketika tidak terjadi pemotongan.
  • model: Pengidentifikasi model dari parameter permintaan
  • query_source: Subsistem yang mengeluarkan permintaan (misalnya, "compact")
  • request_body_id: UUID yang mengidentifikasi body permintaan dari percobaan ini. Event api_response_body untuk percobaan yang berhasil membawa nilai yang sama, sehingga Anda dapat memasangkan respons dengan permintaan persis yang menghasilkannya. Memerlukan Claude Code v2.1.274 atau yang lebih baru

Event body respons API

Dicatat untuk setiap respons API yang berhasil saat OTEL_LOG_RAW_API_BODIES diatur.

Dalam mode file (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code juga menambahkan satu baris JSON ke <dir>/index.jsonl untuk setiap respons yang berhasil, dengan field timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file, dan response_file. Baca file ini untuk menemukan file permintaan dan respons di balik pesan transkrip tertentu tanpa melakukan query ke backend telemetri Anda. File indeks memerlukan Claude Code v2.1.274 atau yang lebih baru.

Nama Event: claude_code.api_response_body

Atribut:

  • Semua atribut standar
  • event.name: "api_response_body"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • body: Respons Messages API yang diserialisasi JSON, termasuk id, blok konten, penggunaan, dan alasan berhenti, dipotong pada batas konten (60 KB secara default). Konten extended thinking disunting. Hanya dipancarkan dalam mode inline (OTEL_LOG_RAW_API_BODIES=1).
  • body_ref: Path absolut ke file <dir>/<request_id>.response.json yang berisi body yang tidak dipotong. Hanya dipancarkan dalam mode file (OTEL_LOG_RAW_API_BODIES=file:<dir>).
  • body_length: Panjang body yang tidak dipotong. Dalam byte UTF-8 ketika OTEL_LOG_RAW_API_BODIES=file:<dir>, atau dalam unit kode UTF-16 ketika =1
  • body_truncated: "true" ketika terjadi pemotongan inline. Tidak ada dalam mode file dan ketika tidak terjadi pemotongan.
  • model: Pengidentifikasi model
  • query_source: Subsistem yang mengeluarkan permintaan
  • request_id: ID permintaan API, seperti "req_011...", dijelaskan di Atribut korelasi event.
  • request_body_id: request_body_id dari event api_request_body yang dijawab oleh respons ini. Memerlukan Claude Code v2.1.274 atau yang lebih baru
  • message.id: ID pesan yang ditetapkan API untuk respons, yaitu field id dari body respons. Memerlukan Claude Code v2.1.274 atau yang lebih baru
  • message.uuid: UUID entri transkrip terakhir dari respons. Bersama dengan request_body_id, atribut ini menautkan pesan transkrip dengan body permintaan dan respons di baliknya. Memerlukan Claude Code v2.1.274 atau yang lebih baru

Event keputusan tool

Dicatat saat keputusan izin tool dibuat (terima/tolak).

Nama Event: claude_code.tool_decision

Atribut:

  • Semua atribut standar

  • event.name: "tool_decision"

  • event.timestamp: Timestamp ISO 8601

  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event

  • tool_name: Nama tool (misalnya, "Read", "Edit", "Write", "NotebookEdit")

  • tool_use_id: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan tool_use_id yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.

  • request_id: request_id dari respons API yang berisi panggilan tool ini, sehingga Anda dapat melakukan join panggilan tersebut dengan event API dari respons itu. Tidak ada ketika respons tersebut tidak memiliki ID permintaan, atau ketika tidak ada respons API yang berisi panggilan tersebut. Memerlukan Claude Code v2.1.310 atau yang lebih baru

  • decision: "accept" atau "reject"

  • tool_source: Selalu ada. Asal-usul tool, sebagai kumpulan tertutup nilai yang ditulis CLI:

    • "builtin": tool milik CLI sendiri
    • "mcp": server MCP secara umum
    • "sdk_host_builtin_mcp": server in-process yang dibangun ke dalam Claude Desktop itu sendiri, dalam sesi yang dimiliki Claude Desktop. Claude Desktop memiliki sesi yang dimulainya dari salah satu entrypoint miliknya sendiri, claude-desktop, claude-desktop-3p, atau local-agent, ketika sesi tersebut bukan child bersarang; sesi bersarang, termasuk sesi yang dimunculkan Claude Code sendiri, melaporkan server ini sebagai "mcp"
  • source: Asal keputusan:

    • "config": Diputuskan secara otomatis tanpa meminta, oleh salah satu sumber berikut:

      • Pengaturan proyek
      • Aturan allow atau deny di pengaturan pribadi pengguna
      • Kebijakan terkelola enterprise
      • Flag --allowedTools atau --disallowedTools
      • Mode izin yang aktif
      • Pengklasifikasi auto mode, yang verdict-nya dicatat event yang sama di classifier_verdict
      • Pemberian akses untuk sisa sesi, yang diberikan pada permintaan izin sebelumnya dalam sesi CLI interaktif yang sama
      • Tool yang secara inheren aman

      Nilai source tidak menunjukkan sumber mana yang cocok. Ketika classifier_verdict ada, atribut tersebut memberikan hasil pengklasifikasi yang memutuskan panggilan. Tidak ada atribut tool_decision yang menyebutkan aturan izin atau pengaturan yang menolak panggilan.

      Claude Code juga melaporkan "config" ketika permintaan dialog izin itu sendiri gagal. Misalnya, permintaan tersebut gagal ketika callback canUseTool milik Agent SDK atau tool --permission-prompt-tool mengembalikan hasil yang tidak valid, atau ketika stream input ditutup saat permintaan masih tertunda.

    • "hook": Hook PreToolUse atau PermissionRequest mengembalikan keputusan.

    • "user_permanent": Dipancarkan ketika pengguna memilih "Yes, and don't ask again for ..." pada permintaan izin, yang menyimpan aturan allow ke pengaturan pribadinya. Di CLI interaktif, ini hanya dipancarkan untuk pilihan itu sendiri; panggilan berikutnya yang cocok dengan aturan yang disimpan memancarkan "config". Dalam sesi Agent SDK atau -p non-interaktif, baik pilihan awal maupun kecocokan aturan berikutnya memancarkan "user_permanent". Diperlakukan sebagai penerimaan.

    • "user_temporary": Dipancarkan ketika pengguna memilih "Yes" pada permintaan izin untuk persetujuan satu kali, atau memilih opsi yang memberikan akses untuk sisa sesi pada permintaan izin edit atau baca file. Di CLI interaktif, ini hanya dipancarkan untuk pilihan itu sendiri; panggilan berikutnya yang diizinkan oleh pemberian akses tingkat sesi tersebut memancarkan "config". Dalam sesi Agent SDK atau -p non-interaktif, baik pilihan maupun kecocokan berikutnya memancarkan "user_temporary". Diperlakukan sebagai penerimaan.

    • "user_abort": Dipancarkan ketika pengguna menutup permintaan izin tanpa menjawab. Dalam sesi Agent SDK dan -p non-interaktif, ini mencakup menginterupsi giliran saat permintaan izin canUseTool atau --permission-prompt-tool masih tertunda. Diperlakukan sebagai penolakan.

    • "user_reject": Dipancarkan ketika pengguna memilih "No" saat diminta. Di CLI interaktif, ini hanya dipancarkan untuk pilihan itu sendiri; panggilan yang cocok dengan aturan deny di pengaturan pribadi pengguna memancarkan "config". Dalam sesi Agent SDK atau -p non-interaktif, panggilan yang cocok dengan aturan deny di pengaturan pribadi memancarkan "user_reject". Diperlakukan sebagai penolakan.

  • classifier_verdict: Verdict pengklasifikasi auto mode untuk panggilan, atau alasan Claude Code menolak panggilan ketika tidak ada verdict yang datang. Memerlukan Claude Code v2.1.301 atau yang lebih baru

    • "allow": pengklasifikasi menyetujui panggilan
    • "block": pengklasifikasi memblokir panggilan. Pemeriksaan pengklasifikasi yang gagal di tengah jalan juga dapat berakhir sebagai "block", sehingga gangguan sebagian pada pengklasifikasi dapat muncul sebagai lebih banyak blokir, bukan sebagai "unavailable"
    • "no_verdict": pemeriksaan berjalan tetapi tidak memberikan verdict yang dapat digunakan, sehingga Claude Code menolak panggilan. Penolakan ini tidak berarti pengklasifikasi menilai panggilan tersebut tidak aman
    • "unavailable": permintaan ke pengklasifikasi gagal, misalnya karena rate limit, timeout, atau error koneksi, sehingga Claude Code menolak panggilan. Dengan tinjauan pengklasifikasi sisi server, nilai ini juga menandai panggilan yang ditolak karena server tidak mengembalikan verdict keamanan

    Atribut ini juga muncul pada panggilan plan mode ketika pengklasifikasi meninjau perintah dalam plan mode. Atribut ini tidak ada dalam kasus berikut:

    • Aturan izin allow atau deny yang memutuskan panggilan
    • Claude Code menyetujui panggilan dalam auto mode tanpa bertanya kepada pengklasifikasi
    • Pengguna menjawab permintaan izin yang ditampilkan Claude Code setelah blokir berulang
    • Dalam run -p tanpa --permission-prompt-tool, Claude Code menolak panggilan setelah blokir berulang karena tidak ada yang dapat menjawab permintaan izin. Event tersebut melaporkan decision sebagai "reject" dan source sebagai "config"
  • classifier_category (ketika OTEL_LOG_TOOL_DETAILS=1): Nama aturan bawaan yang disebutkan pengklasifikasi ketika memblokir panggilan, dalam huruf kecil dengan garis bawah, seperti "data_exfiltration" untuk aturan Data Exfiltration. Memerlukan Claude Code v2.1.301 atau yang lebih baru. Atribut ini ada ketika kedua kondisi berikut terpenuhi:

    • classifier_verdict bernilai "block"
    • Pengklasifikasi menyebutkan tepat satu aturan, dan aturan tersebut adalah aturan bawaan, bukan aturan yang Anda tulis

    Sebelum v2.1.302, atribut ini juga tidak ada pada blokir apa pun yang diputuskan oleh tinjauan pengklasifikasi sisi server.

  • permission_mode: Mode izin yang aktif ketika pemeriksaan izin panggilan ini dimulai: "default", "plan", "acceptEdits", "bypassPermissions", "dontAsk", atau "auto". Mode manual muncul sebagai "default". Panggilan subagent melaporkan mode izin subagent, bukan mode izin sesi. Memerlukan Claude Code v2.1.301 atau yang lebih baru

  • tool_parameters (ketika OTEL_LOG_TOOL_DETAILS=1): String JSON yang berisi parameter spesifik tool. Bentuknya sama dengan Event hasil tool, tanpa field pasca-eksekusi seperti git_commit_id. Nilainya dapat berbeda dari tool_result untuk panggilan yang diterima jika keputusan izin menulis ulang input tool melalui updatedInput. Gunakan atribut ini untuk melihat perintah mana yang ditolak ketika decision bernilai "reject".

    • Untuk tool "sdk_host_builtin_mcp": mcp_server_name dan mcp_tool_name disertakan bahkan ketika OTEL_LOG_TOOL_DETAILS nonaktif, karena aplikasi host yang mendefinisikan nama-nama ini; tanpanya, panggilan yang ditolak ke salah satu server bawaan ini tidak dapat diatribusikan pada stream default. Untuk server MCP yang dikonfigurasi pengguna, tool_name event selalu berupa literal "mcp_tool", dan nama server serta tool hanya muncul di tool_parameters dengan flag aktif; konten argumen memerlukan flag di mana pun.
    • Untuk tool Bash: mencakup bash_command, full_command, timeout, description, dangerouslyDisableSandbox. Tool bash workspace aplikasi desktop juga melaporkan tool_name sebagai Bash, tetapi hanya mencakup bash_command, full_command, dan timeout
    • Untuk tool MCP: mencakup mcp_server_name, mcp_tool_name
    • Untuk tool Skill: mencakup skill_name
    • Untuk tool Agent atau tool Task lama: mencakup subagent_type

Jika Anda menurunkan OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT milik SDK OpenTelemetry di bawah jumlah atribut pada event tool_decision, SDK akan membuang atribut yang ditetapkan Claude Code paling akhir. SDK membuang atribut berikut sebelum atribut lainnya, dengan urutan ini, dan melewati atribut yang tidak dibawa event:

  1. parent_agent_id
  2. agent_id
  3. request_id
  4. permission_mode
  5. classifier_category
  6. classifier_verdict

permission_mode, classifier_category, dan classifier_verdict dibuang dengan urutan ini pada Claude Code v2.1.302 atau yang lebih baru. parent_agent_id, agent_id, dan request_id memerlukan v2.1.310 atau yang lebih baru.

Event keamanan

Claude Code telah berhenti mengirimkan claude_code.safety_event:

  • v2.1.312 dan yang lebih baru: versi ini tidak mengirimkan event tersebut, dan tidak ada pengaturan yang dapat mengaktifkannya
  • v2.1.307 hingga v2.1.311: sesi berhenti mengirimkan event tersebut pada penyegaran feature flag berikutnya. Sesi yang tidak mengambil feature flag, seperti pada Amazon Bedrock, Agent Platform milik Google Cloud, atau Microsoft Foundry, dapat terus mengirimkannya.

Untuk melihat panggilan tool yang ditolak, lakukan query terhadap event tool_decision, yang menunjukkan bahwa suatu panggilan ditolak tetapi tidak selalu menunjukkan pemeriksaan mana yang menolaknya.

Detail event di sini menjelaskan event dari v2.1.307 hingga v2.1.311, di mana event keamanan mencatat kasus seperti berikut:

Event ini diekspor bersama event lainnya dan tidak memiliki pengaturan terpisah. Atribut milik event ini sendiri tidak berisi teks perintah, path file, nama host, maupun nama server dan tool MCP. Record tersebut juga membawa atribut standar yang dimiliki setiap event, yang dapat mencakup workspace.host_paths dan atribut repositori. Untuk melihat perintah atau tool MCP di balik sebuah event, tetapkan OTEL_LOG_TOOL_DETAILS=1 dan baca tool_parameters pada event tool_decision yang cocok.

Nama Event: claude_code.safety_event

Atribut:

  • Semua atribut standar
  • event.name: "safety_event"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • category: Pemeriksaan atau hasilnya, sebuah nilai kategori
  • decision: "accept", "reject", atau "sent_back" ketika hook memblokir hasil atau akhir giliran
  • decision_source: Siapa atau apa yang memutuskan, sebuah nilai source dari tool_decision atau "other"
  • reason_code: Alasan pemeriksaan, seperti "rule:policySettings", "mode:dontAsk", "hook:PreToolUse", "classifier:auto-mode", "bashMiss:too-complex", atau "unknown"
  • reason_type: Jenis alasan pemeriksaan, seperti "rule", "subcommandResults", "mode", "hook", "classifier", atau "asyncAgent"
  • rule_source: Sumber pengaturan dari aturan yang terlibat, seperti "policySettings", "userSettings", "projectSettings", "localSettings", "flagSettings", "cliArg", atau "session"
  • grant_scope: "once" atau "session" untuk permintaan izin yang disetujui tanpa menyimpan aturan ke file pengaturan
  • circuit_breaker: Pemeriksaan keamanan bawaan, seperti "dangerousRemoval", "outsideReadsBlocked", atau "claudeSettingsFile"
  • classifier_category: Dengan OTEL_LOG_TOOL_DETAILS=1, aturan bawaan di balik blokir auto mode, seperti "data_exfiltration"
  • hook_event: "pre_tool_use" untuk hook PreToolUse, atau "post_tool_use", "post_tool_use_failure", "stop", atau "subagent_stop" pada event "hook_review"
  • tool_class: "bash" untuk Bash dan Monitor, "powershell", "file" untuk Read, Edit, Write, NotebookEdit, Glob, dan Grep, "web" untuk WebFetch dan WebSearch, "mcp", atau "other"
  • tool_name: Nama tool, seperti "Bash" untuk tool bawaan, atau "mcp_tool", "skill_tool", "dynamic_tool", atau "other_tool"
  • tool_source: "builtin", "mcp", atau "sdk_host_builtin_mcp", seperti pada tool_decision
  • permission_mode: Mode izin panggilan saat diperiksa: "default", "plan", "acceptEdits", "bypassPermissions", "dontAsk", atau "auto"
  • tool_use_id: ID panggilan, seperti pada tool_decision dan tool_result
  • sandbox_violation_count: Berapa banyak koneksi atau permintaan berbeda dari perintah panggilan yang ditolak oleh proxy jaringan sandbox, "0" hingga "20" sebagai string. Penolakan dihitung untuk perintah ber-sandbox yang selesai di foreground
  • sandbox_enabled: "true" jika sandboxing aktif untuk sesi, selain itu "false"

Berikut adalah atribut milik event ini sendiri ketika aturan deny dari pengaturan terkelola menolak perintah Bash:

{
  "event.name": "safety_event",
  "category": "managed_policy",
  "decision": "reject",
  "decision_source": "config",
  "reason_code": "rule:policySettings",
  "rule_source": "policySettings",
  "tool_class": "bash",
  "tool_name": "Bash",
  "tool_source": "builtin",
  "permission_mode": "default",
  "tool_use_id": "toolu_01ABC123...",
  "sandbox_violation_count": "0",
  "sandbox_enabled": "false"
}
Kategori event keamanan
Nilai Pemeriksaan atau hasil Atribut detail
"permission_rule" Aturan izin deny atau ask di luar pengaturan terkelola rule_source
"managed_policy" Aturan deny atau ask dari pengaturan terkelola rule_source
"permission_mode" Mode dontAsk atau plan, atau permintaan izin tanpa kategori dalam sesi yang tidak dapat menampilkan permintaan izin, seperti dengan --permission-prompts none reason_code, reason_type
"hook" Sebuah hook, seperti PreToolUse atau PermissionRequest hook_event, reason_code
"auto_mode_block" Pengklasifikasi auto mode memblokir panggilan classifier_category
"auto_mode_no_verdict" Tidak ada verdict pengklasifikasi yang dapat digunakan, seperti setelah permintaan yang gagal reason_code
"safety_check" Pemeriksaan keamanan bawaan, seperti untuk Read, Edit, atau Write di luar direktori kerja Anda circuit_breaker
"static_analysis" Cara penulisan perintah Bash atau Monitor, seperti perintah yang terlalu kompleks untuk dianalisis reason_code
"sandbox_override" Permintaan izin untuk menjalankan perintah di luar sandbox reason_code
"user_rejected" Seseorang menolak atau menutup permintaan izin yang tidak memiliki kategori atau yang hanya diwajibkan oleh hook, atau callback canUseTool atau tool --permission-prompt-tool menolaknya decision_source
"sandbox_network" Panggilan berjalan dan proxy jaringan sandbox menolak koneksi atau permintaan sandbox_violation_count
"sandbox_other" Seperti "sandbox_network", tetapi tidak ada target yang ditolak yang terbaca sebagai nama host atau alamat IP sandbox_violation_count
"hook_review" Hook memblokir hasil panggilan atau akhir giliran hook_event
"other" Penolakan yang tidak dijelaskan oleh nilai lain reason_code

Untuk menemukan penolakan proxy di bawah category mana pun, filter sandbox_violation_count yang ada dan bukan "0".

Panggilan tanpa event keamanan

Untuk menemukan panggilan yang ditolak karena tidak ada yang dapat menjawab permintaan izin tanpa kategori, cari event tool_decision yang melaporkan "reject" dengan source "config" dan tidak ada event safety yang memiliki tool_use_id yang sama. Penolakan seperti ini terjadi dalam run -p yang tidak menggunakan --permission-prompt-tool maupun --permission-prompts none.

Periksa panggilan seperti berikut melalui event tool_decision, karena panggilan tersebut tidak memiliki event safety kecuali event "sandbox_network", "sandbox_other", atau "hook_review" yang dikirim setelah panggilan tersebut berjalan:

  • Panggilan yang disetujui pada permintaan izin tanpa kategori
  • Panggilan yang disetujui oleh callback canUseTool atau tool --permission-prompt-tool pada permintaan izin yang hanya diwajibkan oleh hook PreToolUse
  • Panggilan AskUserQuestion atau ExitPlanMode, baik ditolak maupun tidak
Permintaan izin tanpa kategori

Permintaan izin tidak memiliki kategori ketika tidak ada nilai category yang menyebutkan pemeriksaannya, seperti permintaan izin mode default untuk pengeditan di dalam direktori kerja Anda.

Event perubahan mode izin

Dicatat saat mode izin berubah, misalnya dari siklus Shift+Tab, keluar dari plan mode, atau pemeriksaan gerbang auto mode.

Untuk mengelompokkan panggilan tool berdasarkan mode izin tempat masing-masing diperiksa, gunakan permission_mode pada Event keputusan tool.

Nama Event: claude_code.permission_mode_changed

Atribut:

  • Semua atribut standar
  • event.name: "permission_mode_changed"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • from_mode: Mode izin sebelumnya, misalnya "default", "plan", "acceptEdits", "auto", atau "bypassPermissions"
  • to_mode: Mode izin yang baru
  • trigger: Penyebab perubahan, misalnya "shift_tab", "exit_plan_mode", atau "auto_gate_denied". Tidak ada untuk beberapa perubahan, seperti saat SDK mengatur mode izin melalui setPermissionMode()

Event auth

Dicatat saat /login atau /logout selesai.

Nama Event: claude_code.auth

Atribut:

  • Semua atribut standar
  • event.name: "auth"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • action: "login" atau "logout"
  • success: "true" atau "false"
  • auth_method: Metode autentikasi, seperti "oauth"
  • error_category: Jenis error kategoris ketika tindakan gagal. Pesan error mentah tidak pernah disertakan
  • status_code: Kode status HTTP sebagai string ketika tindakan gagal dengan error HTTP

Event koneksi server MCP

Dicatat saat server MCP terhubung, terputus, atau gagal terhubung.

Nama Event: claude_code.mcp_server_connection

Atribut:

  • Semua atribut standar
  • event.name: "mcp_server_connection"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • status: "connected", "failed", atau "disconnected"
  • transport_type: Transport server, seperti "stdio", "sse", atau "http"
  • server_scope: Cakupan tempat server dikonfigurasi, seperti "user", "project", atau "local"
  • duration_ms: Durasi percobaan koneksi dalam milidetik
  • error_code: Kode error ketika koneksi gagal
  • is_plugin: true ketika server disediakan oleh plugin, selain itu false
  • plugin_id_hash (ketika is_plugin bernilai true): Hash stabil dari nama plugin dan marketplace, untuk mengelompokkan event berdasarkan plugin tanpa mengekspos namanya. Claude Code menghitungnya seperti yang dijelaskan di event plugin dimuat
  • plugin.name (ketika is_plugin bernilai true): Nama plugin yang menyediakan server. Untuk plugin pihak ketiga, ini adalah string literal "third-party" kecuali OTEL_LOG_TOOL_DETAILS=1; ini melindungi nama plugin pihak ketiga agar tidak muncul di log secara default. Plugin dari sumber resmi Anthropic selalu diidentifikasi berdasarkan nama. Atribut plugin_id_hash dan plugin.name mengalir ke backend pemantauan milik Anda sendiri dan tidak dikirim ke Anthropic
  • server_name (ketika OTEL_LOG_TOOL_DETAILS=1): Nama server yang dikonfigurasi
  • error (ketika OTEL_LOG_TOOL_DETAILS=1): Pesan error lengkap ketika koneksi gagal

Event error internal

Dicatat ketika Claude Code menangkap error internal yang tidak terduga. Hanya nama kelas error dan kode bergaya errno yang dicatat. Pesan error dan stack trace tidak pernah disertakan. Event ini tidak dipancarkan ketika berjalan dengan Amazon Bedrock, Agent Platform milik Google Cloud, atau Microsoft Foundry, atau ketika DISABLE_ERROR_REPORTING ditetapkan.

Nama Event: claude_code.internal_error

Atribut:

  • Semua atribut standar
  • event.name: "internal_error"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di Atribut korelasi event
  • error_name: Nama kelas error, seperti "TypeError" atau "SyntaxError"
  • error_code: Kode errno Node.js seperti "ENOENT" jika ada pada error

Event plugin terpasang

Dicatat saat sebuah plugin selesai dipasang, baik dari perintah CLI claude plugin install maupun dari UI interaktif /plugin.

Nama Event: claude_code.plugin_installed

Atribut:

  • Semua atribut standar
  • event.name: "plugin_installed"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • marketplace.is_official: "true" jika marketplace tersebut adalah marketplace resmi Anthropic, "false" jika tidak
  • install.trigger: "cli" atau "ui"
  • plugin.name: Nama plugin yang dipasang. Untuk marketplace pihak ketiga, atribut ini hanya disertakan ketika OTEL_LOG_TOOL_DETAILS=1
  • plugin.version: Versi plugin jika dideklarasikan dalam entri marketplace. Untuk marketplace pihak ketiga, atribut ini hanya disertakan ketika OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: Marketplace tempat plugin dipasang. Untuk marketplace pihak ketiga, atribut ini hanya disertakan ketika OTEL_LOG_TOOL_DETAILS=1

Event plugin dimuat

Dicatat sekali untuk setiap plugin yang diaktifkan saat sesi dimulai. Gunakan event ini untuk menginventarisasi plugin mana yang aktif di seluruh armada Anda, sebagai pelengkap plugin_installed yang mencatat tindakan pemasangan itu sendiri.

Nama Event: claude_code.plugin_loaded

Atribut:

  • Semua atribut standar
  • event.name: "plugin_loaded"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • plugin.name: nama plugin. Untuk plugin di luar marketplace resmi dan bundel bawaan, nilainya adalah "third-party" kecuali jika OTEL_LOG_TOOL_DETAILS=1
  • marketplace.name: marketplace tempat plugin dipasang, jika diketahui. Disamarkan menjadi "third-party" dengan kondisi yang sama seperti plugin.name
  • plugin.version: versi dari manifest plugin. Hanya disertakan ketika nama tidak disamarkan dan manifest mendeklarasikan sebuah versi
  • plugin.scope: kategori asal plugin: "official", "community", "org", "user-local", atau "default-bundle"
  • enabled_via: bagaimana plugin menjadi aktif: "default-enable", "org-policy", "admin-install", "seed-mount", atau "user-install". Nilai "admin-install" berarti plugin diatur sebagai wajib atau dipasang otomatis untuk organisasi Anda di Organization settings > Plugins & skills. 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, yang hanya dikirim ke exporter yang Anda konfigurasi. Memungkinkan Anda menghitung jumlah plugin pihak ketiga berbeda yang dimuat di seluruh armada Anda tanpa mencatat namanya. Untuk plugin yang disinkronkan dari claude.ai, Claude Code melakukan hash nama plugin dengan nama marketplace yang dilaporkan claude.ai untuk plugin tersebut, atau dengan synced jika tidak ada. Sebelum v2.1.246, Claude Code tidak menggunakan nama marketplace yang dilaporkan claude.ai dalam hash
  • has_hooks: apakah plugin menyediakan hook, melalui konfigurasi hook atau sebagai mod
  • has_mcp: apakah plugin menyediakan server MCP
  • host_owned_mcp: true ketika host SDK mengelola koneksi MCP plugin ini dan Claude Code melewatkan pembacaan konfigurasi server MCP plugin tersebut, false jika tidak
  • skill_path_count: jumlah direktori skill yang dideklarasikan plugin
  • command_path_count: jumlah direktori perintah yang dideklarasikan plugin
  • agent_path_count: jumlah direktori agent yang dideklarasikan plugin
  • safe_mode: "true" ketika sesi dimulai dengan --safe-mode, "false" jika tidak. Dalam safe mode, event ini hanya melaporkan inventaris yang dikonfigurasi; perintah, skill, hook, dan server MCP plugin tidak dimuat. Memerlukan Claude Code v2.1.169 atau yang lebih baru

Event skill diaktifkan

Dicatat saat sebuah skill dipanggil, baik ketika Claude memanggilnya melalui tool Skill maupun ketika Anda menjalankannya sebagai perintah /.

Nama Event: claude_code.skill_activated

Atribut:

  • Semua atribut standar
  • event.name: "skill_activated"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • skill.name: Nama skill. Untuk skill yang didefinisikan pengguna dan skill plugin pihak ketiga, nilainya adalah placeholder "custom_skill" kecuali jika OTEL_LOG_TOOL_DETAILS=1
  • invocation_trigger: Bagaimana skill dipicu ("user-slash", "claude-proactive", atau "nested-skill")
  • skill.source: Dari mana skill dimuat (misalnya, "bundled", "userSettings", "projectSettings", "plugin")
  • skill.kind: "workflow" ketika skill tersebut adalah skill workflow. Tidak ada jika sebaliknya
  • plugin.name (ketika OTEL_LOG_TOOL_DETAILS=1 atau plugin berasal dari marketplace resmi): Nama plugin pemilik ketika skill disediakan oleh sebuah plugin
  • marketplace.name (ketika OTEL_LOG_TOOL_DETAILS=1 atau plugin berasal dari marketplace resmi): Marketplace tempat plugin pemilik dipasang, ketika skill disediakan oleh sebuah plugin

Event at mention

Dicatat saat Claude Code me-resolve sebuah @-mention dalam prompt. Tidak setiap mention memancarkan event: jalur keluar awal seperti penolakan izin, file yang terlalu besar, lampiran referensi PDF, dan kegagalan daftar direktori kembali tanpa mencatat log.

Setiap kali Claude Code membaca sebuah prompt, Claude Code mencatat paling banyak 100 event dengan mention_type bernilai "agent" dan 100 event dengan "mcp_resource". Mention yang melewati salah satu batas tersebut tetap di-resolve tetapi tidak memancarkan event.

Nama Event: claude_code.at_mention

Atribut:

  • Semua atribut standar
  • event.name: "at_mention"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • mention_type: Jenis mention ("file", "directory", "agent", "mcp_resource", "peer"). Nilai "peer" berarti Anda menyebut salah satu sesi Claude Code Anda yang lain. Memerlukan Claude Code v2.1.232 atau yang lebih baru
  • success: Apakah mention berhasil di-resolve ("true" atau "false")

Event API retries exhausted

Dicatat sekali ketika sebuah permintaan API gagal setelah lebih dari satu percobaan. Dipancarkan bersamaan dengan event api_error terakhir.

Nama Event: claude_code.api_retries_exhausted

Atribut:

  • Semua atribut standar
  • event.name: "api_retries_exhausted"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • model: Model yang digunakan
  • error: Pesan error terakhir
  • status_code: Kode status HTTP sebagai angka. Tidak ada untuk error non-HTTP.
  • total_attempts: Jumlah total percobaan yang dilakukan
  • total_retry_duration_ms: Total waktu nyata di seluruh percobaan
  • speed: "fast" atau "normal"

Event hook terdaftar

Dicatat sekali untuk setiap hook yang dikonfigurasi saat sesi dimulai. Gunakan event ini untuk menginventarisasi hook mana yang aktif di seluruh armada Anda, sebagai pelengkap event per eksekusi hook_execution_start dan hook_execution_complete.

Nama Event: claude_code.hook_registered

Atribut:

  • Semua atribut standar
  • event.name: "hook_registered"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • hook_event: jenis event 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" ketika sesi dimulai dengan --safe-mode, "false" jika tidak. Memerlukan Claude Code v2.1.169 atau yang lebih baru
  • hook_matcher (ketika OTEL_LOG_TOOL_DETAILS=1): string matcher dari konfigurasi hook, jika ada yang diatur
  • plugin.name (ketika hook_source adalah "pluginHook"): nama plugin penyedia. Untuk plugin di luar marketplace resmi dan bundel bawaan, nilainya adalah "third-party" kecuali jika OTEL_LOG_TOOL_DETAILS=1
  • plugin_id_hash (ketika hook_source adalah "pluginHook"): hash deterministik dari nama plugin dan marketplace, yang hanya dikirim ke exporter yang Anda konfigurasi. Memungkinkan Anda menghitung jumlah plugin penyedia yang berbeda tanpa mencatat namanya. Claude Code menghitungnya seperti yang dijelaskan di bagian event plugin dimuat

Event eksekusi hook dimulai

Dicatat saat satu atau lebih hook mulai dieksekusi untuk sebuah event hook.

Nama Event: claude_code.hook_execution_start

Atribut:

  • Semua atribut standar
  • event.name: "hook_execution_start"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • hook_event: Jenis event hook, seperti "PreToolUse" atau "PostToolUse"
  • hook_name: Nama lengkap hook termasuk matcher, seperti "PreToolUse:Write"
  • num_hooks: Jumlah perintah hook yang cocok
  • managed_only: "true" ketika hanya hook dari kebijakan terkelola yang diizinkan
  • hook_source: "policySettings" atau "merged"
  • safe_mode: "true" ketika sesi dimulai dengan --safe-mode, "false" jika tidak. Memerlukan Claude Code v2.1.169 atau yang lebih baru
  • hook_definitions: Konfigurasi hook yang diserialisasi sebagai JSON. Hanya disertakan ketika tracing beta terperinci dan OTEL_LOG_TOOL_DETAILS=1 keduanya diaktifkan

Event eksekusi hook selesai

Dicatat saat semua hook untuk sebuah event hook telah selesai.

Nama Event: claude_code.hook_execution_complete

Atribut:

  • Semua atribut standar
  • event.name: "hook_execution_complete"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • hook_event: Jenis event hook
  • hook_name: Nama lengkap hook termasuk matcher
  • num_hooks: Jumlah perintah hook yang cocok
  • num_success: Jumlah yang selesai dengan sukses
  • num_blocking: Jumlah yang mengembalikan keputusan pemblokiran
  • num_non_blocking_error: Jumlah yang gagal tanpa memblokir
  • num_cancelled: Jumlah yang dibatalkan sebelum selesai
  • total_duration_ms: Durasi wall-clock dari semua hook yang cocok
  • stdout_chars: Total karakter stdout di seluruh hook cocok yang berhasil. Memerlukan Claude Code v2.1.280 atau yang lebih baru
  • additional_context_chars: Total karakter additionalContext yang dikembalikan oleh hook yang cocok. Memerlukan Claude Code v2.1.280 atau yang lebih baru
  • system_message_chars: Total karakter systemMessage yang dikembalikan oleh hook yang cocok. Memerlukan Claude Code v2.1.280 atau yang lebih baru
  • initial_user_message_chars: Total karakter initialUserMessage yang dikembalikan oleh hook yang cocok. Memerlukan Claude Code v2.1.280 atau yang lebih baru
  • num_outputs_persisted: Jumlah output hook yang melebihi batas 10.000 karakter yang disimpan Claude Code ke sebuah file. Memerlukan Claude Code v2.1.280 atau yang lebih baru
  • managed_only: "true" ketika hanya hook dari kebijakan terkelola yang diizinkan
  • hook_source: "policySettings" atau "merged"
  • safe_mode: "true" ketika sesi dimulai dengan --safe-mode, "false" jika tidak. Memerlukan Claude Code v2.1.169 atau yang lebih baru
  • hook_definitions: Konfigurasi hook yang diserialisasi sebagai JSON. Hanya disertakan ketika tracing beta terperinci dan OTEL_LOG_TOOL_DETAILS=1 keduanya diaktifkan

Event metrik plugin hook

Dicatat saat hook plugin dari marketplace resmi memancarkan metrik per pemanggilan. Hanya plugin yang dipasang dari marketplace resmi Anthropic yang dapat memancarkannya. Plugin dari marketplace pihak ketiga dan hook yang dikonfigurasi pengguna tidak memancarkan ke event ini. Gunakan event ini untuk memantau perilaku plugin seperti tingkat temuan, biaya, dan durasi dari stack observabilitas Anda sendiri.

Nama Event: claude_code.hook_plugin_metrics

Atribut:

  • Semua atribut standar
  • event.name: "hook_plugin_metrics"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • plugin_id: pengidentifikasi plugin dalam bentuk <name>@<marketplace>
  • hook_event: jenis event hook yang mengirimkan metrik
  • Hingga 20 kunci metrik yang dikirim plugin. Nama cocok dengan ^[a-z][a-z0-9_]{0,39}$. Nilai berupa Boolean atau angka.

Event compaction

Dicatat saat compaction percakapan selesai.

Nama Event: claude_code.compaction

Atribut:

  • Semua atribut standar
  • event.name: "compaction"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • trigger: "auto" atau "manual"
  • success: "true" atau "false"
  • duration_ms: Durasi compaction
  • pre_tokens: Perkiraan jumlah token sebelum compaction
  • post_tokens: Perkiraan jumlah token setelah compaction
  • error: Pesan error ketika compaction gagal
  • precompute_reuse: Hanya diatur ketika trigger adalah "manual", atau ketika trigger adalah "auto" untuk idle compaction dalam sesi terminal interaktif. Auto-compaction dapat menyiapkan ringkasan di latar belakang sebelum context window penuh, dan atribut ini mencatat apakah compaction menggunakan kembali ringkasan yang telah disiapkan tersebut. "hit" berarti ringkasan tersebut digunakan kembali; "miss_custom_instructions", "miss_hook", dan "miss_not_ready" memberikan alasan mengapa ringkasan baru dihitung sebagai gantinya

Event subagent selesai

Dicatat saat sebuah subagent selesai dan mengembalikan hasilnya ke percakapan yang memulainya. Gunakan event ini untuk merangkum penggunaan tool dan waktu berjalan berdasarkan jenis subagent; untuk rangkuman token atau biaya, gunakan penghitung token dan penghitung biaya yang difilter ke query_source "subagent", karena total_tokens pada event ini hanya mencakup permintaan terakhir. Kategori "subagent" juga menghitung permintaan dari hook berbasis agent, yang tidak memancarkan event subagent.

Nama Event: claude_code.subagent_completed

Atribut:

  • Semua atribut standar
  • event.name: "subagent_completed"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • agent_type: Jenis subagent. Nama agent bawaan dan agent dari plugin marketplace resmi muncul apa adanya; nama agent lainnya diganti dengan "custom" kecuali jika OTEL_LOG_TOOL_DETAILS=1 diatur
  • agent.source: Asal definisi agent: built-in, plugin, atau sumber pengaturan yang mendefinisikan agent kustom, seperti userSettings atau projectSettings
  • is_built_in: Apakah subagent merupakan jenis agent bawaan
  • is_async: Apakah subagent berjalan di latar belakang
  • total_tokens: Jejak token dari permintaan API terakhir subagent: token input, pembuatan cache, pembacaan cache, dan output dari satu permintaan tersebut, kurang lebih sama dengan ukuran konteks subagent saat selesai. Bukan jumlah di seluruh proses berjalan
  • total_tool_uses: Jumlah panggilan tool yang dilakukan subagent di seluruh proses berjalan
  • duration_ms: Waktu berjalan dalam milidetik
  • model: Model yang di-resolve untuk menjalankan subagent
  • final_model: Model yang menghasilkan respons akhir subagent, yang berbeda dari model setelah terjadi peralihan di tengah proses seperti fallback
  • model_swapped: Apakah lebih dari satu model melayani permintaan subagent
  • plugin_id_hash, plugin.name: Ada untuk agent yang disediakan plugin. Nama plugin dari marketplace resmi muncul apa adanya; nama plugin lainnya diganti dengan "third-party" kecuali jika OTEL_LOG_TOOL_DETAILS=1 diatur

Event survei umpan balik

Dicatat saat survei kualitas sesi ditampilkan atau dijawab. Lihat Survei kualitas sesi untuk mengetahui apa yang dikumpulkan survei dan cara mengendalikannya.

Nama Event: claude_code.feedback_survey

Atribut:

  • Semua atribut standar
  • event.name: "feedback_survey"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • event_type: Event siklus hidup survei, misalnya "appeared", "responded", atau "transcript_prompt_appeared"
  • appearance_id: ID unik yang menghubungkan event-event yang dipancarkan untuk satu instans survei
  • survey_type: Survei mana yang menghasilkan event. "session" adalah prompt penilaian "How is Claude doing?"
  • response: Pilihan pengguna pada event responded
  • enabled_via_override: true ketika CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL diatur. Dikirim sebagai Boolean, bukan string. Ada pada event survei session. Filter berdasarkan atribut ini untuk memastikan override diterapkan di seluruh armada

Event retention sweep

Dicatat sekali untuk setiap kali pembersihan retensi berjalan, yang menghapus transkrip sesi dan data aplikasi lainnya yang lebih lama dari pengaturan cleanupPeriodDays. Claude Code menjalankan pembersihan ini di latar belakang paling banyak sekali per sesi, dan proses yang tidak menghapus apa pun tetap memancarkan event. Jika Claude Code telah menjalankan pembersihan ini di sesi mana pun pada mesin yang sama dalam 24 jam terakhir, Claude Code menunda pembersihan sesi ini setidaknya 10 menit, sehingga sesi yang keluar lebih cepat tidak memancarkan apa pun. Ketika Anda menjalankan claude -p dengan --bare, Claude Code tidak menjalankan pembersihan dan tidak memancarkan apa pun.

Seperti setiap event OTel di halaman ini, event ini hanya dikirim ke backend telemetri yang Anda konfigurasi. Memerlukan Claude Code v2.1.227 atau yang lebih baru.

Baca result untuk melihat apakah pembersihan berjalan:

  • "complete": pembersihan berjalan, dan event membawa hitungannya
  • "skipped": Claude Code tidak dapat menentukan periode retensi dengan aman, sehingga Claude Code menjeda pembersihan dan event tidak membawa hitungan. Jika skip_reason adalah "settings_unknowable" atau "settings_invalid_key_set", perbaiki error pengaturan yang dilaporkan /status pada mesin tersebut agar sesi berikutnya dapat menjalankan pembersihan

Ketika pengaturan terkelola mengatur cleanupPeriodDays, nilai terkelola tersebut menetapkan periode retensi dan pembersihan tetap berjalan meskipun file pengaturan pada cakupan berprioritas lebih rendah rusak atau tidak valid.

Nama Event: claude_code.retention_sweep

Atribut:

  • Semua atribut standar
  • event.name: "retention_sweep"
  • event.timestamp: Timestamp ISO 8601
  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event
  • result: "complete" ketika pembersihan berjalan, "skipped" ketika Claude Code menjedanya
  • period_days: Periode retensi yang digunakan saat pembersihan dimulai, dalam hari: cleanupPeriodDays dari pengaturan yang digabungkan, dengan perubahan apa pun dari hook settings.read diterapkan. 30 ketika hal itu membuat kunci tidak diatur. Pada event yang dilewati, nilai yang akan digunakan pembersihan, dihitung dari sumber pengaturan yang dapat dibaca Claude Code
  • used_default: "true" ketika period_days kembali ke 30, "false" jika tidak. Pada event complete, "true" berarti default 30 hari diterapkan
  • skip_reason: Alasan Claude Code menjeda pembersihan. Hanya ada ketika result adalah "skipped":
    • "user_source_disabled": Pengaturan pengguna dikecualikan, misalnya oleh flag --setting-sources atau opsi settingSources pada SDK, dan tidak ada sumber yang diaktifkan yang menyediakan cleanupPeriodDays
    • "settings_unknowable": Sebuah file pengaturan tidak dapat dibaca atau di-parse, sehingga cleanupPeriodDays atau desktopSessionCleanupPeriodDays mungkin diatur ke nilai yang tidak dapat dilihat Claude Code
    • "settings_invalid_key_set": Pengaturan memiliki error validasi dan cleanupPeriodDays atau desktopSessionCleanupPeriodDays diatur secara eksplisit, sehingga kembali ke default dapat menghapus atau menyimpan file yang bertentangan dengan pengaturan tersebut
    • "remote_settings_unknowable": Sebuah sesi di tab Code Claude Desktop pada deployment pihak ketiga meminta pengaturan yang dikelola server. Sesi tersebut tidak menerima respons yang dapat digunakan, sehingga cleanupPeriodDays mungkin diatur ke nilai yang tidak dapat dilihat Claude Code
  • transcripts_deleted: Jumlah transkrip sesi, yaitu file ~/.claude/projects/*/*.jsonl tingkat atas, yang dihapus oleh pembersihan
  • transcripts_exempted_desktop: Jumlah transkrip yang melewati periode retensi yang dipertahankan oleh pembersihan berdasarkan aturan Claude Desktop dan Cowork. Transkrip ini tidak dihitung dalam files_past_cutoff. Memerlukan Claude Code v2.1.248 atau yang lebih baru
  • session_files_deleted: Jumlah artefak yang dihapus oleh pembersihan file sesi: transkrip ditambah file pendamping per sesi seperti sidecar, rekaman, dan hasil tool
  • artifacts_deleted: Total item yang dihapus oleh pembersihan di seluruh direktori data yang dicakupnya, termasuk file sesi. Beberapa pembersihan menghitung seluruh pohon direktori yang dihapus sebagai satu item dan beberapa tahap pembersihan tidak berkontribusi pada penghitung, jadi anggap nilai ini sebagai batas bawah, bukan jumlah file yang tepat
  • files_retained_fresh: File yang diperiksa dan dibiarkan di tempatnya karena masih berada dalam periode retensi. Hanya pembersihan per file yang menghitungnya, sehingga nilainya merupakan batas bawah; nilai bukan nol adalah kondisi normal yang stabil
  • files_past_cutoff: File yang lebih lama dari periode retensi yang gagal dihapus oleh pembersihan, misalnya karena error hak akses atau file yang sedang dibuka. Hitungan ini juga mencakup setiap folder usang yang ditemukan pembersihan di bawah skills/synced/ atau plugins/synced/, baik folder tersebut dipindahkan ke tempat sampah maupun tidak. Selain folder-folder tersebut, nilai di atas nol berarti ada file yang bertahan melewati periode retensi yang dikonfigurasi; nol bukan bukti bahwa tidak ada file yang bertahan, karena kegagalan menghapus seluruh direktori dihitung dalam error_count sebagai gantinya
  • error_count: Jumlah error yang dialami pembersihan saat mendaftar atau menghapus file

Event pengaturan terkelola di-resolve

Dicatat bersama pengaturan terkelola yang di-resolve oleh sebuah sesi: sekali saat sesi dimulai, lagi ketika pengaturan terkelola atau status policy helper berubah selama sesi, dan ketika Claude Code menolak untuk dimulai atau mengakhiri sesi karena salah satu alasan yang tercantum pada atribut error.type. Gunakan event ini untuk menemukan mesin yang berjalan pada sumber terkelola yang tidak terduga, mesin yang policy helper-nya gagal, dan alasan sebuah mesin menolak untuk dimulai. Memerlukan Claude Code v2.1.274 atau yang lebih baru.

Secara default, event ini membawa sumber-sumber terkelola dan status policy helper, tetapi tidak membawa pengaturan itu sendiri. Untuk menambahkan atribut managed_settings.settings yang disamarkan dan digest managed_settings.resolved_sha256, atur OTEL_LOG_MANAGED_SETTINGS=1:

  • Atur di blok env pada pengaturan terkelola, pengaturan pengguna, atau --settings, atau di environment tempat Anda meluncurkan Claude Code. Nilai di pengaturan proyek atau lokal tidak mengaktifkannya, karena repositori yang di-clone dapat menulisnya.
  • Pengaturan yang dikelola server dapat mengaturnya tanpa menampilkan dialog persetujuan keamanan, karena variabel ini hanya menambahkan kebijakan organisasi Anda sendiri yang telah disamarkan ke event yang sudah diterima organisasi Anda.

Dalam sesi interaktif di folder yang belum Anda percayai, Claude Code tidak mengekspor event penolakan.

Nama Event: claude_code.managed_settings_resolved

Atribut:

  • Semua atribut standar

  • event.name: "managed_settings_resolved"

  • event.timestamp: Timestamp ISO 8601

  • event.sequence: penghitung per proses untuk mengurutkan event, dijelaskan di bagian Atribut korelasi event

  • managed_settings.trigger: "startup" untuk event saat sesi dimulai, "change" ketika pengaturan terkelola atau status policy helper berubah di kemudian waktu dalam sesi, atau "refused" ketika sebuah kebijakan pengaturan terkelola menghentikan sesi. Claude Code mengirim event change hanya ketika sebuah atribut berbeda dari event terakhir yang dikirimnya, dan nilai pengaturan yang berubah tetap dihitung meskipun OTEL_LOG_MANAGED_SETTINGS nonaktif

  • error.type: alasan Claude Code menghentikan sesi. Hanya ada pada event refused:

    • "helper_failed": sebuah proses policy helper gagal
    • "policy_invalid": pengaturan terkelola berisi error yang menghentikan Claude Code untuk dimulai, atau sebuah sumber admin gagal dimuat karena alasan selain penolakan baca, sehingga Claude Code tidak dapat memeriksa login organisasi atau penegakan penyedia
    • "provider_not_allowed": sesi akan menggunakan penyedia API, atau mengirim lalu lintas penyedia ke sebuah host, yang tidak diizinkan oleh daftar terkelola allowedProviders. Memerlukan Claude Code v2.1.285 atau yang lebih baru
    • "consent_rejected": pengguna menolak dialog persetujuan keamanan untuk pengaturan yang dikelola server
    • "force_refresh_failed": pengambilan pengaturan yang diwajibkan oleh forceRemoteSettingsRefresh gagal
    • "gateway_rejected": sebuah Claude apps gateway menjawab pemuatan pengaturan terkelola dengan HTTP 403
    • "version_below_minimum": versi Claude Code ini di bawah requiredMinimumVersion atau di atas requiredMaximumVersion
    • "_OTHER": pemuatan pengaturan terkelola Claude apps gateway gagal karena alasan lain
  • managed_settings.sources: setiap sumber terkelola yang menyediakan setidaknya satu kunci kebijakan, dimulai dari prioritas tertinggi, termasuk sumber yang kuncinya tidak berlaku di bawah first-wins. Nilainya adalah "remote", "plist" atau "hklm" untuk kebijakan MDM atau tingkat OS, "file" untuk file pengaturan terkelola dan drop-in, "parent" ketika sebuah host penyemat menyediakan pengaturan, dan "hkcu" untuk nilai registry HKCU Windows ketika Claude Code membacanya. Sumber yang hanya membawa kunci kontrol, atau yang tidak dapat dibaca Claude Code, tidak dicantumkan. Dipancarkan sebagai array string, kosong ketika tidak ada sumber terkelola yang menyediakan kunci kebijakan

  • managed_settings.source_behavior: nilai managedSourcesBehavior yang dibaca Claude Code, "first-wins" atau "merge". "first-wins" ketika tidak ada sumber yang mengatur kunci tersebut

  • managed_settings.helper.state: status policy helper yang dikonfigurasi oleh sumber MDM atau file yang dipilih:

    • "ok": output helper berfungsi sebagai pengaturan terkelola
    • "bad_path", "not_a_file", "exit_nonzero", "timed_out", "oversize", "parse_failed", "envelope_invalid", atau "schema_rejected": proses terakhir helper gagal. Kegagalan helper menjelaskan kasus-kasus tersebut
    • "none": tidak ada helper yang dikonfigurasi, atau sumber yang mengonfigurasinya bukan kebijakan MDM atau file pengaturan terkelola
  • managed_settings.helper.applied: "output" selama output helper itu sendiri berfungsi sebagai pengaturan terkelola, "none" jika tidak

  • managed_settings.helper.entry: "policyHelper" ketika Claude Code memilih sebuah policyHelper. Tidak ada ketika Claude Code tidak memilih helper apa pun

  • managed_settings.helper.path: path helper yang dikonfigurasi. Ada setiap kali Claude Code memilih sebuah helper, terlepas dari apakah OTEL_LOG_MANAGED_SETTINGS diatur atau tidak

  • managed_settings.resolved_sha256 (ketika OTEL_LOG_MANAGED_SETTINGS=1): SHA-256 dari pengaturan terkelola yang di-resolve sebelum penyamaran, diserialisasi sebagai JSON dengan kunci diurutkan secara rekursif dan tanpa spasi. Mesin dengan digest yang sama menjalankan kebijakan yang sama. Claude Code mengirim digest hanya dengan opt-in karena kebijakan yang pendek dapat dipulihkan dengan melakukan hash terhadap tebakan. Tidak ada ketika tidak ada pengaturan terkelola yang di-resolve, dan pada event refused

  • managed_settings.settings (ketika OTEL_LOG_MANAGED_SETTINGS=1): nama dan bentuk pengaturan terkelola yang di-resolve sebagai string JSON, dengan nilai-nilai disamarkan. Tidak ada pada event refused. Claude Code membangunnya dari skema pengaturannya:

    • Nama pengaturan yang dideklarasikan skema diekspor, dan kunci yang tidak dideklarasikannya diabaikan
    • Boolean, angka, dan nilai string yang dibatasi skema ke sekumpulan opsi tetap, seperti permissions.defaultMode, diekspor apa adanya. sandbox.network.httpProxyPort dan sandbox.network.socksProxyPort diekspor sebagai "[REDACTED]"
    • Setiap string lainnya, seperti model, apiKeyHelper, setiap nilai env, setiap URL, dan setiap perintah, diekspor sebagai "[REDACTED]"
    • Nama entri dari map, seperti nama variabel env dan ID plugin, diekspor apa adanya. Pengaturan yang entrinya tidak diberi tipe oleh skema, seperti vimInsertModeRemaps, diekspor sebagai satu "[REDACTED]", dan sandbox.ignoreViolations diekspor sebagai daftar dari daftar path-nya tanpa pola perintah
    • Sebuah daftar mempertahankan panjangnya, dengan setiap entri disamarkan menggunakan aturan yang sama
    • Aturan permissions.allow, permissions.deny, atau permissions.ask diekspor sebagai nama tool-nya dengan konten disamarkan, seperti Read([REDACTED]), ketika tool tersebut merupakan bawaan versi Claude Code ini atau merupakan referensi mcp__ seperti mcp__jira__create_issue. Aturan lainnya diekspor sebagai "[REDACTED]"
    • Hook mengikuti aturan yang sama, sehingga field dengan opsi tetap dan numerik seperti type dan timeout ditampilkan, sedangkan setiap perintah, URL, matcher, dan kondisi if diekspor sebagai "[REDACTED]"

    Misalnya, pengaturan terkelola dengan apiKeyHelper, dua variabel env, dan sebuah aturan deny diekspor sebagai {"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}.

    Claude Code memotong nilai pada 8 KB UTF-8, dan nilai yang dipotong bukan JSON yang valid

  • managed_settings.settings_truncated (ketika managed_settings.settings ada): true ketika Claude Code memotong managed_settings.settings pada 8 KB, false jika tidak. Dikirim sebagai Boolean, bukan string

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 token, pengguna, tim, model, skill.name, plugin.name, atau agent.name
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

Untuk membandingkan pengguna aktif di berbagai surface, atur OTEL_METRICS_INCLUDE_ENTRYPOINT=true untuk menambahkan app.entrypoint ke metrik dan acara. Kemudian hitung nilai user.account_uuid yang berbeda per entrypoint pada acara claude_code.user_prompt, atau pada claude_code.token.usage jika Anda hanya mengekspor metrik. Misalnya, gunakan cli untuk sesi CLI interaktif, dan kelompokkan claude-desktop, claude-desktop-3p, dan remote_desktop untuk tab Code di Claude Desktop.

user.account_uuid tidak mengidentifikasi orang dalam sesi channel Claude Tag dan tidak ada pada sesi tanpa akun Claude: lihat Mengatribusikan tindakan ke pengguna. Ketika satu orang memulai banyak sesi, atau sebuah sesi tidak menerima prompt, claude_code.session.count bertambah tanpa menambah pengguna aktif.

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, dan agent.name

[!NOTE]

Metrik biaya adalah perkiraan. Untuk data penagihan resmi, lihat Mengelola biaya untuk organisasi Anda.

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.

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 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 jumlah upaya. CLAUDE_CODE_MAX_RETRIES default ke 10 dan dibatasi pada 15; jika CLAUDE_CODE_RETRY_WATCHDOG diatur, nilai default-nya lebih tinggi dan tidak ada batas.

Ketika permintaan menghabiskan semua retry pada kesalahan transien, attempt paling banyak satu lebih dari batas efektif tersebut: 11 secara default.

Nilai yang lebih rendah tetap dapat berarti retry telah habis: attempt dimulai lagi dari 1 setiap kali Claude Code mengirim ulang permintaan setelah kegagalan streaming.

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.

Memetakan token input ke konvensi semantik OpenTelemetry GenAI

Claude Code mengekspor jumlah token input sebagaimana muncul dalam blok usage pada respons API, sehingga nilai-nilai ini tidak menyertakan token yang dibaca dari atau ditulis ke prompt cache:

Claude Code tidak mengatur atribut gen_ai.usage.*. Konvensi semantik OpenTelemetry GenAI menyatakan bahwa gen_ai.usage.input_tokens harus menyertakan token yang dibaca dari dan ditulis ke cache. Untuk menghitung total tersebut:

  • Dari span atau acara: jumlahkan input_tokens, cache_read_tokens, dan cache_creation_tokens
  • Dari metrik claude_code.token.usage: jumlahkan jenis "input", "cacheRead", dan "cacheCreation"

Konvensi tersebut juga mendefinisikan atribut terpisah untuk pembacaan cache dan penulisan cache:

  • cache_read_tokens dipetakan ke gen_ai.usage.cache_read.input_tokens
  • cache_creation_tokens dipetakan ke gen_ai.usage.cache_write.input_tokens. Versi konvensi yang lebih lama menamai atribut penulisan cache sebagai gen_ai.usage.cache_creation.input_tokens, jadi gunakan nama yang diharapkan oleh backend Anda.

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 yang masuk ke Claude apps gateway melalui /login, di mana ini adalah subjek IdP dari token yang dikeluarkan gateway.

Dalam sesi yang dimulai pengembang, panggilan alat MCP, perintah Bash, dan pengeditan file oleh karena itu dikaitkan dengan pengembang tersebut. Claude Code tidak bertindak di bawah akun layanan terpisah di sana; identitas yang dicatat pada setiap acara adalah akun Claude pengembang itu sendiri, atau identitas IdP pengembang pada sesi Claude apps gateway. Dalam sesi saluran Claude Tag, Claude bekerja sebagai identitas bersama organisasi Anda.

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: lihat Atribut standar untuk identitas yang diekspor mereka.

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: menyimpan mcp_server_scope dan tool_name diredaksi 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 pasangan mcp_server_name/mcp_tool_name di dalam tool_parameters, pengecualian yang sama yang dipengaruhi host seperti tool_decision
  • tool_decision: menyimpan tool_source dan tool_name diredaksi 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 pasangan mcp_server_name/mcp_tool_name di dalam tool_parameters
  • mcp_server_connection: menghilangkan server_name dan pesan kesalahan, tetapi menyimpan is_plugin, plugin_id_hash, dan plugin.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

Baris untuk safety_event hanya berlaku untuk sesi pada v2.1.307 hingga v2.1.311 yang masih mengirimkan acara tersebut.

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 tool diizinkan atau ditolak, dan dari mana keputusan berasal, seperti konfigurasi, hook, atau pengguna tool_decision decision, source, classifier_verdict, permission_mode, tool_name; tool_parameters saat Anda mengatur OTEL_LOG_TOOL_DETAILS=1
Pemeriksaan mana yang menolak panggilan tool atau mengharuskan permintaan izin untuknya safety_event di mana category menyebutkan pemeriksaannya, seperti "managed_policy", "permission_rule", "hook", atau "auto_mode_block". decision adalah "reject" untuk panggilan yang tidak dijalankan. Beberapa panggilan tidak memiliki acara keamanan category, decision, reason_code, rule_source, tool_name, tool_use_id
Pengklasifikasi auto mode mengizinkan atau memblokir panggilan tool, atau Claude Code menolak panggilan tanpa putusan pengklasifikasi tool_decision di mana classifier_verdict ada. Untuk penolakan tanpa putusan, classifier_verdict adalah "no_verdict" atau "unavailable" classifier_verdict, permission_mode, tool_name; classifier_category saat Anda mengatur OTEL_LOG_TOOL_DETAILS=1
Eskalasi mode izin permission_mode_changed from_mode, to_mode, trigger
Mode izin mana yang digunakan untuk memeriksa setiap panggilan tool, termasuk panggilan yang dibuat subagent tool_decision permission_mode, session.id
Hook kebijakan memblokir tindakan hook_execution_complete, yang tidak terkait dengan panggilan atau dengan tool_use_id hook_event, num_blocking
Panggilan tool yang ditolak hook tool_decision di mana decision adalah "reject" dan source adalah "hook" decision, source, tool_use_id
Hasil atau akhir giliran mana yang diblokir hook safety_event di mana category adalah "hook_review" category, hook_event; tool_use_id untuk panggilan tool
Proxy jaringan sandbox menolak koneksi atau permintaan dari perintah Bash atau PowerShell safety_event di mana sandbox_violation_count ada dan bukan "0" sandbox_violation_count, category, sandbox_enabled, tool_use_id
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)
Sumber pengaturan terkelola mana yang dijalankan mesin, apakah pembantu kebijakan sehat, dan mengapa mesin menolak untuk memulai managed_settings_resolved managed_settings.trigger, managed_settings.sources, managed_settings.source_behavior, managed_settings.helper.state, error.type; managed_settings.settings dan managed_settings.resolved_sha256 dengan OTEL_LOG_MANAGED_SETTINGS=1

Claude Code memancarkan aliran acara mentah saja. Deteksi anomali, baselining, korelasi lintas sesi, dan peringatan adalah tanggung jawab backend SIEM atau observabilitas Anda.

Petakan jalur egress ke kontrol terkelola dan acara

Tabel ini memasangkan jalur yang dapat membawa konten sesi keluar dari mesin, ditambah retensi lokal, dengan kunci pengaturan terkelola yang membatasinya dan acara yang mencatatnya. Untuk apa yang dikirim Claude Code sendiri ke Anthropic, seperti laporan /feedback, lihat Penggunaan data. Nama-nama tersebut tertaut ke entri referensinya, yang memberikan nilai dan default.

Jalur Kontrol terkelola Acara
Perintah Bash dan PowerShell sandbox.enabled, sandbox.failIfUnavailable, sandbox.allowUnsandboxedCommands, sandbox.network.allowManagedDomainsOnly, sandbox.network.allowedDomains tool_decision, tool_result
Server MCP allowedMcpServers, allowManagedMcpServersOnly, deniedMcpServers, managed-mcp.json mcp_server_connection, tool_decision, tool_result
Hook allowManagedHooksOnly, allowedHttpHookUrls hook_registered, hook_execution_start, hook_execution_complete
Plugin strictKnownMarketplaces, disableSideloadFlags, syncClaudeAiPlugins, syncClaudeAiSkills plugin_installed, plugin_loaded
WebFetch permissions.deny, allowManagedPermissionRulesOnly tool_decision, tool_result
Tool yang mengunggah ke claude.ai, seperti Artifact permissions.deny, enableArtifact tool_decision, tool_result
Remote Control disableRemoteControl Tidak ada acara khusus
Retensi transkrip lokal cleanupPeriodDays retention_sweep

Entri allowedHttpHookUrls, managed-mcp.json, dan acara hook memerlukan lebih dari yang ditunjukkan tabel:

  • allowedHttpHookUrls: entri digabungkan di seluruh file pengaturan, sehingga pengembang dapat menambahkan ke daftar terkelola yang kosong. allowManagedHooksOnly menentukan hook mana yang dijalankan
  • managed-mcp.json: untuk mematikan MCP, lihat Nonaktifkan MCP sepenuhnya. Untuk mengonfirmasi bahwa Claude Code membaca file tersebut, lihat Validasi konfigurasi
  • Acara hook: Claude Code mencatat hook_execution_start dan hook_execution_complete satu kali per acara hook, mencakup setiap hook yang cocok. OTEL_LOG_TOOL_DETAILS=1 saja tidak mencatat URL hook HTTP. Konfigurasi hook hanya muncul di hook_definitions, yang juga memerlukan beta tracing terperinci

OTEL_LOG_TOOL_DETAILS=1 menambahkan string perintah, nama server dan tool, serta input tool ke acara ini. Detail tersebut dapat berisi konten sensitif yang sama dengan sesi itu sendiri, jadi aktifkan hanya jika collector Anda disetujui untuk menyimpan konten tersebut.

Periksa sapuan retensi

Untuk memberikan periode retensi yang sama ke setiap mesin, atur cleanupPeriodDays dalam pengaturan terkelola. Untuk memeriksa bahwa mesin menjalankan sapuan dengan nilai tersebut, kumpulkan acara retention_sweep. period_days dan penghitungnya berupa string, jadi konversikan ke angka sebelum Anda membandingkannya.

Apa yang dilaporkan mesin Artinya
result adalah "skipped" Claude Code menjeda sapuan. skip_reason memberikan penyebabnya
used_default adalah "true", atau period_days berbeda dari nilai terkelola Anda Mesin tidak menerapkan cleanupPeriodDays terkelola Anda
error_count di atas nol Sapuan mengalami kesalahan saat mencantumkan atau menghapus file, sehingga data yang melewati periode retensi dapat tetap ada
files_past_cutoff di atas nol Sapuan gagal menghapus file yang melewati periode retensi, atau menemukan folder skills dan plugins tersinkronisasi yang usang. Baca bersama error_count
Tidak ada acara Bukan kegagalan dengan sendirinya

Mesin yang bekerja sebagaimana mestinya dapat tidak menghasilkan acara karena alasan seperti berikut:

  • Tidak ada yang memulai Claude Code: tidak ada sapuan yang berjalan, dan mesin menyimpan datanya hingga peluncuran berikutnya
  • Sesi tetap terbuka: Claude Code menjalankan sapuan paling banyak satu kali per sesi
  • Sesi berakhir lebih awal: sapuan yang belum selesai saat sesi keluar tidak memancarkan apa pun, begitu pula sapuan yang berhenti karena kesalahan tak terduga

Sapuan tidak mencakup setiap jalur. Disimpan hingga Anda menghapusnya mencantumkan apa yang tetap ada, dan Hapus data lokal menunjukkan cara menghapusnya.

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 Code dengan claude --debug-file <path> dan periksa log itu untuk kesalahan ekspor [3P telemetry].

Pertimbangan backend

Pilihan backend metrik, log, dan traces Anda menentukan jenis analisis yang dapat Anda lakukan:

Backend untuk metrik

  • Database deret waktu: Perhitungan laju, metrik agregat
  • Toko kolumnar: Kueri kompleks, analisis pengguna unik
  • Platform observabilitas lengkap: Kueri lanjutan, visualisasi, peringatan

Backend untuk acara dan log

  • Sistem agregasi log: Pencarian teks lengkap, analisis log
  • Toko kolumnar: Analisis acara terstruktur
  • Platform observabilitas lengkap: Korelasi antara metrik dan acara

Backend 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-code untuk sesi terminal, claude-code-desktop untuk sesi lokal yang dimulai dari tab Code di aplikasi Claude Desktop
  • service.version: Versi Claude Code saat ini, atau versi aplikasi Desktop untuk sesi lokal tab Code
  • os.type: Jenis sistem operasi (misalnya, linux, darwin, windows)
  • os.version: String versi sistem operasi
  • host.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 lokal 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
  • Secara default, konten file mentah dan cuplikan kode tidak disertakan dalam metrik atau acara. Jika Anda mengatur variabel seperti OTEL_LOG_TOOL_DETAILS atau OTEL_LOG_RAW_API_BODIES, acara dapat menyertakannya. Trace spans adalah jalur data terpisah: lihat poin OTEL_LOG_TOOL_CONTENT di bawah
  • Saat diautentikasi melalui OAuth, user.email disertakan 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. Saat diaktifkan:
    • Acara user_prompt membawa teks prompt dalam dua atribut, prompt dan prompt_text. Jika Anda membuang atau menyamarkan teks prompt acara berdasarkan nama atribut di collector Anda, sebutkan kedua atribut dalam aturan tersebut

      Processor attributes OpenTelemetry Collector ini menghapus kedua atribut dalam pipeline yang mencantumkannya:

      processors:
        attributes/drop-prompt-text:
          actions:
            - key: prompt
              action: delete
            - key: prompt_text
              action: delete
      
    • Dengan tracing aktif, span claude_code.interaction membawa teks prompt dalam atribut user_prompt-nya

    • Di bawah detailed beta tracing, spans juga membawa pesan pengguna baru, hasil tool, dan system reminder yang dikirim bersama setiap permintaan, teks system prompt, serta output model. Atribut konten di bawah detailed beta tracing mencantumkan setiap atribut. Acara claude_code.system_prompt membawa system prompt lengkap

  • 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 endpoint OTel yang Anda konfigurasikan, tidak pernah ke Anthropic. Ketika variabel ini tidak diatur, OTEL_LOG_USER_PROMPTS digunakan sebagai fallback, jadi atur OTEL_LOG_ASSISTANT_RESPONSES=0 jika Anda menginginkan konten prompt tanpa konten respons dalam acara. Di bawah detailed beta tracing, span claude_code.llm_request tetap membawa output model dalam response.model_output, yang mengikuti OTEL_LOG_USER_PROMPTS alih-alih variabel ini
  • Argumen input tool 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_decision dan tool_result membawa pasangan mcp_server_name/mcp_tool_name, nama yang ditulis host daripada konten argumen, bahkan dengan flag mati. Data ini dikirim hanya ke endpoint 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_result dan tool_decision menyertakan atribut tool_parameters dengan perintah Bash, nama server MCP dan tool, dan nama skill. Bidang seperti full_command dipancarkan tanpa pemotongan
    • Acara tool_result juga menyertakan atribut tool_input dengan jalur file, URL, pola pencarian, dan argumen lainnya. Nilai individual di atas 512 karakter dipotong dan total dibatasi hingga ~4 K karakter
    • Acara user_prompt menyertakan command_name verbatim untuk perintah custom, plugin, dan MCP
    • Penghitung biaya dan token dan acara api_request, api_error, dan api_refusal membawa nama agent, skill, plugin, dan server MCP dan tool yang sebenarnya dalam atribut atribusi mereka
    • Span claude_code.tool membawa atribut yang diturunkan dari input seperti file_path. Di bawah detailed beta tracing, span ini juga membawa atribut tool_input
  • Konten alat tidak dicatat dalam trace spans secara default. Untuk menyertakannya, atur OTEL_LOG_TOOL_CONTENT=1. Span claude_code.tool kemudian membawa acara span tool.output dengan konten file mentah, output perintah Bash, dan apa yang dikembalikan alat MCP, WebFetch, dan WebSearch, dipotong pada batas konten (60 KB secara default) per atribut. Hasil dari alat MCP, WebFetch, dan WebSearch memerlukan Claude Code v2.1.283 atau lebih baru. Konten alat juga menjangkau spans melalui new_context, yang gatenya berbeda per span. 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_BODIES di 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 konten OTEL_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 log api_request_body dan api_response_body untuk setiap panggilan API. Atribut body acara 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.json dan .response.json di bawah direktori tersebut, dan acara membawa jalur body_ref sebagai gantinya dari badan inline. Kirim direktori dengan pengumpul log atau sidecar daripada melalui aliran telemetri.

      Untuk setiap respons yang berhasil, Claude Code juga menambahkan satu baris ke index.jsonl di direktori tersebut, menghubungkan file respons ke file permintaan yang menghasilkannya dan ke pesan transkrip yang menjadi. Setiap baris tidak menyimpan konten pesan, dan bagian acara badan respons API mencantumkan bidangnya. File indeks memerlukan Claude Code v2.1.274 atau lebih baru

Memantau Claude Code di Amazon Bedrock

Untuk panduan pemantauan penggunaan Claude Code terperinci untuk Amazon Bedrock, lihat Claude Code Monitoring Implementation (Amazon Bedrock).