DEV Community

Cover image for Node.js Projelerinde OpenTelemetry ile Default Olarak Toplanmayan Verilerin OpenTelemetrye Eklenmesi
Talha Namaldı for Açıklab

Posted on

2

Node.js Projelerinde OpenTelemetry ile Default Olarak Toplanmayan Verilerin OpenTelemetrye Eklenmesi

Giriş

Bu yazıda OpenTelemetry uygulamasının izlediği verilerin yanında farklı bir veri izlemek istersek bunu OpenTelemetrye yeni bir span olarak nasıl ekleyebileceğimizi ele alacağım.

Adımlar

Oluşturduğum yapı projenin her yerinden OpenTelemetrye izlemek istediğimiz veriyi göndermeye olanak sağlar.

1. Yeni Bir Dosya Oluşturun

OpenTelemetrye projenin herhangi bir yerinden veri göndermek için span.js adlı bir dosya oluşturun.

Bu dosyanın içine aşağıdaki kodu kopyalayıp yapıştırın.

const { context, trace } = require("@opentelemetry/api");

const addSpanAttribute = (req, res, next) => {
  res.addSpanData = (spanName,data) => {
    const currentSpan = trace.getSpan(context.active());
    if (currentSpan) {
      currentSpan.setAttribute(spanName, JSON.stringify(data));
    }
  };
  next();
};

module.exports = addSpanAttribute;

Enter fullscreen mode Exit fullscreen mode

Bu kod parçası OpenTelemetrynin context ve trace modüllerini kullanır. context aktif olan izleme bağlamını yönetmek için kullanılır trace ise izleme spanleri ile etkileşime geçmek için kullanılır.

addSpanAttribute fonksiyonu ile HTTP isteklerini işleyeceğiz.

Sonrasında response objesine addSpanData adında yeni bir fonksiyon tanımladım. Bu fonksiyon spana izlemek istediğimiz veriyi ekler. res.addSpanData fonksiyonu ile izlemek istediğimiz datayı istediğimiz isimle yeni bir span olarak OpenTelemtrye ekleyebiliriz.

2. App.js Dosyasını Düzenleyin

Öncelikle yeni eklediğimiz fonksiyonu require edin.

const addSpanAttribute = require("./app/spans/span");

Ardından app.use ile kullanıma açın.

app.use(addSpanAttribute);

3. Respons Objesine Eklenen Foksiyonun Kullanımı

İlk 2 adımı tamaladıktan sonra OpenTelemetrye veri göndermek son derece kolay.

Projenizin herhangi bir yerinden res.addSpanData('span_ismi',data)

şeklinde kullanabilirsiniz.

Örnek kullanım:

Kendi projemde http post fonkiyonuna gelen body verisini ve post fonsiyonunun sonucunda izlemek istediğim ifadeleri içeren datayı hazırlayıp res.addSpanData fonksiyonu ile OpenTelemetrye gönderdim.

Http post fonksiyonuna gelen bodyi OpenTelemetrye gönderdim:
res.addSpanData(req.body,'http.request.body')

Post işlemini tamamladıktan sonra ise takip etmek istediğim datayı hazırlayıp OpenTelemetrye gönderdim.

const formattedResponse = {
  userId: user.user_id,
  userName: user.name
};
res.addSpanData(formattedResponse,'http.response.post');
Enter fullscreen mode Exit fullscreen mode

Bu örnek kullanım ile hazırladığımız datayı OpenTelemetrye gönderip izleyebiliriz.

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series