本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

.NET 应用程序

自动仪器化

NET 的自动化工具可以自动捕获各种 库和框架 的跟踪和指标。

自动仪器化不需要对应用程序进行任何修改。要设置它,请按照以下步骤操作:

  1. 从 opentelemetry-dotnet-instrumentation 储存库的 发布 下载 glibcmusl 版本的工具库(musl 用于 Alpine,glibc 用于大多数其他 Docker 镜像)。解压文件并将其包含在您的应用程序 Docker 镜像中的一个目录中,这里我们使用 /autoinstrumentation

  2. 设置以下环境变量,这里我们通过 Kubernetes pod 规格中容器的 env 来设置:

    env:
    - name: CORECLR_ENABLE_PROFILING
      value: "1"
    - name: CORECLR_PROFILER
      value: "{918728DD-259F-4A6A-AC2B-B85E1B658318}"
    - name: CORECLR_PROFILER_PATH
      # for glibc:
      value: "/autoinstrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so"
      # For musl use instead:
      # value: "/autoinstrumentation/linux-musl-x64/OpenTelemetry.AutoInstrumentation.Native.so"
    - name: DOTNET_ADDITIONAL_DEPS
      value: "/autoinstrumentation/AdditionalDeps"
    - name: DOTNET_SHARED_STORE
      value: "/autoinstrumentation/store"
    - name: DOTNET_STARTUP_HOOKS
      value: "/autoinstrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll"
    - name: OTEL_DOTNET_AUTO_HOME
      value: "/autoinstrumentation"
  3. 还要在 pod 上添加额外的环境变量 以配置服务名称和导出器端点,支持的协议是 gRPC 和通过 HTTP 的 protobuf。

  4. 使用这些更改部署您的应用程序

  5. 通过在您的服务名称的指标/跟踪浏览器中搜索指标/跟踪,验证 SUSE Observability 是否正在接收跟踪和/或指标

有关更多详细信息,请参阅 Open Telemetry 文档

手动仪器化

当您需要从不支持自动仪器化的代码部分获取指标、跟踪或日志时,可以使用手动仪器化。例如不支持的库、自家代码或业务级指标。

要捕获这些数据,您需要修改您的应用程序。

  1. 将 Open Telemetry SDK 作为依赖项包含

  2. 在您的应用程序中添加代码,以在需要的地方捕获指标、跨度或日志

有关此内容的详细文档请参见 Open Telemetry .NET SDK 文档页面

确保使用 OTLP 导出器(这是默认设置)和 自动配置。在部署应用程序时,服务名称和导出器是 通过环境变量配置的

SUSE Observability 中的指标

对于某些 .NET 指标,例如垃圾收集器指标,SUSE Observability 已在相关组件上定义了图表。对于 Kubernetes,图表可在 Pod 上获得。可以 为更多指标添加图表,这适用于自动仪器化的指标,也适用于手动仪器化的应用程序特定指标。