如何在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
相关产品推荐
相关产品推荐

