· kaynak Hacker News – Front Page (native)
Rails'te vendor'dan bağımsız OpenTelemetry loglama, Collector olmadan
SixPatterns, Rails için doğrudan Grafana'ya giden bir OpenTelemetry loglama kurulumunu ve bunu çalışır hale getirmek için upstream'te düzelttikleri iki Ruby SDK hatasını anlatıyor.

Kilitlenme olmadan loglama
SixPatterns'daki bir ekip, bir Rails uygulamasına OpenTelemetry loglaması eklemenin adım adım anlatımını yayımladı; standardı özellikle gözlemlenebilirlik (observability) boru hattını tek bir vendor'a bağlamamak için seçtiler. Hacker News'te öne çıkan yazıya göre OpenTelemetry üç bağımsız sinyal üretiyor — loglar, metrikler ve trace'ler — dolayısıyla bir ekip yalnızca loglamayı benimseyebilir ve geri kalanını devreye almak zorunda kalmaz. Tüm sinyaller vendor'dan bağımsız OpenTelemetry Protocol (OTLP) formatında taşıdığı için SixPatterns, ileride Grafana Cloud'dan Datadog veya New Relic'e uygulama kodunu yeniden yazmadan geçebileceğinizi savunuyor.
Collector'ı atlamak
Geleneksel OpenTelemetry dağıtımı, uygulama ile vendor arasına bir Collector süreci koyar; bu genellikle bir sidecar container ya da host'a yerel bir servistir. Uygulama telemetriyi yerel ağ üzerinden yollar, Collector bunları toplar ve ileriye iletir.
SixPatterns bu katmanı atlayarak logları Ruby SDK'dan doğrudan Grafana Cloud'a aktardı; yaklaşımın Scout APM'in loglama gem'inin veriyi uygulamadan doğrudan göndermesine benzediğini belirtiyorlar. Log hacimleri SDK'nın yerleşik toplu gönderimi (batching) tarafından karşılanacak kadar küçük; yine de tamponlama, örnekleme veya sansürlleme (redaction) uygulamanın dışında yapılması gerektiğinde bir Collector öneriyorlar.
Devredeki gem'ler
OpenTelemetry'nin Ruby ekosistemi bilinçli olarak modüler ve yazı her biri tek bir iş yapan altı gem'i bir araya getiriyor:
opentelemetry-sdk— çekirdek framework ve yapılandırma giriş noktasıopentelemetry-logs-sdk— tracing'den ayrı olan loglama sinyalini ekleropentelemetry-exporter-otlp— trace'leri OTLP üzerinden dışa aktarıropentelemetry-exporter-otlp-logs— logları OTLP üzerinden dışa aktarıropentelemetry-instrumentation-all— Rails, Rack, Active Record ve daha fazlası için instrumentation'ları paketleropentelemetry-instrumentation-logger— standart RubyLogger'ı bağlayarak sıradan log mesajlarının OpenTelemetry log kayıtlarına dönüşmesini sağlar
Yapılandırma
Exporter standart OTLP ortam değişkenlerini okur; dolayısıyla kurum iki değişkene indirgeniyor: vendor URL'sini tutan OTEL_EXPORTER_OTLP_ENDPOINT ve token'la birlikte bir Authorization header'ı taşıyan OTEL_EXPORTER_OTLP_HEADERS.
Ardından config/initializers/opentelemetry.rb içindeki bir initializer OpenTelemetry::SDK.configure çağırıyor, bir servis adı belirliyor ve yüklenmiş tüm instrumentation gem'lerini etkinleştiren use_all'ı çalıştırıyor. SixPatterns, initializer'ı, endpoint değişkeni ayarlanmamışsa erken çıkan bir koşulla sarmalayarak yerel geliştirmeyi sessiz tutuyor.
Dağıtımdan önce hızlı bir sağlama için yazı, log kayıtlarını vendor'a hiçbir şey göndermeden terminale basan OTEL_LOGS_EXPORTER=console öneriyor.
İki Ruby SDK hatası, iki upstream düzeltmesi
Grafana Cloud'a karşı yapılan testler, Ruby SDK'nın diğer dil SDK'larından ve OpenTelemetry spesifikasyonundan farklı davrandığı iki noktayı ortaya çıkardı.
İlki base path ile ilgiliydi. Bazı backend'ler OTLP verisini belirli bir ön eke sahip bir endpoint'te bekler; örneğin Grafana Cloud için /otlp — ancak exporter, sinyal yolunu eklerken bu ön eki atıyordu ve amaçlanan /otlp/v1/logs adresi /v1/logs oluyordu. SixPatterns sorunu issue #2157 olarak bildirdi ve düzeltmeyi PR #2158 ile merger etti; düzeltme opentelemetry-exporter-otlp-logs v0.5.1'de yayımlandı.
İkincisi HTTP yanıtlarıyla ilgiliydi. Grafana Cloud log alımını 204 No Content ile onaylar, ancak exporter yalnızca 200 OK'yi başarı sayıyordu; bu yüzden her dışa aktarım başarılı olduğu halde hata olarak loglanıyordu. Ekip issue #2043'ü açtı ve PR #2044 ile düzeltti; aynı gem'in v0.4.0 sürümünde yayımlandı.
Grafana Cloud'a karşı exporter'ın eski bir sürümünü çalıştıranlar, aynı nedenlerden dolayı hayalet export hataları görüp görmediklerini ya da isteklerin sessizce yanlış URL'ye gidip gitmediğini kontrol etmek isteyebilir.
Yol haritasında sırada ne var
Loglar akmaya başladığında SixPatterns, yapılandırılmış loglamayı (structured logging) doğal adım olarak işaret ediyor, başlangıç noktası olarak rails_semantic_logger gem'ini anıyor ve tam OpenTelemetry entegrasyonunu ele alan bir devam yazısına işaret ediyor.
Neden önemli
Loglama, ekiplerin genellikle en son bağladığı gözlemlenebilirlik sinyalidir ve Ruby'nin OpenTelemetry loglama desteği, bu ikisi gibi spesifikasyon sapmalarının hâlâ düzeltildiği kadar genç. Yazı iki açıdan yararlı: Collector işletmeden OTLP logları isteyen Rails ekipleri için elle tutulur, kopyala-yapıştır bir tarif sunuyor ve bir standardı erken benimsemenin bazen upstream'e düzeltme katmak anlamına geldiğini hatırlatıyor. Her iki yama da yayımlandığına göre SixPatterns'ın tarif ettiği doğrudan export yolu, düşük hacimli Rails uygulamaları için pratik bir seçenek — ve veri formatı vendor'dan bağımsız olduğu için ileride backend değiştirmek bir yeniden yazım değil, bir yapılandırma değişikliği olacaktır.
- #opentelemetry
- #rails
- #ruby
- #observability
- #logging
- #grafana