OpenTelemetry 跟踪和指标
OpenTelemetry 是一组 API、SDK 和工具,旨在让您创建可以轻松导出跟踪、指标和日志的应用程序。 OpenTelemetry API 提供了一套 API,可用于分布式追踪和指标仪表化,自动收集数据并将其发送到您选择的后端。
PhpStorm 中实现的 OpenTelemetry 统计信息包括跟踪和指标。 Tracer 创建表示活动的 spans。 度量标准包括计数器和测量仪表。 如需更多信息,请参阅 OpenTelemetry 文档。
您可以使用 idea.properties 文件启用 OpenTelemetry。
在 IDE 中,从主菜单中选择 帮助 | 编辑自定义属性 。
在打开的文件中,添加以下代码:
idea.diagnostic.opentelemetry.otlp=true
范围
Span 表示跟踪中的单个操作。 可以将 spans 发送到端点,并在 Jaeger UI 中进行可视化。 Jaeger 可以在 Docker 中启动。 您可以点击链接查看有关如何 配置 Jaeger UI的说明。
设置 Span
启动 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请转到 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
此文件在 PhpStorm 2023.2 版本开始提供。
open-telemetry-lux-metrics.gz
远程开发 OpenTelemetry 跨度和指标的标志
rdct.diagnostic.otlp
仅在后端启用此功能。
后端跨度积累在后端并发送到前端。 所有的 span,无论是 backend 的还是 frontend 的,都会从 frontend 发送到已定义的 endpoint。
rdct.connection.metrics.enabled
这应在双方启用。
自 PhpStorm 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(在前端)
报告连接问题
如果您遇到连接问题,请使用以下工作流程收集数据以进一步调查问题:
收集数据
在 IDE 中,从主菜单中选择 帮助 | 编辑自定义属性 。
请将以下属性添加到
idea.properties文件中:rdct.connection.metrics.enabled您需要在后端和前端同时启用此属性。
连接度量将以每秒一次的频率进行报告。
在连接问题复现后,收集将在 日志文件夹中生成的指标文件,包括前端和后端。 这些文件将会有
*.gz分辨率且文件名格式如下:open-telemetry-connection-metrics.2023-03-29-15-48-40.gz请创建一个包含所有日志文件夹中指标文件的压缩包,并将其附加到相应的 YouTrack project 中创建的问题中。