OpenTelemetry 跟踪与指标
OpenTelemetry 是一组 API、SDK 和工具,旨在帮助您创建能够轻松导出跟踪、指标和日志的应用程序。OpenTelemetry API 提供了一套用于分布式跟踪和指标检测的统一 API,可自动收集数据并将其发送至您选择的后端。 OpenTelemetry API 提供了一套用于分布式跟踪和指标检测的统一 API,可自动收集数据并将其发送至您选择的后端。
GoLand 中实现的 OpenTelemetry 统计信息包含了跟踪与指标。 Tracer 创建用于表示操作的 Span。 指标包括计数器与仪表。 有关详细信息,请参阅 OpenTelemetry 文档。
您可以使用 idea.properties 文件启用 OpenTelemetry。
在 IDE 中,通过主菜单选择 帮助 | 编辑自定义属性 。
在打开的文件中,添加以下代码:
idea.diagnostic.opentelemetry.otlp=true
Span
一个 Span 表示带有跟踪的单个操作。 Span 可被发送至终端并在 Jaeger UI 中可视化。 Jaeger 可在 Docker 中启动。 您可以点击链接查看有关 设置 Jaeger UI的说明。
设置 Span
启动包含 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转到 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(在前端)
报告连接问题
如果您遇到连接问题,请按照以下工作流程收集数据以便进一步调查问题:
收集数据
在 IDE 的主菜单中,选择 帮助 | 编辑自定义属性 。
将以下属性添加到
idea.properties文件中:rdct.connection.metrics.enabled您需要在后端和前端都启用此属性。
连接指标将以一秒为周期进行报告。
在连接问题复现后,收集前端和后端 logs 文件夹 中生成的指标文件。 这些文件将具有
*.gz分辨率,文件名的格式如下:open-telemetry-connection-metrics.2023-03-29-15-48-40.gz将 logs 文件夹中的所有指标文件打包为一个归档文件,并附加到相关 YouTrack 项目 中创建的问题上。