JetBrains Rider 2025.2 Help

OpenTelemetry 跟踪和指标

OpenTelemetry 是一组 API、SDK 和工具,旨在让您创建可以轻松导出跟踪、指标和日志的应用程序。 OpenTelemetry API 提供了一套 API,可用于分布式追踪和指标仪表化,自动收集数据并将其发送到您选择的后端。

JetBrains Rider 中实现的 OpenTelemetry 统计信息包括跟踪和指标。 Tracer 创建表示活动的 spans。 度量标准包括计数器和测量仪表。 如需更多信息,请参阅 OpenTelemetry 文档

您可以使用 idea.properties 文件启用 OpenTelemetry。

  1. 在 IDE 中,从主菜单中选择 帮助 | 编辑自定义属性

  2. 在打开的文件中,添加以下代码:

    idea.diagnostic.opentelemetry.otlp=true

作用域

Span 表示跟踪中的单个操作。 可以将 spans 发送到端点,并在 Jaeger UI 中进行可视化。 Jaeger 可以在 Docker 中启动。 您可以点击链接查看有关如何 配置 Jaeger UI的说明。

设置 Span

  1. 启动 Docker 容器并使用 Jaeger。

    请使用以下 binaries下载 Jaeger。

    要启动 Jaeger 容器,请在终端中运行以下代码:

    docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \ -e COLLECTOR_OTLP_ENABLED=true \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 4317:4317 \ -p 4318:4318 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 9411:9411 \ jaegertracing/all-in-one:1.38
  2. 请转到 localhost:16686 查看 Jaeger UI 中的跨度。

    可以通过以下属性定义 trace 端点:

    idea.diagnostic.opentelemetry.otlp

    如果该标志为 true,则其值被设置为默认值:http://127.0.0.1:4318/

OpenTelemetry Metrics

OpenTelemetry 指标存储在日志文件夹中。 要获取正确的位置,请参阅 文档

open-telemetry-metrics.csv

度量报告路径可以通过 idea.diagnostic.opentelemetry.metrics.file 定义。

open-telemetry-connection-metrics.gz

此文件在 JetBrains Rider 2023.2 版本开始提供。

open-telemetry-lux-metrics.gz

远程开发 OpenTelemetry 跨度和指标的标志

rdct.diagnostic.otlp

仅在后端启用此功能。

后端跨度积累在后端并发送到前端。 所有的 span,无论是 backend 的还是 frontend 的,都会从 frontend 发送到已定义的 endpoint。

rdct.connection.metrics.enabled

这应在双方启用。

自 JetBrains Rider 2023.2 版起可用。

lux.metrics.enabled

远程开发指标

这些指标每秒记录一次。

包括以下内容:

  • rdct.FramedByteChannel.sentFrames.projectName :通过 TLS 发送的帧数(在后台和前台)

  • rdct.CountingByteChannel.readBytesRate.projectName :通过 TLS 接收的字节数(在后端和前端)

  • rdct.CountingByteChannel.writeBytesRate.projectName :通过 TLS 发送的字节数(在后端和前端)

  • rdct.FramedByteChannel.receivedFrames.projectName :通过 TLS 接收的帧数(在后端和前端)

  • rdct.ThinClientRdPortServerSocketWrapper.sentBytes.projectName :从用户应用程序(如浏览器)通过端口转发通道在精简前端进程中发送的字节

  • rdct.ThinClientRdPortServerSocketWrapper.receivedBytes.projectName :从用户应用程序(如浏览器)通过端口转发通道在精简前端进程中接收的字节

FramedByteChannel 是前端和后端之间通过 TLS 的字节消息通道。 字节被汇集到帧中,并通过通道发送或接收。

  • rdct.FramedByteChannel.receivedFramesLenRate.projectName :通过 TLS 接收的帧的长度(在后端和前端均如此)

  • rdct.FramedByteChannel.sentFramesLenRate.projectName :通过 TLS 发送的帧的长度(在后端和前端)

  • rdct.TransportWrapperImpl.connectionState.projectName :连接状态的序号:0 →“NOT_CONNECTED”,1 →“CONNECTED”,2 →“CLOSED”,3 →“DECLINED”,4 →“FAULTED”(在后端和前端)

  • rdct.ThinClientDiagnosticsService.pingDirect :瘦客户端 ping 值(在前端)

  • rdct.ThinClientDiagnosticsService.pingUI :前端 UI 线程 ping 值(在前端)

ThinClientDiagnosticsService 是一个按项目收集前端与后端连接信息的前端诊断服务。 Ping 指标是由后台进程处理的协议请求。 pingDirect 在后台线程处理,pingUI 在事件调度线程 (EDT) 处理。 如果我们没有收到一个 ping,我们假设要么是网络有问题(可能是信道被一些数据堵塞了),要么是我们的进程被冻结了。 如果我们有 pingDirect ,但没有 pingUI ,那么我们假设用户界面在后端挂起。 在未迅速收到后端响应的情况下,会为 ping 属性设置一个 -1 值。 rdct.ThinClientDiagnosticsService.connectionState :前端连接状态的序号:0 -> WireNotConnected,1 -> NoPings,2 -> NoUiThreadPing,3 -> Connected(在前端)

报告连接问题

如果您遇到连接问题,请使用以下工作流程收集数据以进一步调查问题:

收集数据

  1. 在 IDE 中,从主菜单中选择 帮助 | 编辑自定义属性

  2. 请将以下属性添加到 idea.properties 文件中:

    rdct.connection.metrics.enabled

    您需要在后端和前端同时启用此属性。

    连接度量将以每秒一次的频率进行报告。

  3. 在连接问题复现后,收集将在 日志文件夹中生成的指标文件,包括前端和后端。 这些文件将会有 *.gz 分辨率且文件名格式如下:

    open-telemetry-connection-metrics.2023-03-29-15-48-40.gz
  4. 请创建一个包含所有日志文件夹中指标文件的压缩包,并将其附加到相应的 YouTrack project 中创建的问题中。

最后修改日期: 2025年 9月 26日