Uygulama Gözlemlenebilirliği Ekosisteminde OpenTelemetry Ne İfade Ediyor?

Süleyman Fazıl Yeşil
6 min readNov 4, 2024

--

Kaynak: https://www.cncf.io/reports/opentelemetry-project-journey-report/

Çok yaptığım bir şakadır: Kimse IBM satın almaktan ötürü kovulmaz. Şu an telemetri için OpenTelemetry’e geçmeyi öneren hiç kimse de kovulmaz.

Martin Thwaites

Tarihsel Arkaplan

2000'lerde uygulamalar günümüze kıyasla çok basitti. Bir iki bileşenden oluşuyorlardı. Uygulama sağlığını ve performansını takip etmek çok daha basitti. Uygulama bir sunucu üzerine kurulurdu. Bu sunucunun CPU, RAM kullanımını ve isteklerdeki gecikmeler (latency) ve hata oranları (error rates) gibi belli başlı metrikleri izlemek (monitoring) operasyonel açıdan yeterli oluyordu. Uygulama logları ise sunucu üzerindeki log dosyasına yazılır, problem anında sorunu anlamak için bu log dosyası incelenirdi.

2010'lara gelindiğinde önce bulut sistemler, sonrasında konteynır ve konteynır yönetim sistemleri, mikroservisler, DevOps pratikleri ve otomasyonun yaygınlaşmasıyla birlikte uygulamalar daha karmaşık mimarilere evrildi. Yeni dünyanın da yeni problemleri ortaya çıktı. Yeni problemler için yeni çözümler geliştirildi.

Dağıtık uygulamalar ve mikroservislerle beraber dağılmış vaziyetteki uygulama loglarını bir yere toplama ihtiyacı belirdi. Buna çözüm olarak da ELK (Elastic, Logstash, Kibana) vb. merkezi log sistemleri ortaya çıktı.

Uygulama metriklerini bir yerde toplamak için Prometheus, InfluxDB gibi zaman bazlı sorgulamalar için optimize edilmiş zaman serisi (TSDB: Time Series Database) veritabanları ortaya çıktı.

Bir sürü servisten oluşan dağıtık mimarili uygulamalarda veri akışının takibini yapabilmek için Zipkin ve sonrasında OpenTracing vb gibi dağıtık iz sürme (distributed tracing) araçları ortaya çıktı.

2019 yılına gelindiğinde aynı işi yapan CNCF (Cloud Native Computing Foundation) bünyesindeki OpenTracing ve Google’ın OpenCensus projeleri birleşme kararı aldı ve CNCF bünyesinde OpenTelemetry projesi ortaya çıktı.

OpenTelemetry projesi kapsamında uygulama gözlemlenebilirliği alanında log kayıtları, metrikler ve dağıtık izlemeden oluşan verilerin toplanması ve iletimini düzenleyen tedarikçi ve ürün bağımsız standartlar ve protokol belirlendi.

Proje, uygulama gözlemlenebilirliği ekosisteminde büyük bir rağbet gördü. Sektördeki büyük tedarikçi firmalar, ortak bir standarta ve protokole sahip olma fikrini benimsedi ve katkı sunmaya başladı. Kendi ürünlerinde OpenTelemetry protokolünü desteklemeye başladılar.

OpenTelemetry Nedir, Ne Değildir?

  • OpenTelemetry, uygulama logları, metrikler ve izler (traces) gibi telemetri verisinin toplanması ve aktarımı için bir çerçeve (framework) sunan açık bir standarttır.
  • OpenTelemetri bir protokoldür. Protokol kapsamında toplanacak verilerin veri modeli, isimlendirmesi, nasıl ileteceği, API kontratı vb konular belirlenmiştir.

Örneğin HTTP ile ilgili isimlendirme standartları (semantic conventions) şöyle:

Kaynak: https://opentelemetry.io/docs/specs/semconv/http/http-spans/
  • OpenTelemetry en yaygın kullanılan 10'dan fazla dili destekleyecek şekilde veri toplamak için geliştiricilere SDK sunar.

Örneğin Java ekosisteminde Spring, Apache kütüphaneleri, uygulama sunucuları için otomatik instrumentasyon desteği sunar. Böylelikle bu kütüphanelerden geçen veri akışlarını otomatik olarak takip edebilir oluruz.

Kaynak: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md
Kaynak: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md
Kaynak: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md
  • OpenTelemetry farklı kaynaklardan verilerin toplanıp yine farklı sistemlere iletimi için OpenTelemetry Collector vb araçlar sunar.
Kaynak: https://opentelemetry.io/docs/collector/
  • OpenTelemetry APM araçlarının, izleme araçlarının, gözlemlenebilirlik araçlarının muadili değildir. Veri toplama, uygulama instrumentasyonu, veri iletimine odaklanır. Fakat toplanan verilerin yorumlanmasına ilişkin bir şey söylemez. Verilerin saklanması ve işlenmesine yönelik bir şey söylemez. Bu kısımları tedarikçi firmalara bırakır. Yani bir observability backend sunmaz. Toplanan verileri ya Jaeger ve Prometheus gibi açık kaynak araçlara veya Dynatrace, Splunk, Instana gibi ticari ürünlere aktarmanız gerekir.

Open Telemetry Kavramsal Dünyası

Gözlemlenebilirlik temel olarak uygulama sağlığını ve performansını takip etmek, herhangi bir anda “ne oluyor” ve “neden oluyor” sorularına yanıt vermeyi hedeflemektedir.

Gözlem temelde toplanan sinyaller üzerinden yapılmaktadır. En temel sinyaller (signals) şöyle:

  • Metrikler
  • İzler (traces)
  • Loglar

Metrikler ve loglar nispeten daha aşina olduğumuz şeyler. Metrikler cevap süresi, CPU kullanımı, hata oranları vb gibi sayısal ölçümleri içerir. Loglar bildiğimiz uygulama loglarıdır, her ne kadar telemetri çerçevesinde korelasyon verisiyle zenginleştiriliyor olsalar da.

İzler (traces) nispeten yeni bir kavram. Dağıtık izleme (distributing tracing) kavramı ile birlikte ortaya çıkmış. Temel olarak dağıtık bir sistemde akan trafiğin farklı noktalarda iz bırakması ve bu izler üzerinden veri akışını takip etmeye odaklamış bir tür loglama aslında. “logs are basically boring traces” diyor Martin Thwaites, yani loglar da bir bakıma iz bırakıyor, fakat odak noktası tam iz takibi değil ve sistematik bir çerçeve sunmuyor.

Dağıtık izlemede yaparken ilk çıkış noktasında bir iz (trace) oluşturuluyor ve trace id ile ifade ediliyor. Sonrasında sistemdeki alt operasyonlar span’leri oluşturuyor ve span id ile ifade ediliyor.

Günün sonunda bu veriler birleştirilerek aşağıdaki gibi bir grafik elde etmek mümkün oluyor.

Kaynak: https://opentelemetry.io/docs/concepts/observability-primer/

İz takibi için uygulama içinde veya uygulamalar arasında iz bağlamı zincir halinde aktarılıyor (context propagation). Bu aktarımda W3C TraceContext spesifikasyonu kullanılıyor.

Dağıtık izleme ile ilgili 2016 şartlarında konuyu aktaran yazıya da bir göz atabilirsiniz.

Uygulamanın instrumentasyonu için iki yöntem bulunuyor:

  • Otomatik instrumentasyon
  • Kod tabanlı instrumentasyon

Kod tabanlı instrumentasyonda, ilgili SDK’ları projeye ekleyip kendimiz izler bırakıyoruz. Otomatik instrumentasyondaysa koda dokunmak gerekmiyor. Örneğin Java için JVM’e ilgili jar dosyasının yolunu javaagent parametresi olarak geçmek yeterli oluyor.

Bir diğer kavram örnekleme (sampling). Çok fazla gözlem verisi üretildiği durumlarda örnekleme yapmak mümkün, bunun için çeşitli yöntem ve konfigürasyonlar sunuluyor.

OpenTelemetry Collector aracı üzerinden farklı gözlemlenebilirlik (observability) araçlarına veriler aktarılıyor. Collector aracı için Kubernetes ve farklı ortamlara kurulum için yöntemler sunuluyor.

OpenTelemetry ve Ticari APM Araçları Uyumluluğu

OpenTelemetry protokolü önde gelen ticari APM araçlarınca da benimsenmiş ve entegrasyon desteği sunulmaktadır. Projede masada yer alıp, standartın, protokolün ve araçların geliştirilmesinde aktif olarak rol almaktadırlar.

Böyelikle uygulamarın belli bir APM tedarikçisine bağlı olma zorunluluğu ortadan kalkmış, telemetri verisini tedarikçi bağımsız olarak toplayıp herhangi bir açık kaynak veya ticari uygulamaya aktarabilme imkanı doğmuştur.

Tedarikçi firmalar da uygulama verisini toplamak için farklı dillerde geliştirme yapmak ve bu işlere kaynak ayırmak yerine OpenTelemetry ile toplanan verileri işleme imkanına kavuşmaktadırlar. Ayrıca kendi ürünlerinin veri işleme özelliklerini öne çıkararak rekabetçi olabilmekte ve diğer araçların yerini alma noktasında daha fazla imkana sahip olabilmektedirler.

Kaynak: https://www.dynatrace.com/resource-center/opentelemetry
Kaynak: https://www.appdynamics.com/product/opentelemetry
Kaynak: https://www.ibm.com/products/instana/opentelemetry
Kaynak: https://www.splunk.com/en_us/solutions/opentelemetry.html

OpenTelemetry Projesinde Aktif Rol Alanlar

Uygulama gözlemlenebilirliği (observability) ekosistemindeki büyük oyuncular OpenTelemetry projesinde aktif olarak rol alıyorlar.

Örneğin opentelemetry-colllector reposunda aktif olarak katkı sunanlar şöyle:

Kaynak: https://github.com/open-telemetry/opentelemetry-collector

Demo

OpenTelemetry projesi farklı dillerdeki kullanım örneklerini ve ekosistemdeki belli başlı araçlarla olan entegrasyonları gerçekçi bir uygulama üzerinden deneyimlemek için bir demo proje sunmaktadır. Demo uygulamayı Docker Desktop ile makinemizde kolayca ayağa kaldırıp test edebiliyoruz: https://opentelemetry.io/ecosystem/demo/

Bitirirken

Bu yazıda gözlemlenebilirlik (observability) alanındaki tarihsel izleri takip edip; temel kavramlara, OpenTelemetry’nin ekosistemdeki yerine ve sektörel benimsenme durumuna göz attık. Daha çok “ne”, “neden”, “ne zaman” gibi sorulara cevap aradık.

Java tabanlı bir uygulama üzerinden pratikte kullanımı ve “nasıl” sorusuna yanıt vermek ise bir sonraki yazıya kaldı.

Faydalı olması umuduyla.

Kaynakça

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Süleyman Fazıl Yeşil
Süleyman Fazıl Yeşil

No responses yet

Write a response