Cara Pantau Perbelanjaan Claude Code: Panduan Perbandingan
Ketahui perbezaan antara penganalisis log tempatan, papan pemuka Anthropic, dan OpenTelemetry untuk Claude Code. Pilih alat yang tepat untuk menjejak kos penggunaan token anda.
Perkara yang sebenarnya dibaca oleh penjejak perbelanjaan Claude Code
Setiap penjejak perbelanjaan Claude Code membaca salah satu daripada tiga sumber data, dan sumber tersebut menentukan soalan yang boleh dijawabnya. Penganalisis log membaca fail transkrip sesi pada cakera anda sendiri. Papan pemuka membaca rekod penggunaan yang disimpan oleh Anthropic untuk akaun atau organisasi anda. Bahagian belakang metrik membaca aliran OpenTelemetry (OTel) yang dikeluarkan oleh Claude Code apabila anda menghidupkannya. Ketiga-tiganya boleh menjadi tepat pada masa yang sama namun tetap tidak sepadan, kerana ia mengira perkara yang berbeza.
Panduan ini tidak menjelaskan semula token. cara Claude Code mengira penggunaan token merangkumi input, output, penulisan cache dan bacaan cache, dan tiada papan pemuka yang bermakna sehingga bahagian itu jelas. Soalan di sini lebih khusus: bagi setiap bentuk alat, apakah yang boleh dilihatnya, dan apakah yang tidak akan dapat dilihatnya.
Mengapa tiga penjejak perbelanjaan Claude Code muncul pada hari yang sama
Tiga penjejak perbelanjaan Claude Code yang berasingan telah diterbitkan pada hari yang sama. Ia bukanlah tiga versi bagi alat yang sama, dan itulah bahagian yang berguna. Satu alat menghuraikan fail sesi tempatan. Satu alat membungkus skrin penggunaan akaun. Satu lagi merupakan backend pengesanan (tracing) dihoskan yang anda jalankan sendiri.
Ia muncul serentak kerana kos sesi ejen tidak lagi jelas. Sembang biasa menelan kos yang lebih kurang sama dengan apa yang anda lihat pada skrin. Ejen membaca dua puluh fail, menjalankan suite ujian, dan menghantar semula keseluruhan perbualan pada setiap pusingan, jadi bil tersebut didorong oleh konteks yang tidak pernah anda taip. Dalam langganan, tiada angka dolar langsung, hanya bar penggunaan yang menjadi kosong lebih cepat pada hari-hari tertentu berbanding hari lain. Setiap satu daripada tiga bentuk ini mengisi bahagian yang berbeza dalam jurang tersebut.
Bentuk 1: penghurai log tempatan memberitahu anda kos hari ini
Claude Code menyimpan setiap perbualan sebagai JSON Lines (JSONL) pada ~/.claude/projects/<project>/<session-id>.jsonl, dengan <project> ialah laluan direktori kerja anda yang aksara bukan alfanumeriknya digantikan dengan -. Setiap giliran pembantu dalam fail tersebut membawa kiraan token untuk permintaannya. Penghurai log menjumlahkan kiraan tersebut dan menetapkan harganya.
ccusage ialah pilihan yang paling kerap digunakan. Ia tidak memerlukan pemasangan:
npx ccusage@latest daily
npx ccusage@latest daily --breakdown
npx ccusage@latest blocks
npx ccusage@latest session --jsondaily menjumlahkan mengikut tarikh. --breakdown memisahkan setiap baris mengikut model, iaitu cara anda mengetahui bahawa satu petang menggunakan Opus merangkumi sebahagian besar kos mingguan. blocks mengumpulkan mengikut tetingkap lima jam apabila langganan ditetapkan semula. session menjumlahkan setiap perbualan, dan --instances mengumpulkan mengikut projek supaya anda boleh melihat repositori mana yang mahal. Tambahkan --since dan --until untuk mengehadkan julat, dan jalankan npx ccusage@latest daily --help untuk format tarikh yang dijangkakan oleh versi anda. Setakat Ogos 2026, ia juga membaca CLI ejen lain, termasuk Codex dan OpenCode, yang penting jika anda membandingkannya.
Penetapan harga datang daripada jadual harga model, dan alat ini mempunyai tiga mod kos. --mode auto menggunakan nilai costUSD yang ditulis oleh Claude Code ke dalam fail apabila ia tersedia, dan mengira daripada kiraan token apabila ia tidak tersedia. --mode calculate sentiasa mengira daripada token dan mengabaikan sebarang kos yang direkodkan. --mode display hanya menunjukkan kos yang direkodkan dan mencetak $0.00 untuk baris yang tidak mempunyai kos. Jika jumlah kelihatan salah, jalankan laporan yang sama di bawah calculate dan kemudian di bawah display. Jurang yang besar antara kedua-duanya bermakna kebanyakan entri tidak membawa kos yang direkodkan, jadi semua yang anda baca hanyalah anggaran.
Data yang sama boleh menyuap prompt anda. ccusage statusline mencetak baris padat untuk bar status Claude Code, yang disambungkan ke ~/.claude/settings.json seperti mana-mana arahan bar status yang lain. Lihat membina bar status Claude Code untuk blok tetapan dan medan yang diterimanya.
Apa yang tidak dapat dilihat oleh penghurai log ialah apa-apa yang tidak berlaku pada mesin ini. Komputer riba kedua, sesi pada claude.ai, kerja rakan sepasukan: transkrip tersebut disimpan pada cakera masing-masing. Data lama juga hilang kerana transkrip dibersihkan selepas 30 hari secara lalai di bawah tetapan cleanupPeriodDays, jadi data suku tahun lepas telah tiada melainkan anda telah mengarkibkannya.
Terdapat satu lagi risiko, dan ia bersifat struktur. Dokumentasi Anthropic menyatakan bahawa format entri adalah dalaman kepada Claude Code dan berubah antara versi, jadi skrip yang menghurai fail ini secara terus boleh rosak pada mana-mana keluaran. Itu terpakai kepada setiap alat dalam bentuk ini. Ia juga merupakan sebab mengapa satu baris jq yang dibuat sendiri ke atas JSONL adalah idea yang lebih buruk daripada yang disangka: penghurai yang diselenggara menjejaki perubahan format untuk anda, dan satu baris anda akan melaporkan nombor salah yang meyakinkan pada hari sesuatu medan dinamakan semula.
Akhir sekali, angka dolar memerlukan peringatan tentang langganan. Anda tidak dibilkan setiap token pada Pro atau Max, jadi nombor tersebut adalah kos token anda pada kadar API senarai. Ia mengukur betapa berat penggunaan anda. Ia bukan bil anda. Jika soalan sebenar adalah pelan mana yang patut dipilih, perbandingan itu adalah latihan yang berasingan: lihat pengebilan API berbanding langganan Claude.
Bentuk 2: skrin penggunaan terbina dalam memberitahu anda model mana yang menghabiskan bajet
Claude Code mempunyai sistem pelaporannya sendiri dan kebanyakan pengguna tidak pernah membukanya. Jalankan /usage di dalam sesi. Blok Sesi di bahagian atas menunjukkan token mengikut model dan nilai dolar bagi sesi semasa, yang dikira secara setempat daripada kiraan token pada kadar senarai standard. Angka tersebut tidak mencerminkan diskaun atau harga promosi, jadi ia mungkin berbeza daripada invois anda. Jumlah tersebut ditetapkan semula apabila /clear memulakan perbualan baharu.
Pada pelan Pro, Max, Team atau Enterprise, skrin yang sama menunjukkan jumlah had pelan yang telah anda gunakan, dan mengaitkan penggunaan terkini dengan kemahiran, subejen, pemalam dan pelayan MCP individu sebagai peratusan daripada jumlah keseluruhan. Ia menandakan gelagat yang menyumbang 10% atau lebih daripada penggunaan terkini, seperti konteks yang panjang atau cache miss. Tekan d atau w untuk bertukar antara 24 jam terakhir dan 7 hari terakhir. Angka-angka ini adalah anggaran dan dikira daripada sejarah sesi setempat pada mesin ini, jadi peranti kedua tidak dikira. Apabila bar tersebut kosong dan bukan sekadar rendah, skrin memberitahu anda bahawa tetingkap telah ditutup tetapi tidak menyatakan cara untuk terus bekerja, dan apa yang perlu dilakukan setelah anda mencapai had adalah keputusan berasingan mengenai model, konteks dan pelan.
Bagi organisasi yang mempunyai lebih daripada seorang pembangun, angka tersebut beralih ke peringkat akaun. Organisasi API mendapat halaman penggunaan Konsol, papan pemuka Claude Code dengan perbelanjaan dan baris kod yang diterima bagi setiap ahli, serta API Analitis Claude Code yang mengembalikan metrik harian bagi setiap pengguna yang sama dengan kunci pentadbir. Pelan Team dan Enterprise mendapat laporan perbelanjaan dalam konsol pentadbir dengan eksport CSV, dikemas kini setiap hari, dan Enterprise menambah API analitis. Mana satu yang anda lihat bergantung pada cara setiap pembangun mendaftar masuk, jadi organisasi campuran perlu membaca dua laporan dan menambahkannya secara manual.
Untuk menentukan saiz bajet, angka yang diterbitkan dalam dokumentasi kos Anthropic setakat Ogos 2026 adalah purata sekitar $13 bagi setiap pembangun untuk setiap hari aktif dan $150 hingga $250 bagi setiap pembangun sebulan, dengan 90% pengguna di bawah $30 bagi setiap hari aktif. Anggap itu sebagai penanda aras yang diterbitkan daripada penggunaan perusahaan, bukan sebagai ramalan untuk pasukan anda. Jalankan kumpulan perintis dan buat pengukuran sebelum anda membuat ekstrapolasi.
Apa yang tidak dapat dilihat oleh papan pemuka adalah sebarang perincian di bawah peringkat hari dan individu. Ia akan memberitahu anda bahawa Opus digunakan paling banyak pada hari Selasa. Ia tidak akan memberitahu anda prompt mana, repositori mana atau tugasan CI mana yang menyebabkannya. Ia juga mempunyai kelewatan, kerana laporan organisasi dikemas kini setiap hari, jadi ia merupakan alat semakan dan bukannya cara untuk mengesan ejen yang tidak terkawal pada petang ini. Mengesan ejen yang tidak terkawal memerlukan had, bukan laporan, yang merupakan topik bagi mengekalkan kos ejen dalam had pada VPS.
Bentuk 3: tindanan OpenTelemetry anda sendiri memberitahu anda gesaan (prompt) mana yang merosot
Claude Code mengeluarkan metrik dan peristiwa OpenTelemetry sebaik sahaja anda menetapkan satu pemboleh ubah persekitaran. Ini adalah satu-satunya pilihan yang menstrim data token dan kos bagi setiap pengguna ke dalam sistem yang anda kawal dalam masa hampir nyata. Metrik tersebut merangkumi claude_code.cost.usage dalam USD, claude_code.token.usage dalam token, claude_code.session.count dan claude_code.active_time.total.
Metrik token adalah yang paling menarik kerana atributnya. Setiap titik data membawa type, iaitu input, output, cacheRead atau cacheCreation, ditambah dengan model dan query_source, iaitu main, subagent atau auxiliary. Ia juga membawa agent.name, skill.name, mcp_server.name dan mcp_tool.name. Ini mencukupi untuk menjawab soalan yang tidak dapat dicapai oleh papan pemuka: berapa banyak bil yang datang daripada subejen berbanding giliran anda sendiri, sama ada satu pelayan MCP menggandakan token input anda, atau sama ada bacaan cache merosot selepas seseorang menyunting CLAUDE.md. Gelagat cache biasanya merupakan tempat di mana kejutan tersembunyi, dan apabila caching gesaan berbaloi menjelaskan perkara yang anda lihat.
Satu pembetulan yang perlu dibuat, kerana ia sering timbul dalam setiap perbincangan mengenai perkara ini. Langfuse ialah backend pengesanan (tracing) yang dihoskan sendiri dengan baik, dan menjalankannya pada VPS diliputi dalam menghoskan sendiri Langfuse untuk pengesanan ejen. Endpoint OTLP-nya hanya menerima trace. Claude Code mengeksport metrik dan peristiwa log, bukan span, jadi menghalakan OTEL_EXPORTER_OTLP_ENDPOINT ke Langfuse akan membiarkan projek kosong dan tidak memberikan anda ralat yang berguna untuk dibaca. Langfuse ialah alat yang tepat untuk ejen yang anda bina sendiri pada API, di mana kod anda sendiri mencipta setiap span dengan gesaan, model dan kosnya. Bagi CLI Claude Code, stor metrik adalah padanan yang sesuai.
Menyediakan penjejakan perbelanjaan Claude Code pada VPS anda sendiri
Dua servis sudah memadai: pengumpul (collector) untuk menerima metrik, dan Prometheus untuk menyimpannya. Pastikan kedua-duanya tidak terdedah kepada internet awam, kerana port OTLP yang terbuka membenarkan penulisan daripada sesiapa sahaja yang menemuinya. Tulis /opt/ccmetrics/compose.yaml:
services:
collector:
image: otel/opentelemetry-collector-contrib:latest
command: ["--config=/etc/otel/config.yaml"]
volumes:
- ./collector.yaml:/etc/otel/config.yaml:ro
ports:
- "10.8.0.1:4318:4318"
restart: unless-stopped
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom-data:/prometheus
ports:
- "127.0.0.1:9090:9090"
restart: unless-stopped
volumes:
prom-data:10.8.0.1 ialah alamat pelayan di dalam terowong WireGuard, supaya pengumpul boleh dicapai dari mesin anda dan bukan dari tempat lain. Alamat di hadapan port memainkan peranan penting di sini, kerana port Docker yang diterbitkan tidak ditapis oleh ufw: lihat mengapa port Docker yang diterbitkan memintas ufw. Menyediakan terowong itu sendiri adalah VPN WireGuard pada VPS anda sendiri.
/opt/ccmetrics/collector.yaml:
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
prometheus:
endpoint: 0.0.0.0:8889
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]/opt/ccmetrics/prometheus.yml. Port 8889 tidak pernah diterbitkan ke hos, kerana Prometheus mencapai pengumpul melalui rangkaian Compose menggunakan nama servis:
global:
scrape_interval: 30s
scrape_configs:
- job_name: claude-code
static_configs:
- targets: ["collector:8889"]cd /opt/ccmetrics
docker compose up -d
docker compose logs collectorLog pengumpul sepatutnya berakhir dengan Everything is ready. Begin running and processing data.. Log yang terhenti pada ralat konfigurasi bermakna YAML tidak dapat dihuraikan, dan kontena akan dimulakan semula secara berulang.
Sekarang, halakan Claude Code kepadanya. Pada setiap mesin yang menjalankan Claude Code, tambahkan ini ke dalam ~/.claude/settings.json:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "none",
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://10.8.0.1:4318",
"OTEL_METRIC_EXPORT_INTERVAL": "10000"
}
}Mulakan sesi, hantar satu prompt, tunggu selang eksport (10 saat di sini, 60 saat secara lalai), kemudian tanya Prometheus apa yang telah dipelajarinya:
curl -s http://localhost:9090/api/v1/label/__name__/values | grep -o 'claude_code[a-z_]*'Anda sepatutnya mendapat beberapa nama yang bermula dengan claude_code_. Pengeksport menukar titik kepada garis bawah dan menambah unit, jadi rentetan tepat bergantung pada versi pengumpul anda. Hasil yang kosong bermakna tiada apa-apa yang sampai. Pastikan protokol dan port adalah sepadan, kerana http/protobuf pergi ke 4318 dan grpc pergi ke 4317, dan ketidakpadanan akan menyebabkan kegagalan secara senyap. Jalankan claude --debug dan log nyahpepijat akan melaporkan ralat eksport OTel.
Untuk satu mesin dan tiada pelayan, langkau semua langkah di atas. Tetapkan OTEL_METRICS_EXPORTER=prometheus dan Claude Code akan mendedahkan titik akhir (scrape endpoint) pada http://localhost:9464/metrics itu sendiri. Apabila prometheus adalah satu-satunya pengeksport yang disenaraikan, Claude Code akan menggugurkan unit USD, tokens dan s daripada nama metrik supaya hasil scrape kekal dalam format teks Prometheus yang sah.
Satu keputusan privasi berkaitan dengan bentuk ini. Secara lalai, hanya kiraan yang meninggalkan mesin, tiada teks prompt dan tiada output alat. OTEL_LOG_USER_PROMPTS=1 dan OTEL_LOG_TOOL_CONTENT=1 mengubah perkara itu, dan kemudian kotak metrik anda akan menyimpan kod sumber serta apa sahaja yang berada dalam konteks. Aktifkan tetapan tersebut dengan sengaja, dan baca menjaga rahsia daripada konteks ejen terlebih dahulu.
Menjejak perbelanjaan bagi larian skrip dan CI
Larian bukan interaktif sering mengejutkan pengguna kerana tiada sesiapa yang memantau skrin. claude -p dengan --output-format json melaporkan kos larian tersebut dalam payload hasilnya:
claude -p "summarise the failing tests" --output-format json | jq '.total_cost_usd'Payload tersebut membawa total_cost_usd berserta perincian mengikut model, jadi kerja CI boleh merekodkan perbelanjaannya sendiri tanpa melibatkan papan pemuka. Tambahkan nilai tersebut ke dalam fail, atau tolaknya sebagai metrik kepada pengumpul di atas. Ini merupakan penjejakan perbelanjaan paling murah yang berguna, dan ia hanya menelan kos satu panggilan jq bagi setiap larian.
Mod kegagalan dan perkara yang akan anda lihat
Laporan kosong. npx ccusage@latest daily tidak mencetak baris bermakna ia tidak membaca lokasi tempat Claude Code menulis. CLAUDE_CONFIG_DIR memindahkan lokasi tersebut, dan parser perlu dimaklumkan mengenainya. Jika baris wujud tetapi terhenti kira-kira sebulan yang lalu, itu adalah cleanupPeriodDays yang berfungsi seperti yang direka bentuk: transkrip dialih keluar selepas 30 hari secara lalai.
Dua mesin melaporkan jumlah yang berbeza. Ini dijangkakan dan bukan pepijat. Kedua-dua /usage dan mana-mana parser log hanya membaca sejarah sesi tempatan, jadi penggunaan daripada peranti lain atau daripada claude.ai tidak wujud dalam kedua-duanya.
Jumlah tempatan tidak sepadan dengan invois. Angka tempatan dikira daripada kiraan token pada kadar senarai standard. Ia tidak mengetahui tentang harga promosi atau diskaun kontrak, dan dalam langganan, token anda tidak dibilkan secara individu sama sekali. Halaman penggunaan Console adalah autoritatif untuk pengebilan API.
Kos meningkat semasa anda melakukan kerja yang sama. Semak lajur cache sebelum perkara lain. Sesi yang panjang menghantar semula keseluruhan sejarahnya pada setiap pusingan, yang diletakkan harga pada kadar cache semasa cache panas dan pada kadar input penuh sebaik sahaja ia menjadi sejuk, jadi satu rehat yang panjang memproses semula keseluruhan perbualan. Itu ditunjukkan sebagai nombor input yang besar di sebelah nombor output yang kecil, dan input berbanding harga token output menjelaskan mengapa kedua-duanya bergerak secara bebas.
Satu hari dengan subagent kelihatan mustahil. Setiap subagent menjalankan tetingkap konteksnya sendiri, jadi penggunaan token berskala mengikut berapa banyak yang dijalankan dan berapa lama setiap satunya bertahan. Hanya data OTel yang memisahkannya, melalui atribut query_source pada claude_code.token.usage. Parser log akan menunjukkan jumlah keseluruhan kepada anda dan membiarkan anda meneka.
FAQ
Adakah ccusage menunjukkan jumlah yang sebenarnya dibilkan kepada saya dalam pelan Max?
Tidak. Dalam pelan langganan, anda tidak dibilkan mengikut token. Oleh itu, pengurai log (log parser) meletakkan harga token anda berdasarkan kadar API senarai standard dan menunjukkan kos yang sepatutnya dibayar jika menggunakan API. Ini merupakan ukuran relatif yang baik untuk melihat tahap penggunaan harian, serta berguna untuk membandingkan projek atau model antara satu sama lain. Bagi jumlah yang perlu dibayar, halaman penggunaan (usage page) dalam Console merangkumi bil API, manakala halaman bil pelan merangkumi langganan anda.
Di manakah Claude Code menyimpan fail sesi yang dibaca oleh alatan ini?
Di dalam ~/.claude/projects/<project>/<session-id>.jsonl, dengan <project> ialah laluan direktori kerja yang aksara bukan alfanumeriknya telah digantikan dengan -. Setiap baris merupakan objek JSON bagi satu mesej, penggunaan alat, atau entri metadata. CLAUDE_CONFIG_DIR memindahkan keseluruhan direktori tersebut, dan cleanupPeriodDays dalam settings.json mengawal tempoh pengekalan selama 30 hari. Anthropic mendokumentasikan format entri ini sebagai format dalaman yang mungkin berubah antara versi, jadi gunakan alat yang diselenggara untuk menghuraikannya dan bukannya skrip anda sendiri.
Bolehkah saya menghantar telemetri Claude Code ke Langfuse?
Tidak secara terus. Endpoint OTLP Langfuse menerima trace, manakala Claude Code mengeksport metrik dan peristiwa log dan bukannya span, jadi data tersebut tidak mempunyai destinasi. Hantar metrik Claude Code ke pengumpul OpenTelemetry dan simpan dalam Prometheus. Gunakan Langfuse untuk ejen yang anda bina sendiri menggunakan API, di mana kod anda sendiri mengeluarkan span yang membawa maklumat prompt, model dan kos.
Mengapa angka tempatan saya tidak sepadan dengan halaman penggunaan Console?
Kerana ia dikira secara berbeza. /usage dan pengurai log menjumlahkan kiraan token daripada fail sesi pada mesin yang anda gunakan, kemudian meletakkan harga berdasarkan kadar senarai standard. Console melaporkan jumlah yang sebenarnya dicaj kepada organisasi anda, merentasi setiap mesin dan setiap kunci, selepas sebarang diskaun. Perbezaan angka adalah perkara biasa. Perbezaan yang sangat besar biasanya bermakna terdapat peranti kedua, runner CI, atau ahli pasukan lain yang menggunakan akaun yang sama untuk tujuan bil.
Bagaimanakah cara saya menjejaki kos bagi satu larian claude -p dalam CI?
Jalankan ia dengan --output-format json dan baca total_cost_usd daripada hasilnya, contohnya menggunakan claude -p "..." --output-format json | jq '.total_cost_usd'. Payload yang sama merangkumi pecahan mengikut model dan ID sesi. Rekodkan nilai tersebut bagi setiap kerja dan anda akan mendapat data perbelanjaan bagi setiap pipeline tanpa memerlukan ejen, papan pemuka atau perkhidmatan tambahan.