PushizoDocs
OperasyonRunbook'lar

Runbook: İşlemsel sentetik izleme

Faz 14 kabulü "staging'de 7 gün hatasız sentetik izleme" bu kontrolle ölçülür. .github/workflows/synthetic.yml 15 dakikada bir scripts/synthetic.ts çalıştırır:

Faz 14 kabulü "staging'de 7 gün hatasız sentetik izleme" bu kontrolle ölçülür. .github/workflows/synthetic.yml 15 dakikada bir scripts/synthetic.ts çalıştırır:

  1. GET /healthz ve GET /status.json — api, sdk, worker, delivery bileşenlerinden biri major_outage ise başarısız.
  2. POST /v1/notifications (Idempotency-Key ile) — tek bir sentetik aboneliğe işlemsel bildirim; kabul süresi SYNTHETIC_ACCEPT_BUDGET_MS (varsayılan 1000 ms) içinde olmalı.
  3. GET /v1/notifications/{id} yoklaması — sent + delivered >= 1 olana dek; SYNTHETIC_DELIVERY_TIMEOUT_MS (varsayılan 60 s) aşılırsa veya teslimat failed/errored/suppressed olursa başarısız.

Kurulum (staging)

  1. Staging'de ayrı bir org/app ("Synthetic") oluşturun; kanal olarak mock sağlayıcılı push (staging PROVIDER_MODE=mock) ya da gerçek bir test cihazı kullanın.
  2. Bir abonelik kaydedin (POST /sdk/v1/apps/{app}/subscriptions, token mock:ok-synthetic) ve kimliğini not edin.
  3. Yalnızca bu app'e kapsamlı, notifications:write + analytics:read yetkili bir API anahtarı üretin.
  4. GitHub staging ortamına secret'lar: SYNTHETIC_API_KEY, SYNTHETIC_APP_ID, SYNTHETIC_SUBSCRIPTION_ID; depo değişkenleri: STAGING_API_URL, SYNTHETIC_ENABLED=true.

Elle çalıştırma: SYNTHETIC_API_URL=… SYNTHETIC_API_KEY=… SYNTHETIC_APP_ID=… SYNTHETIC_SUBSCRIPTION_ID=… npx tsx scripts/synthetic.ts (tek satır JSON çıktı; başarısızlıkta çıkış kodu 1).

Başarısızlıkta

  • step: health|status → docs/runbooks/incident.md (API/worker erişilemiyor, bileşen kesintisi).
  • step: accept → API gecikmesi/5xx: Grafana API panosu, ApiTransactionalLatencyHigh alarmı.
  • step: delivery → kuyruk birikmesi veya sağlayıcı: docs/runbooks/queue-backlog.md, docs/runbooks/provider-outage.md.

7 günlük kabul

Actions → synthetic iş akışı geçmişinde son 7 günde (672 koşu) başarısız koşu olmamalı. Sonuçlar her koşunun özetinde JSON olarak görünür (accept_ms, delivery_ms).

Bu sayfada