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;
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');
Bu örnek kullanım ile hazırladığımız datayı OpenTelemetrye gönderip izleyebiliriz.