GoLand 2025.2 Help

OpenTelemetry 跟踪与指标

OpenTelemetry 是一组 API、SDK 和工具,旨在帮助您创建能够轻松导出跟踪、指标和日志的应用程序。OpenTelemetry API 提供了一套用于分布式跟踪和指标检测的统一 API,可自动收集数据并将其发送至您选择的后端。 OpenTelemetry API 提供了一套用于分布式跟踪和指标检测的统一 API,可自动收集数据并将其发送至您选择的后端。

GoLand 中实现的 OpenTelemetry 统计信息包含了跟踪与指标。 Tracer 创建用于表示操作的 Span。 指标包括计数器与仪表。 有关详细信息,请参阅 OpenTelemetry 文档

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

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

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

    idea.diagnostic.opentelemetry.otlp=true

Span

一个 Span 表示带有跟踪的单个操作。 Span 可被发送至终端并在 Jaeger UI 中可视化。 Jaeger 可在 Docker 中启动。 您可以点击链接查看有关 设置 Jaeger UI的说明。

设置 Span

  1. 启动包含 Jaeger 的 Docker 容器。

    使用以下 二进制文件下载 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 中查看 Span。

    跟踪终端可通过属性进行定义:

    idea.diagnostic.opentelemetry.otlp

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

OpenTelemetry 指标

OpenTelemetry 指标存储在 logs 文件夹中。 有关其准确位置,请参阅 文档

open-telemetry-metrics.csv

指标报告路径可通过 idea.diagnostic.opentelemetry.metrics.file 进行定义。

open-telemetry-connection-metrics.gz

此文件从 GoLand 版本 2023.2 开始提供。

open-telemetry-lux-metrics.gz

远程开发 OpenTelemetry Span 与指标的标志位

rdct.diagnostic.otlp

此功能仅在后端启用。

后端 Span 被在后端收集并发送至前端。 所有 Span(包括后端与前端)都由前端发送至定义的终端。

rdct.connection.metrics.enabled

此功能应在前后端同时启用。

此功能自 GoLand 版本 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 ,则我们假设 UI 在后端出现了卡死。 当无法快速收到来自后端的响应时,会为 ping 属性设置一个 -1 值。 rdct.ThinClientDiagnosticsService.connectionState :前端连接状态的序号:0 → WireNotConnected,1 → NoPings,2 → NoUiThreadPing,3 → Connected(在前端)

报告连接问题

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

收集数据

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

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

    rdct.connection.metrics.enabled

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

    连接指标将以一秒为周期进行报告。

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

    open-telemetry-connection-metrics.2023-03-29-15-48-40.gz
  4. 将 logs 文件夹中的所有指标文件打包为一个归档文件,并附加到相关 YouTrack 项目 中创建的问题上。

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