SSD Nodes Learn 🎉 VPS $4.99/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor

Claude Code harcama takip araçları karşılaştırması

Claude Code harcama takipçileri farklı soruları yanıtlar. Yerel log ayrıştırıcıları, yerleşik kullanım ekranlarını ve kendi OpenTelemetry yığınınızı karşılaştırın.

Bir Claude Code harcama izleyicisi gerçekte ne okur

Her Claude Code harcama izleyicisi üç veri kaynağından birini okur. Hangi soruyu yanıtlayabileceğini veri kaynağı belirler. Log ayrıştırıcı, kendi diskinizdeki oturum transkripti dosyalarını okur. Dashboard, Anthropic’in hesabınız veya kuruluşunuz için tuttuğu kullanım kayıtlarını okur. Metrik backend’i, etkinleştirdiğinizde Claude Code’un gönderdiği OpenTelemetry (OTel) akışını okur. Bu üçü de aynı anda doğru olabilir ve yine de farklı sonuçlar verebilir. Bunun nedeni farklı şeyleri saymalarıdır.

Bu kılavuz token kavramını yeniden açıklamaz. Claude Code’un token kullanımını nasıl saydığı bölümünde input, output, cache yazma ve cache okuma işlemleri ele alınır. Bu bölüm netleşmeden hiçbir dashboard anlamlı değildir. Buradaki soru daha sınırlıdır: Her araç türü neyi görebilir ve neyi hiçbir zaman göremez?

Aynı gün neden üç Claude Code harcama takip aracı ortaya çıktı

Aynı gün üç ayrı Claude Code harcama takip aracı yayımlandı. Bunlar aynı aracın üç sürümü değildi ve asıl önemli nokta buydu. Araçlardan biri yerel oturum dosyalarını ayrıştırıyordu. Biri hesap kullanım ekranlarını sarmalıyordu. Diğeri ise kendiniz çalıştırdığınız, barındırılan bir izleme arka ucuydu.

Bu araçlar aynı dönemde ortaya çıktı; çünkü bir agent oturumunun maliyeti artık açıkça görülemiyordu. Bir sohbetin maliyeti ekranda görebildiğiniz kadardır. Bir agent yirmi dosya okur, test paketini çalıştırır ve her turda tüm konuşmayı yeniden gönderir. Bu nedenle fatura, sizin yazmadığınız bağlam tarafından belirlenir. Abonelikte ise hiçbir dolar tutarı gösterilmez; yalnızca bazı günlerde diğerlerinden daha hızlı tükenen bir kullanım çubuğu bulunur. Bu üç aracın her biri bu eksikliğin farklı bir bölümünü giderir.

Şekil 1: yerel bir log ayrıştırıcı, bugünün maliyetini gösterir

Claude Code, her görüşmeyi ~/.claude/projects/<project>/<session-id>.jsonl altında JSON Lines (JSONL) biçiminde saklar. Buradaki <project>, alfasayısal olmayan karakterlerin - ile değiştirildiği çalışma dizini yoludur. Bu dosyadaki her assistant turu, isteğe ait token sayılarını içerir. Bir log ayrıştırıcı bu değerleri toplar ve maliyetini hesaplar.

Çoğu kişinin kullandığı araç ccusage olur. Kurulum gerektirmez:

npx ccusage@latest daily
npx ccusage@latest daily --breakdown
npx ccusage@latest blocks
npx ccusage@latest session --json

daily tarihe göre toplamları gösterir. --breakdown her satırı modele göre ayırır. Böylece bir Opus öğleden sonrasının haftanın büyük bölümünü oluşturduğunu görebilirsiniz. blocks toplamları aboneliğin sıfırlandığı beş saatlik pencereye göre gruplar. session görüşme başına toplamları gösterir. --instances proje bazında gruplama yapar; böylece hangi repository'nin daha pahalı olduğunu görebilirsiniz. Aralığı sınırlandırmak için --since ve --until eklenmelidir. Sürümünüzün beklediği tarih biçimini görmek için npx ccusage@latest daily --help çalıştırılmalıdır. Ağustos 2026 itibarıyla araç, Codex ve OpenCode dahil diğer agent CLI'larını da okur. Bu özellik, araçları karşılaştırırken önemlidir.

Fiyatlandırma bir model fiyat tablosundan alınır. Araçta üç maliyet modu bulunur. --mode auto, mevcut olduğunda Claude Code'un dosyaya yazdığı costUSD değerini kullanır. Bu değer yoksa token sayılarına göre hesaplama yapar. --mode calculate her zaman token sayılarına göre hesaplama yapar ve kaydedilmiş maliyeti yok sayar. --mode display yalnızca kaydedilmiş maliyetleri gösterir. Kaydedilmiş maliyeti olmayan satırlar için $0.00 yazdırır. Bir toplam hatalı görünüyorsa aynı raporu önce calculate, ardından display ile çalıştırılmalıdır. Aradaki fark büyükse girdilerin çoğunda kaydedilmiş maliyet yoktur. Bu durumda okunan tüm değerler tahmindir.

Aynı veriler prompt için de kullanılabilir. ccusage statusline, Claude Code status bar için kısa bir satır yazdırır. Bu satır, diğer status line komutları gibi ~/.claude/settings.json içine bağlanabilir. Ayar bloğu ve aldığı alanlar için Claude Code statusline oluşturma bölümüne bakılmalıdır.

Bir log ayrıştırıcının göremediği şey, bu makinede gerçekleşmemiş işlemlerdir. İkinci bir laptop, claude.ai üzerindeki bir oturum veya ekip arkadaşının çalışması bu cihazlardaki disklerde bulunan transcript dosyalarında yer alır. Eski veriler de eksik olabilir. Bunun nedeni, cleanupPeriodDays ayarı kapsamında transcript dosyalarının varsayılan olarak 30 gün sonra temizlenmesidir. Arşivlenmemişse önceki çeyreğe ait veriler artık bulunmaz.

Bir risk daha vardır. Bu risk veri yapısından kaynaklanır. Anthropic belgelerinde, giriş biçiminin Claude Code'a özel dahili bir biçim olduğu ve sürümler arasında değişebileceği belirtilir. Bu nedenle bu dosyaları doğrudan ayrıştıran script'ler herhangi bir sürümde bozulabilir. Bu durum aynı türdeki tüm araçlar için geçerlidir. Ayrıca JSONL üzerinde elle yazılmış jq one-liner kullanımının göründüğünden daha kötü bir fikir olmasının nedeni de budur. Bakımı yapılan ayrıştırıcılar biçim değişikliklerini sizin için izler. Elle yazılmış one-liner ise bir alanın adı değiştiği gün, hatalı bir sayıyı kesin doğruymuş gibi raporlar.

Son olarak abonelik kullanırken dolar tutarı için bir uyarı gerekir. Pro veya Max planlarında token başına ücretlendirme yapılmaz. Bu nedenle gösterilen sayı, token kullanımının liste API fiyatlarına göre maliyetini ifade eder. Kullanımınızın ne kadar yoğun olduğunu ölçer. Faturanız değildir. Gerçek soru hangi planda olunması gerektiğiyse bu ayrı bir değerlendirmedir: Claude aboneliğine karşı API faturalandırması bölümüne bakılmalıdır.

Yöntem 2: yerleşik kullanım ekranları bütçeyi hangi modelin tükettiğini gösterir

Claude Code kendi raporlama özellikleriyle birlikte gelir, ancak çoğu kişi bu ekranları hiç açmaz. Bir oturum içinde /usage komutunu çalıştırın. Üst bölümdeki Session alanı, modele göre token sayılarını ve geçerli oturumun dolar cinsinden tutarını gösterir. Bu tutar, standart liste fiyatları üzerinden token sayılarından yerel olarak hesaplanır. İndirimli veya promosyonlu fiyatlandırmayı yansıtmaz. Bu nedenle faturanızdan farklı olabilir. /clear komutu yeni bir konuşma başlattığında toplamlar sıfırlanır.

Pro, Max, Team veya Enterprise planlarında aynı ekran, plan limitinizin ne kadarını kullandığınızı da gösterir. Ayrıca son kullanımı skills, subagents, plugins ve ayrı MCP sunucularına toplam kullanımın yüzdesi olarak dağıtır. Uzun context veya cache miss gibi, son kullanımın %10 veya daha fazlasını oluşturan davranışları işaretler. Son 24 saat ile son 7 gün arasında geçiş yapmak için d veya w tuşuna basın. Bu değerler yaklaşık değerlerdir ve bu makinedeki yerel oturum geçmişinden hesaplanır. Bu nedenle ikinci bir cihazdaki kullanım hesaba katılmaz.

Birden fazla geliştirici olduğunda veriler hesap düzeyine taşınır. API organization için Console usage sayfası, üye bazında harcama ve kabul edilen satırları gösteren bir Claude Code dashboard ve aynı günlük kullanıcı bazlı metrikleri bir admin key ile döndüren bir Claude Code Analytics API bulunur. Teams ve Enterprise planları, admin console içinde CSV dışa aktarma özellikli ve günlük güncellenen bir spend report sunar. Enterprise ayrıca bir analytics API sağlar. Hangi ekranların görülebildiği, her geliştiricinin nasıl oturum açtığına bağlıdır. Bu nedenle karma bir organization iki raporu inceleyip toplamı elle hesaplar.

Bütçe planlamasında kullanılabilecek Anthropic cost documentation içindeki yayımlanmış değer, Ağustos 2026 itibarıyla geliştirici başına aktif gün başına ortalama yaklaşık $13 ve geliştirici başına aylık $150 ile $250 arasındadır. Kullanıcıların %90'ı aktif gün başına $30 değerinin altındadır. Bu değeri ekibiniz için bir tahmin olarak değil, enterprise deployment'larından elde edilmiş yayımlanmış bir benchmark olarak değerlendirin. Bir pilot grup oluşturun ve genelleme yapmadan önce ölçüm alın.

Dashboard'ların göremediği şey, gün ve kişi düzeyinin altındaki ayrıntılardır. Opus modelinin Salı gününün büyük bölümünde kullanıldığını gösterirler. Ancak hangi prompt'un, hangi repository'nin veya hangi CI job'unun buna neden olduğunu göstermezler. Ayrıca organization raporları günlük güncellendiği için veriler gecikmeli gelir. Bu nedenle dashboard'lar, denetim için kullanılır; o öğleden sonra kontrolden çıkan bir agent'ı yakalamak için uygun değildir. Kontrolden çıkan agent'ı yakalamak için rapor değil limit gerekir. Bu konu VPS üzerinde agent maliyetlerini sınırlama bölümünde ele alınır.

Yöntem 3: Kendi OpenTelemetry yığınınız hangi prompt'un gerilediğini gösterir

Bir environment variable ayarladığınızda Claude Code, OpenTelemetry metrikleri ve olayları üretir. Bu, kullanıcı bazında token ve maliyet verilerini neredeyse gerçek zamanlı olarak kontrol ettiğiniz bir sisteme aktaran tek seçenektir. Metrikler USD cinsinden claude_code.cost.usage, token cinsinden claude_code.token.usage, claude_code.session.count ve claude_code.active_time.total bilgilerini içerir.

Token metriği, öznitelikleri nedeniyle özellikle önemlidir. Her veri noktası type bilgisini taşır. Bu değer input, output, cacheRead veya cacheCreation olabilir. Ayrıca model ve query_source bilgilerini de içerir. Bu değer main, subagent veya auxiliary olabilir. Veri noktasında ayrıca agent.name, skill.name, mcp_server.name ve mcp_tool.name bulunur. Bu bilgiler, hiçbir dashboard'un yanıtlayamayacağı sorulara yanıt vermek için yeterlidir: faturanın ne kadarının kendi istekleriniz yerine subagent'lara ait olduğu, bir MCP sunucusunun input token sayınızı iki katına çıkarıp çıkarmadığı ve biri CLAUDE.md dosyasını düzenledikten sonra cache okumalarının düşüp düşmediği. Sürprizler genellikle cache davranışında ortaya çıkar. prompt caching'in kendini ne zaman amorti ettiği başlıklı açıklamada incelenen verilerin anlamı açıklanır.

Burada bir düzeltme yapılması gerekir. Bu konu, hakkında açılan her tartışmada gündeme gelir. Langfuse, self-hosted tracing için iyi bir backend'dir. VPS üzerinde çalıştırılması agent tracing için Langfuse'u self-host etmek başlıklı açıklamada ele alınır. Langfuse'un OTLP endpoint'i yalnızca trace kabul eder. Claude Code metrics ve log events dışa aktarır, span dışa aktarmaz. Bu nedenle OTEL_EXPORTER_OTLP_ENDPOINT değerinin Langfuse'a yönlendirilmesi projeyi boş bırakır ve okunmaya değer bir hata üretmez. Langfuse, API üzerinde kendiniz geliştirdiğiniz ve kendi kodunuzun her span'i prompt, model ve maliyet bilgileriyle oluşturduğu agent'lar için doğru araçtır. Claude Code CLI için uygun seçenek bir metrics store kullanmaktır.

Kendi VPS'inizde Claude Code harcama takibini ayarlama

İki servis yeterlidir: metrikleri alacak bir collector ve bunları depolayacak Prometheus. Her ikisini de public internetten uzak tutun; çünkü açık bir OTLP portu, adresi bulan herkesin veri yazmasına izin verir. /opt/ccmetrics/compose.yaml yazın:

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, WireGuard tüneli içindeki sunucunun adresidir. Bu nedenle collector'a makinelerinizden erişilebilir, başka hiçbir yerden erişilemez. Portun önündeki adres burada gerçekten önemlidir; çünkü yayınlanan Docker portları ufw tarafından filtrelenmez: Docker tarafından yayınlanan portların ufw'yi atlamasının nedeni bölümüne bakın. Tünelin kendisini kurma işlemi kendi VPS'inizde WireGuard VPN bölümünde açıklanır.

/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. Prometheus collector'a Compose ağı üzerinden servis adıyla eriştiği için 8889 numaralı port hiçbir zaman host'a yayınlanmaz:

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 collector

Collector logunun Everything is ready. Begin running and processing data. ile bitmesi gerekir. Yapılandırma hatasında duran bir log, YAML dosyasının ayrıştırılamadığını ve container'ın döngü halinde yeniden başlatılacağını gösterir.

Şimdi Claude Code'u buna yönlendirin. Claude Code çalıştıran her makinede, ~/.claude/settings.json dosyasına şunu ekleyin:

{
  "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"
  }
}

Bir oturum başlatın, bir prompt gönderin, export aralığının dolmasını bekleyin (burada 10 saniye, varsayılan olarak 60 saniye) ve ardından Prometheus'a hangi verileri aldığını sorun:

curl -s http://localhost:9090/api/v1/label/__name__/values | grep -o 'claude_code[a-z_]*'

claude_code_ ile başlayan birkaç ad görmeniz gerekir. Exporter, noktaları alt çizgilere dönüştürür ve birim bilgisini ekler. Bu nedenle tam dizeler collector sürümünüze bağlıdır. Boş sonuç, hiçbir verinin ulaşmadığı anlamına gelir. Protokol ile portun eşleştiğini kontrol edin; http/protobuf 4318 numaralı porta, grpc ise 4317 numaralı porta gider ve uyumsuzluk sessizce başarısız olur. claude --debug komutunu çalıştırın; debug logunda OTel export hataları raporlanır.

Tek makine kullanıyor ve sunucu istemiyorsanız yukarıdakilerin tümünü atlayın. OTEL_METRICS_EXPORTER=prometheus ayarlandığında Claude Code, doğrudan http://localhost:9464/metrics adresinde bir scrape endpoint'i sunar. Listelenen tek exporter prometheus olduğunda Claude Code, scrape çıktısının geçerli Prometheus metin biçiminde kalması için USD, tokens ve s birimlerini metrik adlarından çıkarır.

Bu yapının beraberinde bir gizlilik kararı gelir. Varsayılan olarak makineden yalnızca sayımlar çıkar; prompt metni ve tool çıktısı gönderilmez. OTEL_LOG_USER_PROMPTS=1 ve OTEL_LOG_TOOL_CONTENT=1 bu durumu değiştirir. Bu durumda metrik sunucunuz source code'u ve context içinde bulunan diğer tüm verileri barındırabilir. Bu seçenekleri bilinçli olarak etkinleştirin ve önce agent context içindeki gizli bilgileri koruma bölümünü okuyun.

Komut dosyası ve CI çalıştırmalarında harcamayı izleme

Etkileşim gerektirmeyen çalıştırmalar, ekranda kimse izlemediği için beklenmedik maliyetlere yol açabilir. claude -p, --output-format json ile birlikte çalıştırmanın maliyetini sonuç yükünde raporlar:

claude -p "summarise the failing tests" --output-format json | jq '.total_cost_usd'

Yük, total_cost_usd değerini ve model bazında ayrıntılı maliyet dağılımını içerir. Böylece bir CI işi, herhangi bir dashboard kullanmadan kendi harcamasını kaydedebilir. Değeri bir dosyaya ekleyin veya yukarıda belirtilen collector'a metrik olarak gönderin. Bu, kullanılabilecek en düşük maliyetli harcama izleme yöntemidir ve her çalıştırma için bir jq çağrısı gerektirir.

Hata türleri ve görülecek belirtiler

Rapor boş. npx ccusage@latest daily hiçbir satır yazdırmıyorsa Claude Code'un yazdığı konumu okumuyor demektir. CLAUDE_CONFIG_DIR bu konumu değiştirir ve parser'ın bu konum hakkında bilgilendirilmesi gerekir. Satırlar varsa ancak yaklaşık bir ay öncesinde sona eriyorsa cleanupPeriodDays tasarlandığı gibi çalışıyor demektir: transcript'ler varsayılan olarak 30 gün sonra silinir.

İki makine farklı toplamlar bildiriyor. Bu beklenen bir durumdur ve hata değildir. Hem /usage hem de herhangi bir log parser yalnızca yerel oturum geçmişini okur. Bu nedenle başka bir cihazdaki veya claude.ai üzerindeki kullanım her iki çıktıda da yer almaz.

Yerel toplam fatura ile eşleşmiyor. Yerel değerler, standart liste fiyatları üzerinden token sayılarından hesaplanır. Promosyon fiyatlandırması veya sözleşmeye bağlı indirim hakkında bilgi sahibi değildir. Ayrıca subscription kullanılıyorsa token'lar ayrı ayrı ücretlendirilmez. API faturalandırması için Console kullanım sayfası yetkili kaynaktır.

Aynı işi yaptığınız halde maliyet arttı. Önce cache sütunlarını kontrol edin. Uzun bir oturumda her turda oturumun tamamı yeniden gönderilir. Cache sıcak olduğu sürece cached rate üzerinden, cache soğuduğunda ise tam input rate üzerinden ücretlendirilir. Bu nedenle uzun bir ara verildiğinde konuşmanın tamamı yeniden işlenir. Bu durum, küçük bir output sayısının yanında büyük bir input sayısı olarak görünür. input ve output token fiyatlandırması bu ikisinin neden bağımsız hareket ettiğini açıklar.

Subagent kullanılan bir günün sonucu gerçek dışı görünüyor. Her subagent kendi context window'unda çalışır. Bu nedenle token kullanımı, çalışan subagent sayısına ve her birinin çalışma süresine göre artar. Bunları yalnızca OTel verileri, claude_code.token.usage üzerindeki query_source attribute aracılığıyla birbirinden ayırır. Bir log parser toplamı gösterir ve ayrıntıları tahmin etmenizi gerektirir.

FAQ

ccusage, bir Max planında gerçekte faturalandırılan tutarı gösterir mi?

Hayır. Abonelikte token başına ücretlendirme yapılmadığından log ayrıştırıcısı token'larınızı standart liste API ücretleri üzerinden fiyatlandırır ve aynı çalışmanın API üzerinden ne kadara mal olacağını gösterir. Bu, bir günün ne kadar yoğun geçtiğini göreli olarak ölçmek için uygundur. Projeleri veya modelleri birbiriyle karşılaştırmak için de kullanılabilir. Ödemeniz gereken tutar için Console kullanım sayfası API faturalandırmasını, plan faturalandırma sayfası ise abonelik ücretlendirmesini gösterir.

Bu araçların okuduğu Claude Code oturum dosyaları nerede depolanır?

~/.claude/projects/<project>/<session-id>.jsonl içinde depolanır. Burada <project>, alfasayısal olmayan karakterlerin - ile değiştirildiği çalışma dizini yoludur. Her satır, bir ileti, araç kullanımı veya meta veri girdisi için bir JSON nesnesidir. CLAUDE_CONFIG_DIR tüm dizini taşır. cleanupPeriodDays ise settings.json içinde 30 günlük saklama süresini denetler. Anthropic, girdi biçiminin dahili olduğunu ve sürümler arasında değişebileceğini belirtir. Bu nedenle kendi betiğiniz yerine bakımı sürdürülen bir araçla ayrıştırma yapılmalıdır.

Claude Code telemetrisini Langfuse'a gönderebilir miyim?

Doğrudan gönderilemez. Langfuse OTLP uç noktası trace kabul eder. Claude Code ise span yerine metrik ve log olayı dışa aktarır. Bu nedenle verilerin gönderileceği bir hedef oluşmaz. Claude Code metriklerini bir OpenTelemetry collector'a gönderip Prometheus içinde saklayın. Langfuse, API üzerinde kendiniz oluşturduğunuz agent'lar için kullanılmalıdır. Bu agent'larda kendi kodunuz prompt'u, modeli ve maliyeti taşıyan span'ler üretir.

Yerel değerlerim neden Console kullanım sayfasıyla eşleşmiyor?

Çünkü farklı şekilde hesaplanırlar. /usage ve log ayrıştırıcıları, bulunduğunuz makinedeki oturum dosyalarından token sayılarını toplar ve bunları standart liste ücretleri üzerinden fiyatlandırır. Console ise kuruluşunuzun indirimler uygulandıktan sonra tüm makineler ve tüm anahtarlar üzerinden gerçekte ödediği tutarı raporlar. Uyuşmazlık normaldir. Çok büyük bir fark genellikle ikinci bir cihazın, bir CI runner'ın veya başka bir ekip üyesinin aynı hesaba faturalandırma yapması anlamına gelir.

Bir claude -p çalışmasının CI içindeki maliyetini nasıl izlerim?

Çalışmayı --output-format json ile yürütün ve sonuçtan total_cost_usd değerini okuyun. Örneğin claude -p "..." --output-format json | jq '.total_cost_usd' kullanılabilir. Aynı payload, model bazında ayrıntılı dağılımı ve oturum ID'sini de içerir. Bu değeri her job için kaydederseniz agent, dashboard veya ek bir servis olmadan pipeline başına harcamayı elde edebilirsiniz.