WebSocket Monitor

WebSocket uç noktalarının handshake'i tamamladığını ve kontrol pingi yazacak kadar bağlı kaldığını doğrulayın; TLS, upgrade ve proxy hatalarını kullanıcılardan önce yakalayın.

Sohbet odaları, canlı dashboard'lar, trading akışları, ortak editörler, hepsi WebSocket üzerine kuruludur. HTTP'den farklı olarak bağlantı tek bir round-trip'in ardından kapanmaz; dakikalarca, hatta saatlerce açık kalır. Bağlantı bozulduğunda sessizce bozulur: tarayıcının bağlantısı düşer, yeniden bağlanma döngüleri başlar. Kullanıcı yalnızca arayüz güncellenmeyi durdurduğunda fark eder.

WebSocket monitör belirli aralıklarla gerçek bir WebSocket bağlantısı açar, handshake'in ardından bir kontrol pingi yazar ve soketi kapatır. Handshake başarısız olursa, TLS sertifikası geçersizse, sunucu upgrade'i reddederse ya da ping yazımı sırasında soket düşerse monitör hemen alarm üretir; kullanıcı fark etmeden dakikalar önce. (Sunucudan pong cevabı beklenmez.)

Ne zaman kullanmalı?

  • Sohbet veya presence servisleri: Slack benzeri ürünler, oyun lobileri, çok kullanıcılı editörler.
  • Canlı dashboard'lar: trading platformları, metrik akıtan yönetim panelleri.
  • IoT backend'leri: komut-kontrol için uzun ömürlü bağlantı tutan cihazlar.
  • HTTP izlemeyi tamamlayıcı: REST API'niz çalışırken WebSocket upgrade yolu (/socket.io, /ws, load-balancer'a özgü) kırık olabilir.

Kontrol nasıl çalışır?

Her kontrol sırasıyla dört adım yapar:

  1. Dial, host'a TCP/TLS soketi açar.
  2. Handshake. HTTP Upgrade isteğini (Upgrade: websocket) gönderir. Sunucu HTTP 101 dönmelidir.
  3. Ping yaz, bir WebSocket kontrol frame'i yazar (opcode 0x9, payload ping). Yazma hatasız tamamlanırsa monitör up sayılır; pong beklenmez.
  4. Kapat, bağlantı kapatılır.

1-3 arası adımlardan birinde hata oluşursa monitör down olur ve net bir hata mesajı verir (örneğin WebSocket connection failed: x509: certificate has expired).

Monitör oluşturma

  1. Monitörler → Yeni Monitör.

  2. Tip olarak WebSocket seçin.

  3. Alanları doldurun:

    • İsim: Örneğin Chat realtime kanal
    • URL: Aşağıdakilerden biri:
      • ws://host:port/path, düz metin
      • wss://host:port/path. TLS
      • http://... / https://..., bağlantıdan önce otomatik olarak ws:// / wss:// formatına dönüştürülür
    • Kontrol Sıklığı: Minimum aralık planınıza bağlıdır. Realtime servisler için tipik olarak 1 dakika yeterlidir.
    • Zaman aşımı: Varsayılan 10 sn; proxy arkasında handshake yavaşsa artırın.
  4. Gelişmiş → Kendinden imzalı sertifikaya izin ver: staging hostu izlemiyorsanız kapalı bırakın.

  5. Kaydet.

Dahili uç noktalara ulaşmak

UptimeWarden varsayılan olarak yalnızca public host'lara bağlanır. Cluster içi WebSocket servislerini izlemek için cluster'ın içine bir custom agent kurun; özel ağ erişimi her agent için ayrı ayrı etkinleştirilebilir.

"Up" gerçekte neyi test eder?

Standart WebSocket monitör bağlantı ve handshake'i test eder, uygulama mantığını değil. Sunucu upgrade'i kabul ederken sohbet mantığınız bozuksa monitör hâlâ up raporlar.

Daha derin doğrulama için ikisini birleştirin:

  • WebSocket monitör (handshake / TLS / ağ sorunlarını yakalar)
  • GET /health tarzı bir uç noktaya HTTP monitör (uygulama katmanı sorunlarını yakalar)

İkisi birlikte hem taşıma hem uygulama katmanını kapsar.

Sık görülen hata mesajları

Hata mesajıOlası neden
WebSocket connection failed: dial tcp ... connection refusedServis kapalı veya o portu dinlemiyor.
... websocket: bad handshakeSunucu 101 dışında bir cevap döndürdü. Çoğunlukla Upgrade başlığını düşüren yanlış yapılandırılmış bir load balancer.
... x509: certificate has expired or is not yet validwss:// sertifika yenileme hatası.
WebSocket ping failed: ...Handshake başarılı ama sunucu ping yazılmadan önce soketi kapattı. Genellikle WebSocket yaşam süresi için fazla agresif bir proxy idle timeout'u.

SLA ve bildirimler

WebSocket monitörler diğer tüm tipler gibi aynı bildirim hattını kullanır:

  • Down: Dört adımdan herhangi biri başarısız.
  • Recovery: Bir sonraki kontrol dört adımı tamamlar.
  • Multi-location consensus: Desteklenir; tek bir bölgenin geçici sıkıntısı incident açmaz.
  • SLO takibi: Desteklenir; HTTP'deki gibi availability veya latency SLO'ları kurulabilir.

Sık sorulan sorular

S: Ping frame yerine özel bir mesaj gönderebilir miyim? C: Şu sürümde hayır. Kontrol tek bir WebSocket kontrol pingi yazar; sunucunun pong dönmesi şart değildir, ancak ping yazımı sırasında soket düşerse monitör down olur.

S: Bu Socket.IO sunucumu yakalar mı? C: Evet. UptimeWarden artık framework hub'larını otomatik tanır. Socket.IO uç noktası (/socket.io) önce HTTP polling handshake ile yoklanır; sağlıklıysa monitör up sayılır, ham WebSocket upgrade'i reddetmesi sorun olmaz. Yedek olarak /socket.io/?EIO=4&transport=polling için bir HTTP monitör de ekleyebilirsiniz.

S: SignalR veya SockJS hub'ım var, onlar da destekleniyor mu? C: Evet. SignalR hub'ları /negotiate HTTP handshake ile, SockJS /info ile yoklanır. Bu framework'ler ham WebSocket upgrade'ini reddeder ama sağlıklıdır; UptimeWarden bunu tanır ve doğru şekilde "up" raporlar. Hub'ın kök URL'ini (örn. wss://api.example.com/chathub) monitör olarak eklemeniz yeterli, ek yapılandırma gerekmez.

S: GraphQL/STOMP/MQTT WebSocket sunucum "unexpected response" diyor? C: Bu protokoller bir alt protokol (Sec-WebSocket-Protocol) ister. UptimeWarden URL şeklini görünce otomatik dener (graphql yolu → graphql-transport-ws, mqtt host/:9001 → mqtt, stomp host → stomp). Yine de reddedilirse monitör ayarlarından ilgili alt protokolü açıkça belirtin.

S: Karşımdaki aslında bir SSE (Server-Sent Events) uç noktasıysa? C: WebSocket değil HTTP'dir, text/event-stream döner. UptimeWarden bunu algılar ve size "monitör tipini HTTP'ye çevirin" diye önerir; SSE uç noktaları HTTP monitörüyle izlenmelidir.

S: Staging'de kendinden imzalı, production'da gerçek sertifika, tek monitör yeter mi? C: İki monitör oluşturun. Production için "kendinden imzalıya izin ver" kapalı kalsın; bu sayede gerçek bir sertifika süresi dolduğunda alarm üretir. Staging için açık tutmak gürültüyü engeller.

İlgili konular