SMS Delivery Monitoring — Runbook
DetayGenel Bakis
Bölüm başlığı “Genel Bakis”scripts/sms-health-alert.ts scripti SmsLog tablosundan son 1 saatlik failure rate hesaplar.
Rate %15 esigi asarsa PM2 log’una WARN yazar ve (varsa) Slack/Discord webhook’a bildirim gonderir.
Idempotency: /tmp/sms-alert-last.txt dosyasina son alert zamani yazilir; ayni alert 60 dakika
icerisinde tekrar tetiklenmez.
Cron Kurulumu
Bölüm başlığı “Cron Kurulumu”Cron expression
Bölüm başlığı “Cron expression”Her 15 dakikada bir calistirir:
*/15 * * * *crontab -e ile set etme
Bölüm başlığı “crontab -e ile set etme”root veya yigit kullanicisiyla:
crontab -eAcilan editore asagidaki satiri ekle (proje dizinini ayarla):
*/15 * * * * cd /var/www/vhosts/ecutuningportal.com/httpdocs && /usr/bin/pnpm tsx scripts/sms-health-alert.ts >> /var/log/sms-health-alert.log 2>&1pnpm yolunu dogrula:
which pnpm# ornekler: /usr/bin/pnpm veya /home/yigit/.local/share/pnpm/pnpmLog dosyasi olusturma
Bölüm başlığı “Log dosyasi olusturma”touch /var/log/sms-health-alert.logchmod 664 /var/log/sms-health-alert.logManuel Calistirma
Bölüm başlığı “Manuel Calistirma”Herhangi bir zamanda son durumu raporlatmak icin:
cd /var/www/vhosts/ecutuningportal.com/httpdocspnpm tsx scripts/sms-health-alert.tsBeklenen cikti ornekleri:
# Oran iyi ise:[SMS-ALERT] Last hour OK — failure 4.2% (threshold 15%) · total 48
# Mesaj yoksa:[SMS-ALERT] Last hour: no messages — skipping
# Esik asildi, ilk tetiklenme:[SMS-ALERT] Last hour failure rate 18.7% (threshold 15%) — total:32 failed:6 undelivered:0 — top error: 21211 (x6)
# Esik asildi ama dedup aktif:[SMS-ALERT] SUPPRESSED (dedup window active) — failure 18.7%Webhook Kurulumu (Opsiyonel)
Bölüm başlığı “Webhook Kurulumu (Opsiyonel)”Slack Incoming Webhook
Bölüm başlığı “Slack Incoming Webhook”- https://api.slack.com/apps adresine git
- Uygulamani sec (veya yeni olustur) → Incoming Webhooks → Activate
- Add New Webhook to Workspace → kanal sec → URL kopyala
- URL formatı:
https://hooks.slack.com/services/T.../B.../...
Discord Webhook
Bölüm başlığı “Discord Webhook”- Discord sunucunda kanal ayarlari → Integrations → Webhooks → New Webhook
- URL kopyala:
https://discord.com/api/webhooks/.../...
.env’e ekle
Bölüm başlığı “.env’e ekle”SMS_ALERT_WEBHOOK_URL=https://hooks.slack.com/services/T.../B.../...Set edilmezse (veya bos birakılırsa) sadece PM2 log’una yazar, webhook atlanir.
Alert Susturma
Bölüm başlığı “Alert Susturma”Gecici susturma (dedup dosyasini guncelle)
Bölüm başlığı “Gecici susturma (dedup dosyasini guncelle)”Alert 1 saat boyunca suppress edilir. Mevcut suppress penceresini sifirlamak icin:
rm /tmp/sms-alert-last.txtSonsuz susturmak icin (cron devrede kalirken):
date +%s%3N | awk '{print $1 * 1000}' > /tmp/sms-alert-last.txt# Bu dosyayı her saat guncelleyen once loop:while true; do date +%s%3N > /tmp/sms-alert-last.txt; sleep 3600; doneKalıcı susturma
Bölüm başlığı “Kalıcı susturma”crontab -eile ilgili satiri yoruma al veya sil- Veya
SMS_ALERT_WEBHOOK_URLenv varini kaldirip ciktiyi yoksay
Esigi degistirme
Bölüm başlığı “Esigi degistirme”scripts/sms-health-alert.ts dosyasinda:
const FAILURE_THRESHOLD = 0.15; // %15 → ornektin %25 yapmak icin 0.25Admin Paneli
Bölüm başlığı “Admin Paneli”SMS metriklerini gorsel olarak incelemek icin:
https://ecutuningportal.com/admin/sms-healthSayfada:
- Son 1 saat / 24 saat / 7 gun delivery rate StatCard
- Son 24 saatin top error code tablosu
- Son 10 basarisiz mesaj listesi (alici maskelenmis)
Ilgili Dosyalar
Bölüm başlığı “Ilgili Dosyalar”| Dosya | Acıklama |
|---|---|
lib/sms/metrics.ts | getSmsHealth() + getRecentFailures() Prisma aggregate |
scripts/sms-health-alert.ts | Cron scripti — log + webhook |
app/[locale]/admin/(panel)/sms-health/page.tsx | Admin dashboard sayfası |
/tmp/sms-alert-last.txt | Dedup dosyası (otomatik olusur) |
/var/log/sms-health-alert.log | Cron stdout/stderr |
Troubleshooting
Bölüm başlığı “Troubleshooting”Script Cannot find module '@/lib/sms/metrics' hatasıyla kapanıyor
tsconfig.json path alias kontrolu:
cd /var/www/vhosts/ecutuningportal.com/httpdocsnpx tsc --noEmit 2>&1 | grep metricsDedup dosyasi izin hatasi
ls -la /tmp/sms-alert-last.txt# Sahip yanlissa:chown $(whoami) /tmp/sms-alert-last.txtCron calismiyor
grep CRON /var/log/syslog | tail -20crontab -l # mevcut cron listesi