首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zipkin (Opencensus) -2跨同名而非异名

Zipkin (Opencensus) -2跨同名而非异名
EN

Stack Overflow用户
提问于 2019-12-22 13:45:56
回答 1查看 717关注 0票数 4

前提条件:

Node.js应用

Opencensus

Zipkin Exporter与本地Zipkin服务

app.js

代码语言:javascript
复制
    const tracing = require('@opencensus/nodejs');
    const zipkin = require('@opencensus/exporter-zipkin');

    const ZIPKIN_ENDPOINT = process.env.ZIPKIN_ENDPOINT || "http://localhost:9411";

    const options = {
      url: `${ZIPKIN_ENDPOINT}/api/v2/spans`,
      serviceName: 'MyApplication'
    }
    const exporter = new zipkin.ZipkinTraceExporter(options);

    tracing.start({'exporter': exporter});
...

    app.use(..)
...

package.json

代码语言:javascript
复制
 "dependencies": {
    "@opencensus/exporter-zipkin" : "0.0.19",
    "@opencensus/nodejs" : "0.0.19"
...

Zipkin服务器通过命令在本地启动:

代码语言:javascript
复制
docker run -d -p 9411:9411 openzipkin/zipkin

触发/service1后,Zipkin将显示两个不同请求的2跨:

第一个在/service1路由器中配置的Node.js传入请求

第二个/external_service_2是对外部服务的后续调用。

问题

问题是在触发/service1之后

1. Zipkin UI显示2跨同名MyApplication(见图),

但预期有两个不同的跨度名称

2.就Zipkin UI而言,显示2个同名跨,

服务依赖项页面仅包含一个服务(参见图像)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-31 12:36:17

我在github上用官方的[医]蛇节示例测试了这个例子。

问题1:

Zipkin显示2跨名称相同的MyApplication(见图),但预期有两个不同的跨名称

为了明确起见,MyApplication是您在app.js中设置的服务名称,而span名称是您在图像/service1/service1/external_service_2上选择的名称。

我认为这是预期的行为,您有一个服务(MyApplication)、一个根跨度(/service1)和一个子span (/external_service_2)。如果您有多个服务连接到同一个Zipkin服务器,那么您将有多个服务名称。

Zipkin‘s 文档

Span

对应于特定RPC的一组注释和BinaryAnnotations。Spans包含标识信息,如traceId、spanId、parentId和RPC名称。

跟踪

具有单一根跨度的一组跨度。跟踪是通过收集共享traceId的所有跨度来构建的。然后,基于spanId和parentId将跨域安排在树中,从而提供请求在系统中所取路径的概述。

问题2:

就Zipkin UI显示2个同名跨度而言,服务依赖项页面只包含一个服务(见图)

同样,这也是预期的行为,因为您只获得了一个服务,并且您发出的外部请求会经过它。

更改跨度名称:

如果您是指第一个图像上的框架名称,则在顶部只显示您在前一个屏幕上单击的根范围。但是,您可以在对代码进行一些更改之后编写自定义跨度名称。

来自追踪文件 (与您的代码):

代码语言:javascript
复制
const options = {
  url: `${ZIPKIN_ENDPOINT}/api/v2/spans`,
  serviceName: 'MyApplication'
}
const tracer = tracing.start({samplingRate: 1}).tracer;
tracer.registerSpanEventListener(new zipkin.ZipkinTraceExporter(options));

现在您可以使用tracer.startRootSpan了,我在express示例中使用了它,并有一个请求:

代码语言:javascript
复制
tracer.startRootSpan({name: 'main'}, rootSpan => {
  rp('http://localhost:3000/sample').then(data => {
    res.send(data);
    rootSpan.end();
  }, err => {
    console.error(`${err.message}`);
    rootSpan.end();
  });
});

跨度必须关闭。

有关更多信息,请查看跟踪器的测试文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59444729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档