测试从 Web 应用程序到 api 的 opentelemetry

问题描述

我有一个网络应用程序APPA,它调用一个网络服务ma​​ster,后者调用一个网络服务slave。为了对这些痕迹进行关联,我正在使用 opentelemetry。当ma​​ster调用slave时,我可以在Jaeger中看到痕迹,但是当web应用调用ma​​ster时,我看到只有web应用被调用并且没有任何痕迹与网络服务相关,我可以分别看到来自 2 个相关网络服务的痕迹:

enter image description here

但是当我创建 Web 应用程序时,我只能看到来自 Web 应用程序的痕迹,而不是所有 3 个组件:

enter image description here

这是我在 Web 应用程序中所做的:

import { context,getSpan,setSpan } from '@opentelemetry/api';
import { ConsoleSpanExporter,SimpleSpanProcessor } from '@opentelemetry/tracing';
import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { WebTracerProvider } from '@opentelemetry/web';
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
import { ZoneContextManager } from '@opentelemetry/context-zone';
import { B3Propagator } from '@opentelemetry/propagator-b3';
import { registerInstrumentations } from '@opentelemetry/instrumentation';

const provider = new WebTracerProvider();

registerInstrumentations({
  instrumentations: [
    new FetchInstrumentation({
      ignoreUrls: [/localhost:8090\/sockjs-node/],propagateTraceHeaderCorsUrls: [
        'https://cors-test.appspot.com/test','https://httpbin.org/get',],clearTimingResources: true
    }),tracerProvider: provider,});

provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.addSpanProcessor(new SimpleSpanProcessor(new CollectorTraceExporter({
  serviceName: 'nodejs-opentelemetry-web-fetch',url: 'http://localhost:55681/v1/traces'
})));
provider.register({
  contextManager: new ZoneContextManager(),propagator: new B3Propagator(),});

const webTracerWithZone = provider.getTracer('example-tracer-web');

const getData = (url) => fetch(url,{
  method: 'GET',headers: {
    'Accept': 'application/json','Content-Type': 'application/json',},});

// example of keeping track of context between async operations
const prepareClickEvent = () => {
  const url = 'http://localhost:3000';

  const element = document.getElementById('button1');

  const onClick = () => {
    const singleSpan = webTracerWithZone.startSpan(`files-series-info`);
    context.with(setSpan(context.active(),singleSpan),() => {
      getData(url).then((_data) => {
        getSpan(context.active()).addEvent('fetching-single-span-completed');
        singleSpan.end();
      });
    });
    for (let i = 0,j = 5; i < j; i += 1) {
      const span = webTracerWithZone.startSpan(`files-series-info-${i}`);
      context.with(setSpan(context.active(),span),() => {
        getData(url).then((_data) => {
          getSpan(context.active()).addEvent(`fetching-span-${i}-completed`);
          span.end();
        });
      });
    }
  };
  element.addEventListener('click',onClick);
};

window.addEventListener('load',prepareClickEvent);

我在关联所有 3 个组件时做错了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...