问题标签 [open-telemetry]
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.
node.js - 可以在同一个节点程序中打开 Telemetry Instrument 两个 Express 服务吗?
假设我有一个 NodeJS 程序,它运行着两个独立的快速服务器实例。
我已经能够通过open telemetry对这样的程序进行检测,并将我的 span 成功发送/导出到 Zipkin。我需要做的就是/是在我的程序开头添加如下代码。
并确保已安装 express 和 http 插件
这一切都很好——除了一件事。Open Telemetry 看到我的两个快递服务都作为同一个service-main
服务运行。
当我直接使用 Zipkin检测这些服务时——我会将 Zipkin 中间件添加到每个正在运行的快速服务器中
每个跟踪器都可以使用自己的服务名称进行实例化,这允许每个服务都有自己的名称并在 Zipkin 中显示为不同的服务。
( /main
, /hello
, 和/goobye
都是通过上述 URL 中的不同快递服务提供的服务)
使用 Open Telemetry 可以实现这种事情(在一个程序中检测两个服务)吗?或者我是否需要将这两个服务分成单独的程序,以便让每个服务都有一个单独的名称?这个问题不是关于解决特定问题,而是更多关于理解 Open Telemetry 的语义。
javascript - 使用 nodejs 的 Opentelemetry
我想将开放遥测集成到我的 node.js 中,我对这个项目有一些疑问。
我对指标和跟踪特别感兴趣 进行开放遥测还是仅仅获得 Prometheus 导出器和 Zipkin/jaeger 是否值得?
另外,我对 js 开放遥测中的指标有点困惑。没有我可以使用的默认基本指标吗?
micrometer - 千分尺在哪里适合 OpenTelemetry 项目
随着 OpenTelemetry 试图成为应用程序/服务可观察性的事实上的标准,Micrometer 适合在哪里?Micrometer 网站声称它是用于度量的 SLF4J,但它与 OpenTelemetry 的 Metrics API 不矛盾吗?我想知道 OpenTelemetry 的 Metric API 是否应该代表 SLF4J,而 Micrometer 是否应该代表像 Log4J 这样的实现。
感谢有人可以帮助我澄清这一点。
java - 跨度未使用 OpenTelemetry Java 导出到 Jaeger 收集器
我已配置JaegerGrpcSpanExporter
,以便它可以将创建的 span 导出到 Jaeger-Collector。
我不想将跨度导出到 Jaeger-Agent。我已经写下了下面的代码。
当我将端口更改为 14250 时,即 Jaeger-agent 端口跨度被导出到 UI 但使用 14268 我无法在 Jaeger UI 上找到任何跟踪。
我需要更改上面的代码吗?
spring - 使用 Jaeger 等 Opentracing 工具
我开始了解 opentracing,甚至正在与 Jaeger 和 Spring 合作开发 POC。我们在生产中拥有大约 25 多个微服务。我已经阅读过它,但对于如何真正使用它有点困惑。
我正在考虑将其用作故障排除工具来确定应用程序故障的根本原因。为此,我们可以在 JaegerUI 中搜索 httpStatus 代码、自定义标签、traceIds 和应用程序日志。此外,我们可以通过监控跟踪找到瓶颈/缓慢的区域。
其他用途是什么?
Jaeger 有一个请求采样器,我认为我们不应该对 Prod 中的每个请求进行采样,因为它可能会产生不利影响。这是真的?
如果是,那么为什么会对应用程序产生什么影响?我想在这种情况下它不能真正用于故障排除,因为我们不会有每个请求的数据。
建议对 Prod 使用什么采样配置?
此外,像 Jaeger 这样的工具与 APM 工具有何不同,它适用于何处?我的意思是你也可以用 APM 工具做类似的事情。例如,可以钻取服务的事务并跳转到 AppDynamics 中对其他服务的相应请求。可以对缓慢的交易发出警报。还可以捕获请求标头/正文,以便对其进行搜索等。
java - 将多个 JaegerGrpcSpanExporter 配置为 spring boot 应用程序
我尝试JaegerGrpcExpanExporter
在我的应用程序中配置多个(在 Open-Telemetry 框架中提供)以实现以下用例:
JaegerGrpcExpanExporter
服务名称为“controller”,
JaegerGrpcExpanExporter
服务名称为“service” JaegerGrpcExpanExporter
,服务名称为“util”,并将它们注册到OpenTelemetrySdk
.
类型为“controller”的 span 应导出到配置有“controller”服务名称的导出器,而不是其他人,util 和 service 应遵循类似的过程。
但它的行为并不像预期的那样,即带有“控制器”、“服务”和“实用程序”的跨度已被导出到所有JaegerGrpcExpanExporter
并行注册的对象。
下面是我的配置,你有什么建议可以实现。
spring-boot - Spans 没有与 Spring Integration 和 Jaeger 建立联系
我有 2 个服务 A 和 B。我正在使用 Spring 与 Spring Boot 2.1.4 的集成从 A 调用 B 中的端点。
在服务 A 日志中:
在服务 B 日志中:
显然,traceId 在服务 B 中是不同的。
我认为正因为如此,我没有在 JaegerUi 的服务 A 跨度下看到服务 B 跨度。
知道我做错了什么吗?
java - 用于 Java 低延迟应用程序的 Jaeger 集成
我遇到的大多数集成使用 java-agent 将跟踪推送到中央收集器,然后可以在 Jaeger 中查看跟踪。但是在我的情况下,我不能使用 java 代理,因此我决定使用自定义跟踪 api,这似乎很好,并且有很多例子。
通过设计,我的低延迟应用程序限制我与外部组件/端口建立任何连接,因此我也试图避免将跟踪/跨度推送到本地 Jaeger 代理或收集器端点,而是通过 LogReporter 记录跟踪。
除此之外,我想知道如何构建将跟踪日志推送到 Jaeger 的管道。日志本身作为流在 AWS cloudwatch 中,所以我想如果我使用无服务 Lambda 订阅和解析这些跟踪日志事件,那么我可以自己将它们发送到 Jaeger,使用可能是 HTTP /api/traces 端点(细节不多,但在某处读到它以某种形式存在)。
在这一点上,我的问题是这是正确的方法还是有更好的机制来实现这一点。因为我不知道痕迹本身是否可以以这种方式重播给收集器。也不确定端点接受什么格式,因为我没有看到太多关于此的文档或示例。
目标是让我的应用程序“不”通过推送事件连接到任何外部监控基础设施,所以如果有更好的 Jaeger 集成方法,我很想听听。如果 OpenTracing、OpenCensus 甚至最新的 OpenTelemetry 形式的任何其他 API 可以帮助解决这个问题,我也可以。
谢谢
javascript - 如何通过前端应用程序中的 OpenTelemetry 向 Jaeger 发送跟踪数据?
背景
我正在尝试在前端应用程序中进行跟踪。
我无法使用@opentelemetry/exporter-jaeger,因为我相信它仅适用于 Node.js 后端应用程序。
所以我正在尝试使用@opentelemetry/exporter-collector。
1.在浏览器控制台打印成功
首先,我尝试在浏览器控制台中打印跟踪数据。下面的代码成功打印了跟踪数据。
2. 转发到 Jaeger 失败
现在我想将它们转发给 Jaeger。
我正在运行Jaeger 一体机
根据Jaeger 端口文档,我也许可以使用这两个端口(如果其他端口也可以,那也很棒!):
然后我进一步找到了关于这个端口的更多信息:
Zipkin 格式(稳定)
Jaeger Collector 还可以接受多种 Zipkin 数据格式的 span,即 JSON v1/v2 和 Thrift。收集器需要配置为启用 Zipkin HTTP 服务器,例如在 Zipkin 收集器使用的端口 9411 上。服务器启用两个期望 POST 请求的端点:
我将代码更新为
但是,我收到了对 v1 和 v2 端点的错误请求,但没有返回任何响应正文
POST http://localhost:9411/api/v1/spans 400(错误请求)
POST http://localhost:9411/api/v2/spans 400(错误请求)
知道如何使请求格式正确吗?谢谢
更新(2020 年 8 月 19 日)
我认为 Andrew 是对的,我应该使用 OpenTelemetry 收集器。我还从 Gitter 的 Valentin Marchaud 和 Deniz Gurkaynak 那里得到了一些帮助。只需在此处为遇到相同问题的其他人添加链接: https ://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a
我的最终工作解决方案发布在https://stackoverflow.com/a/63489195/2000548
javascript - 如何在客户端和服务器中正确使用 OpenTelemetry 导出器和 OpenTelemetry 收集器?
我正在尝试使 OpenTelemetry 导出器与 OpenTelemetry 收集器一起使用。
我找到了这个OpenTelemetry 收集器演示。
所以我复制了这四个配置文件
- docker-compose.yml (在我的应用程序中,我删除了当前运行有问题的生成器部分和普罗米修斯)
- otel-agent-config.yaml
- otel-collector-config.yaml
- .env
到我的应用程序。
同样基于 open-telemetry/opentelemetry-js repo 中的这两个演示:
我想出了我的版本(抱歉有点长,由于缺少文档,很难设置最低工作版本):
.env
码头工人-compose.yml
otel-agent-config.yaml
otel-collector-config.yaml
运行后docker-compose up -d
,我可以打开 Jaeger (http://localhost:16686) 和 Zipkin UI (http://localhost:9411)。
我ConsoleSpanExporter
在 Web 客户端和 Express.js 服务器中都工作。
但是,我在客户端和服务器中都尝试了这个 OpenTelemetry 导出器代码,我仍然无法连接 OpenTelemetry 收集器。
请参阅我对代码中 URL 的评论
任何的想法?谢谢