Spitfirev0.71.0 · Yenilikler

Sürüm: 0.71.0Bu dokümantasyon Spitfire 0.71.0 içindir.

Node.js servisini OTel ile bağlamak

@opentelemetry/auto-instrumentations-node koda dokunmadan trace, metrik ve log toplar. Değerler ve genel kurallar: Servisleri OTel ile bağlamak: genel.

Sürüm tablosu

Node.js @opentelemetry/auto-instrumentations-node Not
22.15 ve sonrası (22, 24, 26) 0.82.0 OTel'in desteklediği LTS sürümleri
18.19+, 20.6+, 22.0 – 22.14 0.81.2, @opentelemetry/api 1.9.1 0.82.0 bu sürümlerde kurulmaz; 0.81.2, api 1.10.0 ile kurulmaz
18.18 ve öncesi (16 dahil) desteklenmiyor Node.js 22'ye yükseltin ya da yalnız sunucu metrikleri: Collector

Sürümünüzü bulun: servisin kullandığı Node.js ile node --version.

Aşağıdaki komutlarda 0.82.0 ve api@1.10.0 yazılıdır; bandınız 18/20/22.0–22.14 ise 0.81.2 ve api@1.9.1 yazın.

Doğrulandı: 2026-11-02. Kaynak: desteklenen çalışma ortamları, npm sayfası (engines), paket belgesi.

Gerekenler

  • Spitfire adresi https://<spitfire> ve OTLP alıcısı anahtarı sfotlp_…
  • Tower adresi http://<tower>:4318 ve Collector token'ı sfcol_…
  • Protokol http/protobuf
  • Servis adı <service-name>, sürümü <service-version>, ortamı <environment>
  • Özel CA varsa CA dosyası /etc/spitfire-otel/ca.pem
  • Proxy varsa Tower ve Spitfire NO_PROXY içinde
  • Örnekleme parentbased_traceidratio, 0.1

Linux (systemd)

  1. Uygulamanın klasöründe (package.json'ın olduğu yer) paketleri kurun:
bash
npm install --save @opentelemetry/auto-instrumentations-node@0.82.0 @opentelemetry/api@1.10.0
sudo mkdir -p /opt/spitfire-otel /etc/spitfire-otel
  1. /etc/spitfire-otel/<service-name>.env dosyasını oluşturun, şunu yapıştırın:
bash
IS_OTEL_ENABLED=true
OTEL_SERVICE_NAME=<service-name>
OTEL_RESOURCE_ATTRIBUTES=service.version=<service-version>,deployment.environment=<environment>
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://<spitfire>/otlp/v1/traces
OTEL_EXPORTER_OTLP_TRACES_HEADERS=authorization=sfotlp_…
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://<spitfire>/otlp/v1/logs
OTEL_EXPORTER_OTLP_LOGS_HEADERS=authorization=sfotlp_…
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://<tower>:4318/v1/metrics
OTEL_EXPORTER_OTLP_METRICS_HEADERS=authorization=sfcol_…
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1
NO_PROXY=<tower>,<spitfire>
#OTEL_EXPORTER_OTLP_CERTIFICATE=/etc/spitfire-otel/ca.pem
  1. İzni kısın: sudo chmod 600 /etc/spitfire-otel/<service-name>.env
  2. /opt/spitfire-otel/otel-run dosyasını oluşturun, şunu yapıştırın:
bash
#!/bin/sh
# IS_OTEL_ENABLED=true: OTel --require ile yüklenir; başka her değer: yüklenmez, SDK kapalı.
if [ "$IS_OTEL_ENABLED" = "true" ]; then
  export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register ${NODE_OPTIONS:-}"
else
  export OTEL_SDK_DISABLED=true
fi
exec "$@"
  1. Çalıştırılabilir yapın: sudo chmod 755 /opt/spitfire-otel/otel-run
  2. Servisin şimdiki başlatma komutunu bulun: systemctl cat <unit> | grep ^ExecStart
  3. sudo systemctl edit <unit> açın, şunu yapıştırın (son satırda ExecStart='tan sonraki komutu 6. adımdaki komutla değiştirin; WorkingDirectory uygulamanın klasörü olmalı):
ini
[Service]
EnvironmentFile=/etc/spitfire-otel/<service-name>.env
WorkingDirectory=/srv/app
ExecStart=
ExecStart=/opt/spitfire-otel/otel-run /usr/bin/node /srv/app/server.js
  1. Yeniden başlatın: sudo systemctl daemon-reload && sudo systemctl restart <unit>
  2. Yüklendiğini görün: journalctl -u <unit> -n 50 çıktısında Cannot find module '@opentelemetry/auto-instrumentations-node/register' hatası olmamalıdır.
Not

pm2 ile çalışıyorsa otel-run'ı kullanmayın: ortam dosyasındaki değerleri pm2'nin ecosystem.config.js dosyasında env altına yazın ve node_args: "--require @opentelemetry/auto-instrumentations-node/register" ekleyin; kapatmak için node_args satırını silip OTEL_SDK_DISABLED=true yazın.

Docker

  1. otel-run dosyasını (Linux 4. adım) Dockerfile'ın yanına koyun.
  2. Dockerfile'a ekleyin (npm install'dan sonra, WORKDIR uygulamanın klasörü); ENTRYPOINT'in başına /opt/spitfire-otel/otel-run gelir, gerisi sizin komutunuzdur:
dockerfile
RUN npm install --save @opentelemetry/auto-instrumentations-node@0.82.0 @opentelemetry/api@1.10.0
COPY --chmod=755 otel-run /opt/spitfire-otel/otel-run
ENTRYPOINT ["/opt/spitfire-otel/otel-run", "node", "server.js"]
  1. Ortam dosyasını (Linux 2. adım) Docker makinesinde /etc/spitfire-otel/<service-name>.env olarak kaydedin.
  2. Çalıştırın: docker run --env-file /etc/spitfire-otel/<service-name>.env … ya da compose'da servisin altına env_file: /etc/spitfire-otel/<service-name>.env.
  3. Ortam dosyası değişince konteyneri yeniden oluşturun (restart yetmez): docker compose up -d --force-recreate <service>

Kubernetes

  1. Image'ı Docker bölümündeki gibi hazırlayın.
  2. Ortam dosyasını (Linux 2. adım) <service-name>.env olarak kaydedip Secret yapın:
bash
kubectl create secret generic <service-name>-otel --from-env-file=<service-name>.env \
  --dry-run=client -o yaml | kubectl apply -f -
  1. Deployment'ta container'ın altına ekleyin:
yaml
envFrom:
  - secretRef:
      name: <service-name>-otel
  1. Yeniden başlatın: kubectl rollout restart deployment/<deployment>

Windows (servis)

  1. Uygulamanın klasöründe (package.json'ın olduğu yer) paketleri kurun:
powershell
npm install --save @opentelemetry/auto-instrumentations-node@0.82.0 @opentelemetry/api@1.10.0
  1. Servis uygulamanın klasöründe başlamalı (NSSM'de: nssm set <windows-service> AppDirectory C:\app; başka bir sarmalayıcıda onun çalışma klasörü ayarı).
  2. Yönetici PowerShell'de <windows-service> yerine servisin adını (Get-Service listesindeki Name) yazıp çalıştırın:
powershell
$Service = "<windows-service>"
$IS_OTEL_ENABLED = "true"
$Otel = @(
  "IS_OTEL_ENABLED=$IS_OTEL_ENABLED",
  "OTEL_SERVICE_NAME=<service-name>",
  "OTEL_RESOURCE_ATTRIBUTES=service.version=<service-version>,deployment.environment=<environment>",
  "OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf",
  "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://<spitfire>/otlp/v1/traces",
  "OTEL_EXPORTER_OTLP_TRACES_HEADERS=authorization=sfotlp_…",
  "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://<spitfire>/otlp/v1/logs",
  "OTEL_EXPORTER_OTLP_LOGS_HEADERS=authorization=sfotlp_…",
  "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://<tower>:4318/v1/metrics",
  "OTEL_EXPORTER_OTLP_METRICS_HEADERS=authorization=sfcol_…",
  "OTEL_TRACES_EXPORTER=otlp",
  "OTEL_METRICS_EXPORTER=otlp",
  "OTEL_LOGS_EXPORTER=otlp",
  "OTEL_TRACES_SAMPLER=parentbased_traceidratio",
  "OTEL_TRACES_SAMPLER_ARG=0.1",
  "NO_PROXY=<tower>,<spitfire>"
)
# Özel CA: $Otel += "OTEL_EXPORTER_OTLP_CERTIFICATE=C:\spitfire-otel\ca.pem"
if ($IS_OTEL_ENABLED -eq "true") {
  $Otel += "NODE_OPTIONS=--require @opentelemetry/auto-instrumentations-node/register"
} else {
  $Otel += "OTEL_SDK_DISABLED=true"
}
$Key = "HKLM:\SYSTEM\CurrentControlSet\Services\$Service"
$Keep = @((Get-ItemProperty $Key).Environment | Where-Object { $_ -and $_ -notmatch '^(IS_OTEL_ENABLED|OTEL_|NODE_OPTIONS|NO_PROXY)=' })
Set-ItemProperty $Key -Name Environment -Type MultiString -Value ($Keep + $Otel)
Restart-Service -Name $Service -Force
  1. Yüklendiğini görün: servisin logunda Cannot find module '@opentelemetry/auto-instrumentations-node/register' hatası olmamalı.
Not

--require paketi çalışma klasöründen arar (Node.js belgesi); 2. adım bu yüzden gerekir.

Kapatma ve kaldırma

  1. Kapatmak: ortam dosyasında (Windows'ta betikte) IS_OTEL_ENABLED=false yapın ve servisi yeniden başlatın (Linux 8. adım, Docker 5. adım, Kubernetes 4. adım ya da Windows betiğini yeniden çalıştırın).
  2. Kaldırmak: sudo systemctl revert <unit>, sudo rm -r /opt/spitfire-otel /etc/spitfire-otel ve npm uninstall @opentelemetry/auto-instrumentations-node @opentelemetry/api; Docker'da Dockerfile'a eklenen satırları silin; Windows'ta servisin Environment değerinden OTel satırlarını silin.

Sık karşılaşılan sorunlar

Belirti Neden Çözüm
Cannot find module '@opentelemetry/auto-instrumentations-node/register' Servis uygulamanın klasöründe başlamıyor WorkingDirectory'yi (Docker'da WORKDIR) node_modules'ün olduğu klasör yapın
npm EBADENGINE uyarısı ya da kurulum hatası Node.js sürümü bandın dışında Bandınızın sürümlerini (0.81.2, api@1.9.1) yazın
ES module ("type": "module") uygulamada span yok Bazı kütüphaneler ESM'de --require ile yakalanmaz otel-run'da NODE_OPTIONS'un başına --experimental-loader=@opentelemetry/instrumentation/hook.mjs ekleyin (ESM desteği)
Trace, metrik gelmiyor Adres, token ya da ağ Doğrulama adımlarını uygulayın

İlgili sayfalar