4.000 Discord sunucusunu takip etmek: Grafana, PostHog ve bize gösterdikleri
Trafiğimizin yarısına sessizce yol açan bir döngü, günde üç milyon gereksiz istek ve bir dakika sonra biten bir saldırı. İzleme sistemimiz neleri görüyor ve neleri bilerek görmüyor.

AlphaCloud, dört shard'a dağılmış 4.000'den biraz fazla Discord sunucusunda çalışıyor. Bunlar, her biri sunucuların bir kısmına hizmet eden ve hepsi aynı API ile konuşan dört süreç.
Bu büyüklükte bir sorun nadiren bir şeyi bozarak kendini gösterir. Çok daha sık olarak her şey çalışır, sadece olması gerekenden daha pahalı, daha yavaş ya da daha gürültülü. Bu yüzden Eylül 2026'da izleme sistemimizi yeniden kurduk. Bu makale nasıl göründüğünü ve ilk haftalarda bize neler gösterdiğini anlatıyor.
İki araç, iki soru
Grafana şu soruya cevap verir: bot ne yapıyor? Bot ve API metrikleri Prometheus'a bildirir (istekler, yanıt süreleri, hata oranları, Discord yanıtları, yapay zeka kullanımı), kayıtlar da Loki'ye gider. Her sunucu düğümünün kendi yığını var ve Grafana internetten değil, yalnızca özel bir ağ üzerinden erişilebilir.
PostHog şu soruya cevap verir: insanlar web sitelerimizde neler yaşıyor? Sayfa görüntülemeleri, tarayıcı hataları, yükleme süreleri ve onay varsa kaydedilmiş oturumlar. PostHog yalnızca çerez banner'ında onay verdikten sonra başlar.
Bu ayrım bilinçli. Grafana makinelere, PostHog arayüzlere bakar. İkisini tek bir araca sıkıştırırsan, ya sunucu kayıtlarında kullanıcı verisi ya da ürün analizinde sunucu yükü elde edersin.
Neler buldu
Trafiğin yarısını üreten bir döngü
Bitiş zamanı olan anketler, her dakika süresi dolan bir şey olup olmadığını kontrol eden bir arka plan görevi tarafından kapatılır. Bunu her sunucu için ayrı ayrı yapıyordu. Shard başına yaklaşık 1.000 sunucu ve dört shard ile bu, neredeyse hepsi "süresi dolan bir şey yok" cevabını alan yaklaşık saniyede 70 isteğe ulaşıyordu.
Bunu ancak Grafana'da, botun API'ye yaptığı istekleri yola göre ayırdığımızda fark ettik: bu tek uç nokta tüm trafiğin yarısından fazlasıydı. Her şey çalışıyordu. Sadece kimsenin istemediği bir yük taşıyordu.
Artık her shard dakikada bir kez soruyor: "Hangi sunucularda süresi dolmuş bir anket var?" ve ayrıntıları yalnızca onlar için getiriyor. Dakikada yaklaşık 4.200 istek, dört civarına indi.
Üç milyon kez "kurulmamış"
Aynı örüntü, başka bir yer: birkaç modül (destek kayıtları, devamsızlıklar, ekip listesi, bot istatistikleri, bülten) döngülerinde düzenli olarak her sunucunun ayarlarını okuyordu. Çoğu sunucuda belirli bir modül hiç kurulmamış, bu yüzden cevap "bulunamadı" oluyordu. Günde yaklaşık üç milyon kez.
Çözüm gösterişsiz: "kurulmamış" cevabı artık 30 dakika boyunca hatırlanıyor. Bu yalnızca bu modüllerin her biri web panelinde kaydedildiği anda bota bir güncelleme gönderdiği için güvenli, böylece bir modülü kurmak asla 30 dakika beklemek anlamına gelmiyor.
Discord'un kesintileri bizim hatalarımız değil
Ekip hata kanalımız, başarısız her işlemi benzersiz bir referans ve her şeyiyle birlikte bir "Runtime Error" olarak paylaşıyordu. Buna Discord'un kendisinin bir sunucu hatasıyla cevap verdiği anlar da dahildi. Bu ne bizim tarafımızda bir hata ne de düzeltebileceğimiz bir şey ve kanalda tıpkı gerçek bir kusur gibi duruyordu.
Bugün bir uyarı olarak kaydediliyor ve üyeye hata bildirimi için bir bağlantı sunulmak yerine birkaç saniye içinde tekrar denemesi söyleniyor. Mesajlarının yarısı hata olmayan bir hata kanalı bir noktada okunmaz olur. O zaman gerçek olanı kaçırırsın.
Bir dakika süren bir saldırı
Eylül sonunda bir öğleden sonra ana sayfamız bir dakika içinde, aynı anda birçok ülkeden 500.000'den biraz fazla istek aldı. Çoğu sunucularımıza ulaşmadan durduruldu ve bir dakika sonra trafik normale döndü.
Bunu bir şey çöktüğü için görmedik. Sayı grafiğin geri kalanına uymadığı için gördük. İzlemenin asıl işi bu: her şey alev alev yanarken alarm vermek değil, bir şeyin normale nerede uymadığını göstermek.
İzleme sistemimizin bilerek görmediği şeyler
Buradaki kurallar panolar kadar önemli:
- Kayıtlarda ziyaretçi IP adresi yok. Gizlilik politikamız bunu vaat ediyor, bu yüzden onları iki yerde kaldırıyoruz: erişim kaydı yazılırken ve saklanmadan önce bir kez daha.
- Metriklerde sunucu, kullanıcı veya mesaj ID'si yok. Her metrik yalnızca kaba niteliklere (modül, durum sınıfı, shard) göre ayrılıyor. Bu hem verileri korur hem de metrik veritabanını küçük tutar.
- Oturum kayıtları senin içeriğini değil, bizim arayüzümüzü gösterir. Yalnızca çeviri dosyalarımızdan kelimesi kelimesine gelen metinler okunabilir kalır. Sunucu, kanal ve kullanıcı adları, girişler ve önizlemeler maskelenir. İzin verilen metinlerin listesi yüklenemezse her şey maskelenir.
- Web sitesindeki her şey yalnızca onaydan sonra. Bu da oradaki sayıları bir alt sınır yapıyor. Gerçek sayfa sayıları için ağ sağlayıcımızın anonim toplamlarına bakıyoruz.
Ayrıntılar gizlilik politikasında.
Bundan çıkardığımız ders
Pahalı olan nadiren bozuk olandır. Yukarıdaki bulguların hiçbiri bir hata üretmedi. Yük, maliyet ve gürültü ürettiler ve ölçmeden bunların hiçbirini göremezsin.
Sunucu başına sormak ölçeklenmez. Her iki büyük bulgu da aynı örüntüydü: her sunucuyu tek tek soran, tüm sunucular üzerinde dönen bir döngü. Cevap neredeyse her zaman aynı soruyu, hepsi için bir kez sormaktır.
Bir alarm nadir olmalı, yoksa alarm değildir. Bu yüzden ekibi yalnızca Grafana etiketliyor ve yalnızca birinin müdahale etmesi gereken şeyler için. PostHog'dan gelen yeni hata türleri kanala etiketsiz düşüyor.
Kendin bir Discord sunucusu yönetiyorsan ve burada bahsedilen modülleri görmek istiyorsan: anketler, destek kayıtları ve devamsızlıklar web panelinde, açıklamaları da dokümantasyonda.
Diğer yazılar
Bir botu 2.000'den fazla Discord sunucusunda çalıştırmak bize ne öğretti
Kodu yazarken varsaydığından farklı işleyen, ölçekle birlikte değişen dört şey.
Perde ArkasıYapay zeka sağlayıcımız modeli kullanımdan kaldırdığında
Bir model değişikliği, hatasız gelen boş cevaplar ve birden kat kat artan bir fatura. Ne bozuldu ve sebebi görmek neden bu kadar zordu.
Perde ArkasıAlphaCloud'da neden neredeyse her şey ücretsiz kalıyor
Çoğu Discord botu en faydalı özelliklerini bir aboneliğin arkasına kilitler. Biz bilerek bunu yapmıyoruz ve bunun cömertlikle, göründüğünden daha az ilgisi var.