OpenTelemetry
OpenTelemetry 插件将运行时可观测性引入到您的开发工作流中。 它会收集、处理并显示日志、指标和跟踪信息,帮助您了解应用中的服务运行时行为及其之间的关系。
安装 OpenTelemetry 插件
此功能依赖于 OpenTelemetry 插件,您需要安装并启用它。 更多信息请参阅 从 Marketplace 安装插件。
按下 Ctrl+Alt+S 打开设置,然后选择 。
打开 Marketplace 选项卡,找到 OpenTelemetry 插件,然后点击 安装 (如提示请重启 IDE)。
插件安装完成后,会在 服务窗口 中添加 OpenTelemetry 服务。 默认情况下,服务会在您 运行项目 时开始收集数据(目前支持 .NET Project 和 .NET Launch Settings 配置)。

在大多数情况下,您需要在启动目标应用之前运行 OpenTelemetry 服务,因此该服务会在启动 Rider 时自动启动。 要修改此设置,请在 JetBrains Rider 设置 的 页面中取消选中 启动时启动 OpenTelemetry 主机 复选框 Ctrl+Alt+S。
要启动或停止服务,请在 服务 窗口中选择 OpenTelemetry 节点,然后使用工具栏中的相应按钮。

服务运行时,工具栏也会显示主机地址及其对应的环境变量。 您可以使用它们手动添加 gRPC OTLP 端点,以将本地在 IDE 外部启动的应用添加至分析中。
默认情况下,端口会随机分配,但您可以在 JetBrains Rider 设置 的 页面中通过 使用固定 OTLP 服务器端口 复选框进行更改 Ctrl+Alt+S。
对于从 IDE 启动的 .NET 应用,会自动设置 OTEL_EXPORTER_OTLP_ENDPOINT 环境变量。 这意味着,如果应用已配置 OpenTelemetry 并添加 OTLP 导出器,但未在代码中显式设置端点,则该应用将自动开始向 Rider OTLP 服务器发送数据。 要禁用环境变量的自动分配,请在 JetBrains Rider 设置 的 页面中取消选中 覆盖 OpenTelemetry 环境变量 复选框 Ctrl+Alt+S。
研究 OpenTelemetry 数据
OpenTelemetry 数据的基本单位是应用实例(在规范中称为 service instance)。 默认情况下,实例通过 GUID 进行标识,并按产生它们的应用进行分组。 日志 选项卡会显示详细信息,如时间戳、日志级别和日志消息。 您可以根据文本、级别或其他属性过滤日志,以便轻松聚焦于相关信息。

日志和指标存储在内存中,OTLP 服务器重启时将被清除。
您可以通过上下文菜单从树状视图中移除不需要的实例。
点击工具栏上的 导航至代码 ,可从日志条目跳转到对应的源代码位置。 请注意,这要求日志条目中包含 {OriginalFormat} 属性,且不支持跳转到第三方或反编译代码。
点击工具栏上的 在编辑器中打开 可将日志条目序列化为 JSON 并在编辑器中打开。 序列化条目将保存在 临时文件和控制台 节点中,并在 资源管理器工具窗口 中可用。
服务映射图
在分析多个应用和服务时,您可以基于 traces 创建架构图或服务映射图。 该映射图展示服务、端点、数据库和消息队列,帮助您了解系统中的交互模式和依赖关系。
请确保您的应用和服务生成分布式跟踪(例如通过 HTTP 请求),以便填充该服务映射图。
要查看服务映射图,请在 服务 窗口中选择 OpenTelemetry 节点,然后点击工具栏中的相应按钮:

自动检测
当您从 IDE 启动 ASP.NET Core 应用时,JetBrains Rider 可以在运行时注入所需的 OpenTelemetry 依赖,从而使应用自动开始发送 OpenTelemetry 数据。
默认情况下,自动检测处于禁用状态。 要启用此功能,请在 JetBrains Rider 设置 的 页面中选中 允许自动插桩 复选框 Ctrl+Alt+S。
自动检测旨在用于快速测试。 对于类生产环境设置,我们建议手动添加并配置 OpenTelemetry 依赖。 如果您的项目已包含 OpenTelemetry 包,将跳过自动检测。
手动检测示例
以下是一个将被自动检测的 ASP.NET Core 应用示例:
以下是配置了 OpenTelemetry 依赖的相同应用示例:
与本地 OpenTelemetry 提供程序集成
Rider 的 OpenTelemetry 卫星服务支持 OTLP gRPC collector/exporter API ,可帮助您与在 IDE 外部运行的本地 OpenTelemetry 提供程序进行集成。 这使得您能够将遥测数据(跟踪、日志、指标)直接发送至 Rider,或通过本地的 OpenTelemetry Collector 进行转发。
直接发送遥测数据
在 JetBrains Rider 设置 的 Ctrl+Alt+S 中的 页面,取消选中 覆盖 OpenTelemetry 环境变量 ,并配置 使用固定 OTLP 服务器端口 ,将 Rider OpenTelemetry 服务绑定到固定端口。
在您的应用中,将 OTLP 导出器配置为指向该卫星服务。 端点为
http://localhost:<port>,其中<port>是在插件设置中配置的。
如果需要将数据转发到多个目标(例如 Rider 和外部监控服务),请使用 OpenTelemetry Collector。
通过 OpenTelemetry Collector 发送遥测数据并集成
在 JetBrains Rider 设置 的 Ctrl+Alt+S 中的 页面,取消选中 覆盖 OpenTelemetry 环境变量 ,并配置 使用固定 OTLP 服务器端口 ,将 Rider OpenTelemetry 服务绑定到固定端口。
配置 OpenTelemetry Collector 接收来自应用程序 OTLP 导出器的遥测数据。
通过将其添加为导出器(例如
endpoint: "localhost:17011")将数据导出到 Rider OpenTelemetry Satellite 服务。添加 Rider OpenTelemetry Satellite 服务作为 collector。 例如:
otlp/satellite: endpoint: "localhost:17011" tls: insecure: true在 OpenTelemetry Collector 配置中引用适当的 pipeline(traces、metrics、logs),并在这些 pipeline 中包含 Rider OpenTelemetry Satellite 服务。 例如:
service: pipelines: traces: receivers: ... exporters: [otlp/satellite] metrics: receivers: ... exporters: [otlp/satellite] logs: receivers: ... exporters: [otlp/satellite]