Node.js Projelerine OpenTelemetry Entegrasyonu
Talha Namaldı

Talha Namaldı @talhanamaldi

About: I'm a computer engineering student at TED University.

Joined:
Jul 25, 2024

Node.js Projelerine OpenTelemetry Entegrasyonu

Publish Date: Jul 25 '24
2 0

Giriş

Bu yazı Node.js projelerine OpenTelemetry engtegrasyonunu projede minimum değişikilik ile nasıl yapıldığını gösterecek.

Adımlar

1. Gerekli Kütüphaneleri İndirin

OpenTelemetry'nin çalışması için gerekli kütüphaneleri npm install ile indirin.

npm install @opentelemetry/sdk-node \
  @opentelemetry/api \
  @opentelemetry/auto-instrumentations-node \
  @opentelemetry/sdk-metrics \
  @opentelemetry/sdk-trace-node
Enter fullscreen mode Exit fullscreen mode

2. Instrumentation Dosyasını Oluşturun

Projenizin en dış kısmına instrumentation.js adlı bir dosya oluşturun ve içine aşağıdaki kodu kopyalayıp yapıştırın.

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');
const { getNodeAutoInstrumentations,} = require('@opentelemetry/auto-instrumentations-node');
const { PeriodicExportingMetricReader, ConsoleMetricExporter,} = require('@opentelemetry/sdk-metrics');

const sdk = new NodeSDK({
  traceExporter: new ConsoleSpanExporter(),
  metricReader: new PeriodicExportingMetricReader({
    exporter: new ConsoleMetricExporter(),
  }),
  instrumentations: [getNodeAutoInstrumentations()],
});

sdk.start();

Enter fullscreen mode Exit fullscreen mode

Eğer OpenTelemetry çıktısını consola bastırmak yerine başka bir uygulmaya göndermek isterseniz instrumentation.js şu şekilde güncelleyiniz:

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');
const { getNodeAutoInstrumentations,} = require('@opentelemetry/auto-instrumentations-node');
const { PeriodicExportingMetricReader, ConsoleMetricExporter,} = require('@opentelemetry/sdk-metrics');

const sdk = new NodeSDK({
    traceExporter: new OTLPTraceExporter({
    url: "http://0.0.0.0:0000/v1/traces", //göndermek istediğiniz uygulmanın ip adresi ve port numarasını buraya yazın
    serviceName: "nodeJSAPI",
  }),
  metricReader: new PeriodicExportingMetricReader({
    exporter: new ConsoleMetricExporter(),
  }),
  instrumentations: [getNodeAutoInstrumentations()],
});

sdk.start();

Enter fullscreen mode Exit fullscreen mode

Eğer servis isminiz yukardaki kodda serviceName kısmına yazdığınız halde değişmezse adımları takip edin.

1. Resource kütüphanesini ekleyin

const { Resource } = require('@opentelemetry/resources');

2.

Kodun instrumentations:[getNodeAutoInstrumentations()], satırının altına yeni bir resource tanımlayın resource: new Resource({ [SEMRESATTRS_SERVICE_NAME]: 'servis_isminiz',}).

3. Projenizi instrumentation.js Dosyası ile Çalıştırın

Projenizi çalıştırmak için aşağıdaki komutu kullanın. Komutta en son kısımda yer alan dosya ismini(app.js) kendinize göre değiştirebilirsiniz.

node --require ./instrumentation.js app.js
Enter fullscreen mode Exit fullscreen mode

Bu komutu sürekli olarak yazmak zor olacağından komutu projenizdeki package.json dosyasının içindeki scripts kısmına start komutu olarak ekleyebilirsiniz.

  "scripts": {
    "start": "node --require ./instrumentation.js app.js"
  }
Enter fullscreen mode Exit fullscreen mode

Komutu package.json dosyasına ekledikten sonra npm start yazarak prejenizi OpenTelemetry kullanarak başlatabilirsiniz.

Comments 0 total

    Add comment