Photo by Luke Chesser on Unsplash

Monitoring Modern Systems with SigNoz & OpenTelemetry

Furkan Güngör
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readJun 29, 2022

--

Modern sistemlerin izlenmesi daha karmaşıktır. Doğaları gereği son derece dinamiktirler. Özellikle microservice mimarilerine dayalı olduklarında ölçümlenebilecek ve anlamlandırılabilecek büyük miktarda telemetri verisi yayarlar.

Microservice yapısı containerized deployment ile combine edildiğinde organizasyonlar son derece dinamik sistemlere dönüşebiliyor.

Bu servisler, donanımdan ve işletim sisteminden Docker ve Kubernetes aracılığıyla application ve business performans ölçümlerine kadar çok büyük miktarda telemetri verileri yaymaktadır.

Challanges of Monitoring Modern System

  • Open Source and Cloud Services : Open source ve SaaS felsefesi, database, message broker ve kuyruk yapıları dahil olmak üzere yazılım araçlarının sayısını artırdı. İzleme sistemlerinin artık tam bir gözlemlenebilirlik sağlamak için büyük ve dinamik bir üçüncü taraf platform ekosistemiyle entegrasyonlar sağlaması gerekiyor.
  • Microservice : Tipik bir monolith uygulama, kendi programlama dilini ve veritabanını çalıştıran bir yapı olarak yaşamına devam ederken, her biri bağımsız deploymentlara sahip, ölçeklenen bir düzine veya daha fazla microservice olması izlememiz gereken ayrık bileşenlerin sayısında bir artış oluşturdu.

Zorluklar arasında en büyük zorluk bence microservice dünyasına girdiğimizde gerçekleşiyor. Bu zorluğun daha iyi anlaşılması için aşağıdaki resime odaklanmanızı istiyorum.

Amazon.com

Bu resim 2008 yılında amazon.com üzerinde uygulanan microservice mimarisinin bağımlılıklarını gösteren gerçek zamanlı bir grafiktir. Detaylı bilgi için buraya tıklayabilirsiniz.

Bir örnek daha yine yakından tanıdığımız bir organizasyondan gelsin bakalım. Karşınızda Netflix.

Netflix Architecture

Daha detaylı bilgi için buraya tıklayabilirsiniz.

  • Cloud Native and Kubernetes : Bulut mimarileri, container based yapılar ve kubernetes microservice dünyasında bulunan hizmetleri çalıştırmak için temel rol oynadılar. Ancak başka bir karmaşıklık katmanı eklediler. Artık çok daha fazla yapıyı izlememiz gerekiyor. Ana bilgisayar CPU ve bellek, Container runtime ve Kubernetes metrikleri, uygulama metrikleri ve süreleri gibi bir çok maddeyi izlemek artık daha elzem bir hal aldı.

Buraya kadar monitoring kavramının özellikle modern mimarilerde ne kadar önemli olduğunu anlatmaya çalıştım. Şimdi bu problemleri çözebileceğimiz adımlara odaklanma vakti.

OpenTelemetry

OpenTelemetry çok sayıda teknoloji üzerinde destek sağlayan ve tek tip bir enstrümantasyon katmanı sağlayarak bu zorluğun çözülmesine yardımcı olan olan open source bir projedir.

OpenTelemetry uygulamalardan üç temel sinyal üretir:

  • Traces : Service üzerinde oluşan trafik ile ilgili bilgiler
  • Metrics : Performans ve kaynak tüketimine ilişkin öngörüler
  • Logs : Exceptions ve errors bilgileri

OpenTelemetry, telemetri verilerini (izler, ölçümler ve günlükler) oluşturmak ve toplamak için kullanılır, ancak toplanan verilerin depolanmasını ve görselleştirilmesini sağlamaz. OpenTelemetry size bir arka uç analiz aracı seçme özgürlüğü sağlar. İşte tam da bu noktada SigNoz devreye giriyor.

SigNoz

SigNoz open source olarak geliştirilen bir application monitoring platformudur. Metrics monitoring, distributed tracing, exception monitoring ve custom dashboard gibi özellikleri sağlar. Her monitoring aracında olduğu gibi alert ve notification alt yapısı da bulunmaktadır. SigNoz native olarak OpenTelemetry yapısını destekler.

SigNoz gibi çok fazla monitoring aracı bulunmaktadır. Bunlardan en yaygın olarak bilinen Grafana olabilir. Her bir tool birbiri ile kıyaslandığında avantajlar ve dezavantajlar gösterebilir. Organizasyonunuza en uygun olan aracı seçmek için hem implementasyon hem de kullanılabilirlik alanında PoC gerçekleştirmenizi öneririm.

Yazının bu aşamasında SigNoz platformunu adım adım konfigüre ederken basit bir .Net uygulaması ile platformu baştan sona test edeceğiz.

Öncelikle SigNoz uygulamasını git clone komutu ile localimize klonlayalım.

git clone -b main https://github.com/SigNoz/signoz.git

cd komutu ile deploy klasörüne geçelim.

cd signoz/deploy/

docker-compose.yml dosyasını kullanarak platformu kullanıma hazır hale getirelim.

docker-compose -f docker/clickhouse-setup/docker-compose.yaml up -d

docker ps ile tüm sistemlerin up durumda olduğunu kontrol edelim. Toplamda 8 adet servisin olması gerekiyor.

docker ps

http://localhost:3301 adresine giderek panele ulaşabilirsiniz.

SigNoz Dashboard
dotnet add package OpenTelemetry.Extensions.Hosting --prerelease
dotnet add package OpenTelemetry.Instrumentation.AspNetCore --prerelease
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol --prerelease

Gerekli OpenTelemetry paketlerini yükledikten sonra Program.cs içerisinde Signoz ve OpenTelemetry konfigürasyonlarını gerçekleştirmemiz gerekiyor.

dotnet run ile uygulamayı çalıştırıp test için eklenen endpointlere bir kaç kere istek attıktan sonraSignoz uygulamasında /application sayfasına gittiğinizde eklediğiniz servisi görmeniz gerekmektedir.

Ardından traces sekmesine giderek servisimizin bıraktığı izleri inceleyebiliriz.

SigNoz ile başka neler yapılabilir?

  • Sadece traces için değil, oluşan hataları da SigNoz üzerinde görüntüleyebilirsiniz.
  • Servis içerisindeki en yavaş endpointleri görebilirsiniz.
  • downstream servislerde, yavaş DB sorgularında, external provider gibi 3. taraf hizmetlerine çağrıda vb. konularda servisinizi izlemenizi sağlar.

SigNoz vs Jeager

Jaeger yalnızca distributed tracing yapar. SigNoz hem metrikleri hem de tracing yapar.

Ayrıca, SigNoz, Jaeger’a göre birkaç gelişmiş özelliğe sahiptir:

  • Jaegar UI, izlemelerde veya filtrelenmiş izlemelerde herhangi bir ölçüm göstermiyor
  • Jeager, filtrelenmiş izlemelerde veri toplayamaz. Ancak SigNoz üzerinde istediğiniz şartları belirleyerek verileri toplayabilirsiniz.

OpenTelemetry .NET client kütüphanelerini kullanarak, logs, metrics ve traces oluşturabilirsiniz. Ardından, toplanan telemetri verilerini depolamak ve görselleştirmek için SigNoz gibi açık kaynaklı bir APM aracı kullanabilirsiniz.

SigNoz blog sayfasında ve github hesabında çok sayıda döküman bulunmakta. Yazının sonunda bu kaynakları sizinle paylaşıyor olacağım.

Yazdığınız kodlar production ortamında hatasız çalışsın. Testler sizi korusun. 🙏

SigNoz — Open-source alternative to DataDog | SigNoz

SigNoz/signoz: SigNoz is an open-source APM. It helps developers monitor their applications & troubleshoot problems, an open-source alternative to DataDog, NewRelic, etc. 🔥 🖥. 👉 Open source Application Performance Monitoring (APM) & Observability tool (github.com)

Documentation | OpenTelemetry

Getting Started | OpenTelemetry

Docker Standalone | SigNoz

--

--

Furkan Güngör
Devops Türkiye☁️ 🐧 🐳 ☸️

Solution Developer — I want to change the world, give me the source code.