Status sayfası ve izleme
status.json ve herkese açık durum sayfası, olay (incident) yönetimi, sağlık probları, Prometheus metrikleri, alarmlar, Grafana panoları, Loki logları ve sentetik işlemsel izleme.
Durum sayfası
- Herkese açık:
https://status.pushizo.com(kendi kurulumunuzdastatusalt alan adı) bileşen durumlarını ve açık olayları gösterir; e-posta ile abone olunabilir. - Veri ucu:
GET /status.json(kimlik doğrulama yok) →
{
"status": "operational",
"checked_at": "2026-10-17T09:00:00Z",
"components": [
{ "name": "api", "status": "operational" },
{ "name": "dashboard", "status": "operational" },
{ "name": "worker", "status": "operational" },
{ "name": "delivery", "status": "operational" },
{ "name": "sdk", "status": "operational" }
],
"incidents": [{ "id": "inc_…", "title": "…", "status": "investigating", "severity": "minor", "components": ["delivery"], "started_at": "…", "updates": [] }]
}Bileşen durumu operational, degraded (açık olay etkiliyor) ya da major_outage (DB/Redis erişilemiyor, worker kalp atışı yok) olabilir; genel status en kötü bileşene göre belirlenir. Olaylar platform admin panelinden açılır/güncellenir/kapatılır ve platform_incidents tablosunda tutulur; akış incident runbook'u.
Sağlık probları
| Uç | Amaç |
|---|---|
GET /healthz | Liveness: süreç ayakta |
GET /readyz | Readiness: DB + Redis (+ depolama) erişilebilir; dışarıya kapalıdır (nginx 404) |
GET / | Servis bilgisi, sürüm, belge bağlantıları |
Worker'lar Redis'e kalp atışı yazar; status.json içindeki worker/delivery bileşenleri bu kayıtlardan türetilir.
Metrikler (Prometheus /metrics)
| Metrik | Açıklama |
|---|---|
http_request_duration_seconds{route,status} | API gecikmesi |
queue_depth{queue}, queue_jobs_total{queue,state} | Kuyruk birikimi (öncelikli işler dahil) |
provider_send_total{provider,outcome}, provider_latency_seconds{provider} | Sağlayıcı sonuç ve gecikmesi |
deliveries_total{channel,status} | Teslimat sonuçları |
webhook_deliveries_total{status}, webhook_delivery_latency_seconds, webhook_request_duration_seconds{outcome} | Giden webhook'lar |
messaging_feedback_total{source,type}, suppression_entries_total{channel,reason} | E-posta/SMS geri bildirimi |
active_subscriptions{app} | Saatlik gauge |
db_pool_in_use | Bağlantı havuzu |
dispatcher_go_requests_total{outcome} | Go dispatcher kullanılıyorsa |
pushizo_backup_last_success_timestamp_seconds{kind} | Yedek tazeliği (node-exporter textfile) |
analytics_store_mismatch_total{method,reason} | ClickHouse dual modunda fark |
Postgres exporter pushizo_* uygulama metriklerini (kanal durumu, bekleyen/başarısız teslimat) sorgularla üretir.
Alarmlar ve panolar
Compose yığını Prometheus + Alertmanager (e-posta öncelikli, Slack isteğe bağlı) + Grafana (API, kuyruklar, sağlayıcılar, DB panoları) + Loki/Promtail (pino JSON, gizli bilgi maskeleme) + blackbox exporter (HTTPS probları, sertifika bitişi; www, grafana, storage dahil) içerir. Başlıca alarmlar: WorkerDown, RedisDown, ApiTransactionalLatencyHigh, kuyruk birikimi, sağlayıcı hata oranı, PushizoBackupStale (> 26 saat), PushizoBackupMetricMissing, sertifika bitişi. Alarm e-postası için infra/compose/secrets/smtp_password doldurulur.
Sentetik işlemsel izleme
scripts/synthetic.ts 15 dakikada bir (GitHub Actions synthetic.yml ya da kendi zamanlayıcınız) uçtan uca kontrol yapar: GET /healthz + GET /status.json → POST /v1/notifications (Idempotency-Key ile tek sentetik aboneliğe) → kabul süresi bütçesi (varsayılan 1000 ms) → GET /v1/notifications/{id} ile sent + delivered ≥ 1 (varsayılan 60 s). Kurulum ve başarısızlıkta izlenecek runbook'lar: sentetik izleme. Go-live kabulü: 7 gün (672 koşu) hatasız.
Hata izleme
SENTRY_DSN tanımlıysa API/worker hataları Sentry'ye gider (beforeSend ile gövde temizliği); dashboard tarayıcı hataları aynı origin tüneli /monitoring/client-error üzerinden iletilir.
İlgili runbook'lar
Kuyruk birikmesi · Sağlayıcı kesintisi · Yük testi · Kaos tatbikatı · Gerçek cihaz testi
Runbook: Yedekten geri yükleme ve felaket kurtarma (DR)
Hedefler (docs/plan/08 §8.10): RPO 1 saat, RTO 2 saat. Yedek kaynakları:
DMARC ve TLS-RPT izleme
Platform alan adının DMARC toplu raporlarını ve TLS-RPT raporlarını alma (Postal HTTP endpoint ya da IMAP), ayrıştırma, yetkisiz kaynak uyarıları, politika önerisi ve Cloudflare ile tek tıkla p= değişimi.