问题标签 [opentracing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
436 浏览

spring - 使用 Google Cloud Sleuth 2 进行跨度自定义

有没有办法为 spring cloud sleuth 2 自定义 Span 注入和提取器?在 1.2 版的文档中,我发现了一种在新版本(2)上不可用的方法。我想是因为现在它使用 Zipkin 勇敢地照顾了 Span,对吧? https://cloud.spring.io/spring-cloud-sleuth/1.2.x/multi/multi__customizations.html#_example

我试图回到使用稳定版本(1.3.3)的spring cloud sleuth,但是当我将bom用于项目时,它在我正在使用的spring boot版本(2.0)中产生冲突。它与 spring boot 版本 2 兼容吗?

我正在使用 spring cloud sleuth 来跟踪我公司的服务,但是我有一个跟踪其他服务的版本,它不能与 opentracing 标头压缩,所以我想更改 http 消息的标头以创建新服务具有我在其他组件中的当前跟踪标头的可压缩文件。

谢谢

0 投票
1 回答
575 浏览

spring - 使用 Jaeger 跟踪检测在 Docker 容器中执行的 Spring-Boot 应用程序

我在 docker 容器内运行 Spring-Boot 应用程序,并希望使用 Uber 的 Jaeger 客户端通过 OpenTracing 对其进行检测。

对于仪器,我将OpenTracing Spring Web库与Jaeger客户端结合使用。

以下代码片段在应用程序中配置跟踪器:

当我运行应用程序(不在 Docker 容器内)并使用以下命令启动 Jaeger 时,我可以看到这些痕迹:

但是,当我使用以下 docker-compose 文件将 Spring-Boot 应用程序包装在 Docker 容器中并再次启动 Jaeger 客户端时,我看不到任何痕迹。

之后,我尝试在同一个 docker-compose 文件中声明 Jaeger docker 容器,并添加了从demo服务到jaeger服务的链接:

但是我仍然在 Jaeger 客户端中看不到任何痕迹。

几个小时以来,我尝试了不同的方法,但到目前为止没有取得任何进展,如果有人可以帮助我,我将不胜感激!

你可以在GitHub 上找到我的演示项目。

0 投票
2 回答
6058 浏览

java - 使用 Jaeger 进行跟踪不适用于 docker-compose

我使用 Jaeger 检测了一个简单的 Spring-Boot 应用程序,但是当我使用 docker-compose 在 Docker 容器中运行该应用程序时,我在 Jaeger 前端看不到任何痕迹。

我通过从我在 docker-compose 文件中设置的环境变量中读取属性来创建跟踪器配置。

这就是我创建跟踪器的方式:

这是我的 docker-compose 文件:

你也可以在GitHub 上找到我的项目。

我究竟做错了什么?

0 投票
1 回答
659 浏览

logging - 链接 log4j 日志和 zipkin 跟踪 id

我有一个系统,我们有 2 个模块。

1) 模块 1 是一个具有多个端点的 webapp,部署在 Tomcat 上。2) 模块 2 是一个可执行的 jar,(不是 web 应用程序),它启动了 2 个 Kafka 消费者(K1 和 K2),分别监听 topic1 和 topic2。

Web 应用程序(模块 1)将消息推送到 topic1。K1 监听topic1。它接收消息,处理它们并将处理后的消息推送到topic2。K2 监听 topic2。消息由 K2 完全处理,不会进一步传播。

此流程中有多个可能发生错误的点。我想使用 Zipkin/ Jaegar 来跟踪整个流程,并将日志链接到 trace id,以便可以轻松快速地调查任何问题。

谁能建议我前进的道路?

0 投票
4 回答
12618 浏览

spring-boot - 如何使用 Spring Boot 的应用程序日志(由 slf4j 生成)丰富 Jaeger opentracing 数据?

有一个使用 SLF4J 记录器的现有 Spring Boot 应用程序。我决定opentracing使用 Jaeger 作为跟踪器,通过标准 API 添加对分布式跟踪的支持。初始设置如此简单真是令人惊讶 - 所需要的只是将两个依赖项添加到pom.xml

并为Tracerbean 提供配置:

所有的工作都像一个魅力 - 应用程序请求由 Jaeger 处理并创建跨度:

在此处输入图像描述

但是,在跨度Logs中,只有preHandle&afterCompletion事件包含有关在请求执行期间调用的类/方法的信息(不slf4j收集记录器生成的日志):

在此处输入图像描述

问题是是否可以将 Tracer 配置为拾取应用程序记录器(slf4j在我的情况下)生成的日志,以便通过://etc. 完成的所有应用程序日志LOG.infoLOG.warnLOG.error反映在 Jaeger 中

注意:我已经想出了如何通过API手动记录跨度,例如:opentracing

并使用标签对过滤器中的异常处理进行一些手动操作,例如ERROR

但是,我仍然想知道是否可以配置跟踪器来获取应用程序日志automatically

  • LOG.info-> 跟踪器将新日志添加到活动跨度
  • LOG.error-> 跟踪器将新日志添加到活动跨度并添加ERROR标签

更新:我能够通过为记录器添加包装器来将应用程序日志添加到跟踪器,例如

但是,到目前为止,我还没有找到默认情况下允许将应用程序日志自动添加到跟踪器的 opentracing 配置选项。基本上,如果需要,似乎预计开发人员会以编程方式将额外的日志添加到跟踪器。另外,在调查了更多跟踪之后,它似乎是正常的logging并且tracing是单独处理的,并且将所有应用程序日志添加到跟踪器不是一个好主意(跟踪器应该主要包括示例数据和用于请求识别的标签)

0 投票
1 回答
741 浏览

docker - 停止 jaeger 收集器是否会停止 OpenTracing

当我启用 OpenTracing 并启动它们时,我有一些运行 jaeger-client 的应用程序。

首先我使用命令启动 Jaeger 收集器 - docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 - p 14268:14268 -p 9411:9411 jaegertracing/all-in-one: 最新

然后我启动像 user-start.sh user -apiserver=localhost:9900 -configfile=conf/configuration.json -traceroption enabled=true 这样的应用程序,然后它们作为启用的服务可见http://localhost:16686/api/services

问题是,如果我杀死运行 jaeger 收集器的 Docker-systemctl stop docker,然后重新启动 docker 和 jaegertracing/all-in-one,则服务不再位于http://localhost:16686/api/services

在没有 Jaeger 收集器的情况下,jaeger 客户端会自行死亡吗?Jaeger 收集器是否需要在启动 Jaeger 客户端之前运行?如果是这样,我如何刷新 Jaeger OpenTracing 使用的内存,以免我的主机内存不足?

我在https://github.com/jaegertracing/jaeger/blob/master/cmd/query/app/handler.go的 RegisterRoutes 方法中找不到任何明确的 API

0 投票
0 回答
470 浏览

python - OpenTracing Python 请求:传播跨度

我有一个Flask使用该requests库的 Python 应用程序。我正在尝试在应用程序中实现 OpenTracing。一个简化的版本是:

由于给予 ,所有端点都被trace_all_requests跟踪FlaskTracer。由于from ,对库发出的所有请求都进行了requests跟踪。install_all_patches()opentracing_instrumentation

我的'/foo'端点向'/bar'. 当我访问'/foo'端点并查看跟踪时,我可以看到两个单独的跟踪:一个只包含'/foo',第二个包含requestsGET 和对 的调用'/bar'。我本来希望跨度在整个过程中传播,因此我应该看到一个带有'/foo'-> GET->的跟踪'/bar'

我是否需要手动设置每个我的标题requests以通过跨度?看起来这正是requests猴子补丁应该做的......

0 投票
1 回答
2339 浏览

rabbitmq - 如何将开放跟踪跨度注入 RabbitMQ?

我正在使用 OpenTracing,我正在尝试通过 RabbitMQ 传播跨度。但是我不明白我应该如何注入跨度以及以后如何提取它。

这是发送消息的代码

我有一个用于接收消息的回调函数

所以在某个地方,我想以某种方式注入跨度,然后提取它。有谁知道或有任何关于如何做到这一点的例子?

我曾尝试在像这样在发件人中调用 basic_publish 之前注入

但我不知道注入方法将使用哪些参数。

然后我尝试在回调中像这样提取它

同样,我不知道提取方法中有哪些参数。

编辑:解决了,有点

我通过将运营商发送到属性标题来解决它。然后我可以从回调属性属性中提取跨度

在发件人中:

在回调中,提取跨度:

0 投票
1 回答
1281 浏览

opentracing - 如何将 Opentracing 应用程序连接到远程 Jaeger 收集器

我正在使用 Jaeger UI 来显示来自我的应用程序的跟踪。如果两个应用程序和 Jaeger 都在同一台服务器上运行,这对我来说很好。但我需要在不同的服务器上运行我的 Jaeger 收集器。我尝试使用 JAEGER_ENDPOINT、JAEGER_AGENT_HOST 和 JAEGER_AGENT_PORT,但失败了。

我不知道,我对这些变量的值设置是否错误。是否需要在应用程序代码中进行任何配置设置?

您能为我提供有关此问题的任何文档吗?

0 投票
5 回答
10809 浏览

docker - 如何使用 elasticsearch 配置 Jaeger?

我已经尝试执行这个 docker 命令来使用 elasticsearch 设置 Jaeger Agent 和 jaeger collector。

但是这个命令给出了以下错误。如何使用 ElasticSearch 配置 Jaeger?