MoleculerJs 与 Jaeger 跟踪:如何在一个跟踪中跟踪后续动作调用新跨度

如何解决MoleculerJs 与 Jaeger 跟踪:如何在一个跟踪中跟踪后续动作调用新跨度

我想像 moleculer-jaeger package 中的示例一样显示我的所有跟踪:

What i would like to have

但我得到的是这样的:

What i get with my current config

您在这张图片中看到的所有跨度都应该在主跟踪(网关)内。

这是我的molecularr.config:

tracing: {
        enabled   : true,stackTrace: true,actions   : true,exporter  : {
            type   : 'Jaeger',options: {
                // HTTP Reporter endpoint. If set,HTTP Reporter will be used.
                endpoint: 'http://jaeger:14268/api/traces',// UDP Sender host option.
                host    : 'api.dev.host.com',// UDP Sender port option.
                port    : 6832,// Jaeger Sampler configuration.
                sampler : {
                    // Sampler type. More info: https://www.jaegertracing.io/docs/1.14/sampling/#client-sampling-configuration
                    type   : 'Const',// Sampler specific options.
                    options: {
                    }
                },// Additional options for `Jaeger.Tracer`
                tracerOptions: {},// Default tags. They will be added into all span tags.
                defaultTags  : {
                    appName: 'core',}
            }
        },tags: {
            action: {
                // Always add the response
                response: true,},

我的 jaeger-service 只是示例之一:

const JaegerService = require('moleculer-jaeger')

module.exports = {
    mixins  : [ JaegerService ],settings: {
        host   : 'jaeger-server',port   : 6832,sampler: {
            type   : 'Const',options: {
                decision: 1
            }
        }
    }
}

我尝试了几种不同的采样配置,但没有任何效果如我所愿。

这是一些代码,您可以在其中看到我执行的操作调用:

// serviceX endpoint:
resolveByName: {
    rest  : 'GET resolve/name/:name',params: {
        name: { type: 'string' }
    },handler(ctx) {
        return resolveByNameHandler(this.broker,ctx.params,'serviceY')
    }
},// handler code
// please do not focus on the code itself. What i wanted to show is how i call the other
// services. 
const { NotFoundError } = require(`${process.env.INIT_CWD}/util/error`)

module.exports = (broker,params,dataSource) =>  {
    const { name } = params
    const query = { name: name }
    
    const rejectRequest = (name,data) => Promise.reject(new NotFoundError(name,data))

    const getSourceData = result => broker.call(`${dataSource}.find`,{ query: { id: result[0].ownerId } })
        .then(sourceData => sourceData.length === 0
            ? rejectRequest(dataSource,sourceData)
            : mergeResult(sourceData,result))

    const mergeResult = (sourceData,result) => ({ ...sourceData[0],origin: { ...result[0],source: 'serviceX' } })

    return broker.call('serviceX.find',{ query: query })
        .then(result => result.length === 0 ? rejectRequest('serviceX',query): result)
        .then(result => result[0].ownerId ? getSourceData(result) : rejectRequest('noOwnerId',query))
}

我还尝试过不使用分子-jaeger 包,而是使用 jaeger 多合一 docker 映像。虽然结果相同...

# from the docker-compose.yml
  jaeger-server:
    image: jaegertracing/all-in-one:latest
    ports:
      - 5775:5775/udp
      - 6831:6831/udp
      - 6832:6832/udp
      - 5778:5778
      - 16686:16686
      - 14268:14268
      - 9411:9411
    networks:
      - internal

我不想做的是在每个服务中手动设置跨度。我已经尝试过了,但它根本不起作用,所以如果这是唯一的解决方案,我会很高兴看到一个例子。

提前致谢!

*编辑: 我使用的版本:

{
    "jaeger-client": "^3.18.1","moleculer": "^0.14.13","moleculer-db": "^0.8.12","moleculer-db-adapter-mongoose": "^0.8.9","moleculer-jaeger": "^0.2.3","moleculer-web": "^0.9.1","mongoose": "^5.12.5",}

解决方法

  1. 此版本已内置 jager 跟踪器,请参阅 documentation
  2. 为了嵌套事件,需要在动作内部传递上下文,使用 ctx.call 调用而不是 broker.call,因此它们将被嵌套。
  3. 要快速获得对分子的支持,请加入我们的 discord

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res