反应土著拥抱 - 土著追踪提供者
[大
本单元要求 反应原生拥抱 SDK。 。 。 .
此软件包将 Embrace 的本地 SDK 包裹在 OpenTeleometry 上 追踪提供者。 。 。 . 允许根据 OpenTeleometry 的 JS API 创建自定义仪器,并从中收集痕迹 任何包含在您的应用程序中的 JS Openterometry 仪器库或本地仪器.
安装
无 :
npm install @embrace-io/react-native-tracer-provider
线条 :
yarn add @embrace-io/react-native-tracer-provider
对于iOS,您还需要安装或更新应用程序的吊舱:
cd ios && pod install --repo-update
在代码中设置
在您的应用程序周期开始附近初始化 Tracer 提供者 。 拥抱SDK需要先开始
可以使用跟踪提供者。 要做到这一点, 您可以在安装提供者的组件之前启动 SDK
,或者你可以使用 enabled 参数 useEmbraceNativeTracerProvider 来防止它
启动到 SDK 准备好, 如此例子:
const {isStarted} = useEmbrace({
ios: SDK_CONFIG,
});
const optionalConfig = {...}; // See EmbraceNativeTracerProviderConfig in ./src/types/ for possible options
const {tracerProvider: embraceTracerProvider, tracer: embraceTracer} = useEmbraceNativeTracerProvider(optionalConfig, isStarted);
然后可以使用提供的追踪器在您的应用程序中添加自定义仪器:
const MyScreen = () => {
useEffect(() => {
span = embraceTracer.startSpan("my-span");
someAsyncOperation().then(() => span.end());
}, []);
return <View />;
};
如果你不想绕来绕去的话 tracer 对象,您可以从
@opentelemetry/api 图书馆。 首先将 Embrace 追踪器提供商注册为全局:
import { trace } from "@opentelemetry/api";
trace.setGlobalTracerProvider(embraceTracerProvider);
然后,你可以在苍蝇上创建新的追踪器 需要的地方和 getTracer 来自OTel API 的方法将知道
使用 Embrace 作为跟踪提供者 :
import { trace } from "@opentelemetry/api";
const MyScreen = () => {
useEffect(() => {
const tracer = trace.getTracer("my-application");
span = tracer.startSpan("my-span");
someAsyncOperation().then(() => span.end());
}, []);
return <View />;
};
这种在全球注册跟踪器提供者的方法也意味着您应用程序中的任何OTel仪器库 现在可以自动找到Embrace的提供商,并将其用于追踪.
限制
- 目前不支持将链接添加到跨度中,
span.addLink(...)财务报告和审定财务报表span.addLinks(...)举起手来. - 目前只支持字符串跨度属性, 其他类型将转换为字符串表达式
parentSpanId如果父母的跨度在孩子的跨度开始的上一个会话中已经结束,则将不会设定- 由于OTEL Swift API中的限制
schemaUrl呼吁getTracer在 iOS 上被忽略 - 由于与本地模块的通信是同步的
span.spanContext()如果 呼叫后立即执行startSpan例如:
const mySpan = tracer.startSpan("my-span");
const spanContext = mySpan.spanContext(); // can be configured to throw an error instead through EmbraceNativeTracerProviderConfig
console.log(spanContext.traceId) // prints ""
console.log(spanContext.spanId) // prints ""
为避免这个问题,您可以使用同步版本:
const mySpan = tracer.startSpan("my-span");
const spanContext = await (mySpan as EmbraceNativeSpan).spanContextAsync();
console.log(spanContext.traceId) // prints "51e60a6917dfe46871d7f1d39f66d02c"
console.log(spanContext.spanId) // prints "b2248eb58720064e"