Sürüm: 1.1.0Bu dokümantasyon Spitfire 1.1.0 içindir.
React Native uygulamasını OTel ile bağlamak
React Native ve Expo: fetch/XHR çağrıları trace olarak; backend'e traceparent ile bağlanır. Değerler: Servisleri OTel ile bağlamak: genel bakış.
Sürüm tablosu
| React Native | Metro | Expo | Paketler |
|---|---|---|---|
| 0.79 ve sonrası | gelen sürüm | SDK 53 ve sonrası | React.js sürümleri; document-load, user-interaction, context-zone, zone.js olmadan |
| 0.76 – 0.78 | 0.81.3 ve sonrası | SDK 52 | aynı |
| 0.75 ve öncesi | – | – | desteklenmiyor; 0.79'a yükseltin |
Sürümünüzü bulun: npx react-native --version (Expo: npx expo --version)
Yalnızca trace. OTel tarayıcı ve React Native instrumentation'ını deneysel sayar. Cihazda çalıştırma denetimimizde yoktu; kod bu paketlerle tip denetiminden geçti.
Doğrulandı: 2026-11-04. Kaynak: OTel JS 3.0.0 README, React Native support, OTel JS 3.x migration guide, npm @opentelemetry/sdk-trace, npm @opentelemetry/exporter-trace-otlp-http.
Gerekenler
- Spitfire adresi
https://<spitfire>(HTTPS: Android ve iOS düz HTTP'yi reddeder) - Servis adı
<service-name>, sürüm<service-version>, ortam<environment> - Uygulama klasörü (burada
/srv/app,package.jsondosyasının olduğu yer) - API adresiniz, düzenli ifade olarak (burada
^https://api\.example\.com/)
React Native ve Expo
Anahtarı oluşturun: Gözlemlenebilirlik → Tarayıcı ve uygulama anahtarı, İzin verilen kökenler boş;
sfrum_…anahtarını kopyalayın (Gözlemlenebilirlik).Paketleri ekleyin:
cd /srv/app && npm i @opentelemetry/api@1.10.0 @opentelemetry/sdk-trace@3.0.0 @opentelemetry/core@3.0.0 @opentelemetry/resources@3.0.0 @opentelemetry/exporter-trace-otlp-http@0.300.0 @opentelemetry/instrumentation@0.300.0 @opentelemetry/instrumentation-fetch@0.300.0 @opentelemetry/instrumentation-xml-http-request@0.300.0/srv/app/otel.tsdosyasını oluşturun, yapıştırın:
// IS_OTEL_ENABLED=true: OTel on; any other value: off.
import { context, propagation, trace } from '@opentelemetry/api';
import { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator } from '@opentelemetry/core';
import { resourceFromAttributes } from '@opentelemetry/resources';
import { BatchSpanProcessor, ParentBasedSampler, StackContextManager, TraceIdRatioBasedSampler, TracerProvider } from '@opentelemetry/sdk-trace';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
const IS_OTEL_ENABLED: string = 'true';
const OTEL_SERVICE_NAME = '<service-name>';
const OTEL_SERVICE_VERSION = '<service-version>';
const OTEL_ENVIRONMENT = '<environment>';
const OTEL_TRACES_ENDPOINT = 'https://<spitfire>/otlp/v1/traces';
const OTEL_KEY = 'sfrum_…';
const OTEL_TRACES_SAMPLER_ARG = 0.1;
const OTEL_PROPAGATE_URLS = /^https:\/\/api\.example\.com\//;
if (IS_OTEL_ENABLED === 'true') {
const provider = new TracerProvider({
resource: resourceFromAttributes({
'service.name': OTEL_SERVICE_NAME,
'service.version': OTEL_SERVICE_VERSION,
'deployment.environment': OTEL_ENVIRONMENT,
}),
sampler: new ParentBasedSampler({ root: new TraceIdRatioBasedSampler(OTEL_TRACES_SAMPLER_ARG) }),
spanProcessors: [new BatchSpanProcessor({
exporter: new OTLPTraceExporter({ url: OTEL_TRACES_ENDPOINT, headers: { Authorization: `Bearer ${OTEL_KEY}` } }),
})],
});
trace.setGlobalTracerProvider(provider);
context.setGlobalContextManager(new StackContextManager().enable());
propagation.setGlobalPropagator(new CompositePropagator({ propagators: [new W3CTraceContextPropagator(), new W3CBaggagePropagator()] }));
registerInstrumentations({
instrumentations: [
new FetchInstrumentation({ propagateTraceHeaderCorsUrls: [OTEL_PROPAGATE_URLS] }),
new XMLHttpRequestInstrumentation({ propagateTraceHeaderCorsUrls: [OTEL_PROPAGATE_URLS] }),
],
});
}/srv/app/index.jsdosyasının ilk satırı yapın (Expo Router:/srv/app/index.jsdosyasını bu satır veimport 'expo-router/entry';ile oluşturun,package.jsoniçinde"main": "index.js"yazın):
import './otel';- Release derleyin (Android; iOS:
run-iosile--mode Release):
cd /srv/app && npx react-native run-android --mode release- Expo: release derlemesi bunun yerine:
cd /srv/app && npx expo run:android --variant releaseDoğrulama
- Spitfire anahtarı bir uygulamadan (
Originolmadan) kabul ediyor:
curl -s -o /dev/null -w '%{http_code}' -X POST https://<spitfire>/otlp/v1/traces -H 'Authorization: Bearer sfrum_…' -H 'Content-Type: application/json' -d '{}' | grep -q '^200