Yük testinde OpenTelemetry: kök nedene yaklaşma
Bir yük testi size sistemin dışarıdan nasıl göründüğünü söyler: p95 yükseldi, hata oranı arttı. Asıl soru içeride: hangi servis, hangi veritabanı, hangi kaynak? Spitfire, sisteminizin kendi trace, metrik ve log'larını koşunun yük basamaklarıyla hizalar ve ölçülen değişimi rakamlarıyla yazar. Agent kurmaz.
Açık standartlar, açık araçlar
Spitfire yalnız açık standartları ve açık araçları konuşur. Bağlantıları yönetici Observability sayfasında tanımlar; Spitfire yalnız orada listelenen sistemlerle konuşur, token ve parolalar bağlantı sırları gibi şifreli saklanır.
| Kaynak | Yön | Spitfire ne kullanır |
|---|---|---|
| OTLP | Collector'ınız → Spitfire | trace, metrik, hata ve uyarı log'ları |
| Prometheus | Spitfire → query_range | PromQL'iniz: p95, hata oranı, servis başına kaynaklar |
| Tempo · Jaeger | Spitfire → trace API | her basamağın trace'lerinden örnek |
| Loki | Spitfire → query_range | servis başına hata satırı sayısı (LogQL) |
Prometheus uyumlu kaynaklar tek bir Prometheus bağlantısıyla okunur: Grafana Mimir (/prometheus önekiyle ve X-Scope-OrgID tenant'ıyla), Thanos ve VictoriaMetrics. Sorgular sizin PromQL'inizdir; $__interval sorgu adımıyla değiştirilir. Her bağlantının bir Test düğmesi vardır.
OTLP alıcısı: Collector'a bir exporter
Spitfire kendi HTTP portunda OTLP/HTTP dinler (/otlp/v1/traces, /otlp/v1/metrics, /otlp/v1/logs; protobuf ya da JSON). OpenTelemetry Collector'ınıza, mevcut exporter'larının yanına bir tane ekleyin:
exporters:
otlphttp/spitfire:
endpoint: https://spitfire.example.com/otlp
headers:
Authorization: "Bearer sfotlp_…"
compression: gzip
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/spitfire] # + your existing exporters
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/spitfire]
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/spitfire]Alıcı yalnız bir koşu penceresine düşen veriyi tutar (başlangıçtan 30 sn önce, bitişten 60 sn sonrasına kadar) ve koşu başına üst sınırlar uygular; geri kalanı reddedildi olarak yanıtlar, Collector'ınız onu yeniden denemez. Token bir kez gösterilir, yalnız özeti saklanır.
Backend sekmesi: basamak basamak içerisi
Sorgu bağlantıları koşu bittikten sonra (geç gelen veri için 90 sn bekleyip) yalnız koşunun penceresi için okunur. Koşu sayfasının Backend sekmesi her yük basamağında şunları gösterir: her servisin, veritabanının ve çağrılan sistemin p95'i ve hata oranı; yük ve gecikme grafiği; trace id'leriyle en yavaş operasyonlar; kaynak ölçümleri; hata log sayıları.
Testin traceparent seçeneği açıksa her HTTP isteği bir W3C traceparent header'ı taşır; runner'lar her adımın en yavaş ve ilk başarısız isteklerinin trace id'lerini tutar ve Backend sekmesi bu istekleri trace'lerinizde bulur: servisin kendi süresi ve altındaki en yavaş span. Seçenek varsayılan olarak kapalıdır, çünkü yük testi hacminde her isteğin trace'i saklanırsa tracing tarafınızda depolama maliyeti doğabilir.
Koşu sayfasında Kaynak metriklerini grafiklerde göster, bir kaynak serisini (bir Prometheus sorgusu ya da OTLP metriği) koşunun kendi grafiklerinin üstüne, kendi ekseniyle ve her yük basamağının başını gösteren çizgilerle çizer.
Bulgular: yalnız verinin gösterdiği
Backend bulguları koşu bulgularıyla aynı kuralı izler: yalnız ölçüleni, rakamıyla yazar; veri eksikse eksik olduğunu söyler. "Çünkü" demez, "aynı anda" der: ölçülen iki değişimin aynı basamakta olduğunu bildirir, aralarında neden-sonuç ilişkisi kurmaz.
450 VU basamağında orders-db (veritabanı) p95'i 18 ms'den 410 ms'ye çıktı (240 span). Aynı anda checkout adımı eşiği aştı: p95 520 ms, sınır 300 ms. En yavaş operasyon: SELECT … FROM order_items.
Kırılma noktasında kaynak sıralaması
Koşu kırıldığında (bir p95 ya da hata oranı eşiği aşıldığında veya bir kırılma noktası koşusunda bir basamak geçemediğinde) Spitfire kırıldığı basamağı ve ondan önceki basamağı alır, bağlı kaynaklardaki her kaynak serisini sıralar: önce mutlak doygunluk (limitinin %95'inde ya da üstünde CPU, %90 ve üstü bellek, bağlantı bekleyen istekleri artan bir connection pool, en az iki katına çıkan bir kuyruk), sonra önceki basamağa göre en büyük göreli sıçrama. En üstteki üçü tek bir bulguda yazılır. Sıralama deterministiktir: aynı veri her zaman aynı bulguyu verir.
Sistem 560 VU'da kırıldı (p95 eşiği aşıldı: 900 ms, sınır 500 ms); aynı anda orders-db connection pool'u doldu (bekleyen bağlantı 0 → 48) ve checkout CPU'su %41'den %97'ye çıktı.
Sık sorulanlar
Sistemime bir agent kurmam gerekir mi?
Spitfire yavaşlığın nedenini söyler mi?
Veritabanı sorgularındaki değerler saklanır mı?
SELECT … FROM order_items); değerler hiç saklanmaz. Ham veri koşu log'larıyla birlikte silinir, hesaplanan sonuç koşuyla kalır.Spitfire tek komutla Docker'a ya da Kubernetes'e kurulur; ücretsiz sürümde bütün test özellikleri ve protokoller açıktır.