Runbook: Olay yönetimi ve status page
Kaynaklar: Alertmanager (#pushizo-alerts, #pushizo-oncall, e-posta), Grafana panoları (infra/monitoring/grafana/dashboards), Loki logları (request_id ile izleme), Sentry. Status page: https://status.<alan adı> →…
Kaynaklar: Alertmanager (#pushizo-alerts, #pushizo-oncall, e-posta), Grafana panoları (infra/monitoring/grafana/dashboards),
Loki logları (request_id ile izleme), Sentry. Status page: https://status.<alan adı> → dashboard /status, veri GET /status.json
(API; platform_incidents tablosu + bileşen sağlığı: DB/Redis ping, worker heartbeat'leri). Yönetim: platform admin → /admin/incidents.
Şiddet
| Seviye | Tanım | Yanıt | Status page |
|---|---|---|---|
| SEV1 | API/dashboard erişilemez, veri kaybı riski, teslimatlar durdu | 15 dk içinde nöbetçi, 30 dk'da ilk güncelleme | major_outage |
| SEV2 | Bir kanal/özellik bozuk (ör. e-posta gönderimi), ciddi gecikme | 30 dk | degraded |
| SEV3 | Kısmi/kozmetik, tek kiracı | iş saatleri | olay yok (destek kaydı) |
Akış
- Tespit — alarm ya da müşteri bildirimi. Nöbetçi olayı üstlenir, Slack
#pushizo-oncalliçinde iş parçacığı açar ([SEV1] <başlık> — <saat UTC>). - Status page olayı (SEV1/SEV2, 10 dk içinde) —
/admin/incidents→ Yeni olay: başlık, şiddet (minor|major|critical), etkilenen bileşenler (api,dashboard,worker,delivery,sdk), ilk güncelleme (investigating).GET /status.jsonanındadegraded/major_outagedöner;ApiTransactionalLatencyHighgibi alarmlar inhibit edilir (Alertmanager inhibit kuralları). - Teşhis — ilgili runbook:
provider-outage.md,queue-backlog.md,restore.md,key-rotation.md. Standart sorular:- Son dağıtım ne zaman? (
docker compose psimaj etiketleri / GitHub release) → şüpheliyse geri al:IMAGE_TAG=<önceki> ./infra/scripts/deploy.sh prod(migration'lar geriye dönük uyumlu olduğundan önceki imaj yeni şema ile çalışır). - Hangi bileşen?
GET /readyz(DB/Redis), worker/readyz(heartbeat), Grafana API ve Veritabanı panoları. - Tek kiracı mı? Loki
| json | org_id="org_…".
- Son dağıtım ne zaman? (
- Güncelleme ritmi — SEV1 30 dk, SEV2 60 dk: status page güncellemesi (
identified→monitoring) + Slack. Müşteri e-postası (status page aboneliği) yalnızca 1 saati aşan SEV1'de. - Çözüm — kök neden giderildi, metrikler 15 dk normal → status page
resolved(bileşenleroperational). Alarmlarresolvedbildirir. - Post-mortem (SEV1, 5 iş günü içinde) —
docs/postmortems/YYYY-MM-DD-<slug>.md: zaman çizelgesi (UTC), etki (kiracı sayısı, kaybolan/geciken teslimat), kök neden, iyi giden/gitmeyen, aksiyonlar (sahip + tarih). Suçlamasız.
Hazır komutlar
# genel durum
curl -s https://api.<alan>/readyz | jq . ; curl -s https://api.<alan>/status.json | jq .components
docker compose --env-file .env.prod -f infra/compose/docker-compose.prod.yml ps
# loglar (son 10 dk, hata)
docker compose … logs --since 10m api-1 api-2 worker-dispatch worker-system | grep '"level":50'
# tek istek izleme
# Loki: {project="pushizo"} | json | request_id="req_…"
# acil kapasite
docker compose … up -d --scale worker-dispatch=2
# geri alma
IMAGE_TAG=<önceki sürüm> ./infra/scripts/deploy.sh prod
```text
## İletişim şablonları
- *investigating*: "Bildirim gönderimlerinde gecikme/hatalar araştırılıyor. Etkilenen bileşen: \<kanal>. Sonraki güncelleme 30 dk içinde."
- *identified*: "Neden tespit edildi: \<sağlayıcı/altyapı>. Düzeltme uygulanıyor; bekleyen gönderimler kuyrukta, veri kaybı yok."
- *monitoring*: "Düzeltme uygulandı, gönderimler normale döndü; 30 dk izleniyor."
- *resolved*: "Olay çözüldü. \<süre> boyunca \<etki>. Post-mortem paylaşılacak."
## Sorumluluklar
| Rol | Görev |
|-----|-------|
| Nöbetçi (on-call) | ilk yanıt, status page, teknik müdahale |
| Olay yöneticisi (SEV1) | iletişim ritmi, karar (geri alma / DR), post-mortem sahibi |
| Platform admin | `/admin` ekranları: olay, kiracı askıya alma, support session (salt okunur), özellik bayrakları (riskli özelliği kapatma) |Tanıtım sitesi, SEO ve AI SEO: pushizo.com yayın adımları
Pushizo'nun tanıtım sitesi (apps/web, https://pushizo.com), geliştirici dokümantasyonu (apps/docs-site, https://docs.pushizo.com) ve müşteri paneli (apps/dashboard, https://app.pushizo.com; API https://api.pushizo.com)…
Runbook: Sağlayıcı kesintisi (APNs / FCM / Web Push / SES / Resend / Twilio / Netgsm)
Geçici olarak tek kanalı durdurmak gerekirse (örn. sağlayıcı yanlış pozitif/tekrar gönderiyor): worker-dispatch servisinin WORKER_QUEUES değerinden ilgili kuyruğu çıkar…