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
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();
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();
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
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"
}
Komutu package.json dosyasına ekledikten sonra npm start
yazarak prejenizi OpenTelemetry kullanarak başlatabilirsiniz.