You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core的OpenTelemetry自动插桩中包含日志属性

解决方案:自动注入OpenTelemetry时开启日志Scope属性传递

针对使用OpenTelemetry自动注入(AutoInstrumentation)的ASP.NET Core Web API,要让日志Scope中的自定义属性(比如username)传递到OT Collector,无需修改代码,只需通过环境变量或OpenTelemetry配置文件开启对应配置项即可,具体步骤如下:

1. 通过环境变量配置

自动注入模式下,所有OpenTelemetry配置都可通过环境变量控制,开启日志Scope和格式化消息的关键变量是:

  • OTEL_DOTNET_LOGS_INCLUDE_SCOPES=true:开启日志Scope属性的采集
  • OTEL_DOTNET_LOGS_INCLUDE_FORMATTED_MESSAGE=true:确保格式化后的日志消息被采集(可选,但建议开启以匹配本地测试行为)

在K8s的Deployment配置中,给Pod添加这两个环境变量即可:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-api-deployment
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: your-api-container
        image: your-api-image:latest
        env:
        - name: OTEL_DOTNET_LOGS_INCLUDE_SCOPES
          value: "true"
        - name: OTEL_DOTNET_LOGS_INCLUDE_FORMATTED_MESSAGE
          value: "true"
        # 其他OTel配置(如OTEL_EXPORTER_OTLP_ENDPOINT等)

2. 通过OpenTelemetry配置文件(可选)

如果偏好使用配置文件而非环境变量,可以创建一个otel-config.yaml文件,内容如下:

logs:
  processors:
    batch:
  exporters:
    otlp:
      endpoint: "your-ot-collector-endpoint:4317"
  include_scopes: true
  include_formatted_message: true

然后将该配置文件挂载到K8s Pod中,并设置环境变量OTEL_CONFIG_FILE=/path/to/otel-config.yaml指定配置文件路径。

3. 验证配置生效

部署更新后的Pod后,发起请求触发中间件的Scope日志,检查OT Collector接收的日志数据,确认username属性已包含在日志的attributes字段中。

额外注意事项

  • 确保使用的OpenTelemetry自动注入版本与ASP.NET Core版本兼容,建议使用最新稳定版
  • 自定义Scope中的键名(如username)避免使用OTel预留属性名,防止冲突
  • 如果日志仍未关联到Trace上下文,需确认OTEL_DOTNET_TRACES_ENABLED=true(默认开启),确保TraceId/SpanId与日志属性一起传递

内容的提问来源于stack exchange,提问作者Scott Baxter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:02:50