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

Talha Namaldı - Jul 29 - - Dev Community

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .