# Cost Monitoring, Quotas, and Budget Alarms

> Source: https://sukruyusufkaya.com/en/learn/claude-ustaligi/cost-monitoring
> Updated: 2026-05-11T13:48:35.737Z
> Category: Claude Ustalığı
> Module: 9. Production
**TLDR:** Avoid bill surprises with a cost pipeline: per-user quotas, alarm thresholds, anomaly detection.

# Üç Boyutta İzleme

1. **Toplam aylık** — finans için.
2. **Adım bazlı** — pipeline'da hangi adım pahalı?
3. **Kullanıcı / tenant bazlı** — abuse / runaway costs.

### Per-user kota

Plana göre günlük token / istek kotası. Aşıldığında graceful degrade veya askı.

```python
def check_quota(user_id, plan):
    used = redis.get(f"quota:{user_id}:today")
    cap = PLAN_LIMITS[plan]["daily_tokens"]
    if used and int(used) >= cap:
        raise HTTPException(429, "Daily quota exceeded")
```

### Alarm eşikleri

- **Soft alarm:** Aylık bütçenin %50'si — Slack'a uyar.
- **Hard alarm:** %80 — auto-scaling kapat, sadece premium tenant'lara devam.
- **Kill switch:** %100 — yeni isteklere fallback, kritik agent'lara devam.

### Anomaly detection

Saatlik token kullanım grafiği üzerinde z-score. 3 sigma sapma → otomatik incele.

```python
# Çok kullanıcılı maliyet log analizi (sentetik)
import statistics

calls = [
    {"user":"A","tokens":1200},
    {"user":"A","tokens":800},
    {"user":"B","tokens":120000},   # anomali
    {"user":"C","tokens":1500},
]
by_user = {}
for c in calls:
    by_user[c["user"]] = by_user.get(c["user"], 0) + c["tokens"]

vals = list(by_user.values())
mu, sd = statistics.mean(vals), statistics.pstdev(vals) or 1
for u, v in by_user.items():
    z = (v - mu) / sd
    flag = "🚨" if abs(z) > 2 else "  "
    print(f"{flag} {u}: {v} (z={z:.1f})")
```

**Boşluk doldurma egzersizi (text):**
```text
Üç izleme boyutu: aylık, adım ve _____ bazlı. Bütçe %80'e ulaştığında _____ alarm tetiklenir. Anomaly tespitinde _____ - score eşiği yaygındır.
```

> ✋ Kontrol noktası: `q-903-mc1`