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

如何通过OpenTelemetry .NET在Application Insights中注册自定义事件

解决方案:把OpenTelemetry遥测转成Application Insights自定义事件(.NET)

1. 自定义Span处理器修改跟踪/依赖为自定义事件

Azure Monitor Exporter默认会把OTel的Span映射成跟踪或依赖,你可以写一个自定义SpanProcessor,在Span结束时添加特定属性,让Exporter把它识别成自定义事件:

using OpenTelemetry;
using OpenTelemetry.Trace;

public class CustomEventSpanProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity activity)
    {
        // 标记该Span为自定义事件类型
        activity.SetTag("ai.type", "Event");
        // 设置自定义事件的名称(用Span的显示名或者自定义值都可以)
        activity.SetTag("ai.event.name", activity.DisplayName);
        // 可以额外添加自定义属性
        activity.SetTag("custom.property", "your-value");
        
        base.OnEnd(activity);
    }
}

然后在配置TracerProvider的时候加上这个处理器:

var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource("Your-SDK-Source-Name") // 替换成你SDK的Source名称
    .AddAzureMonitorTraceExporter(options =>
    {
        options.ConnectionString = "Your-App-Insights-Connection-String";
    })
    .AddProcessor(new CustomEventSpanProcessor())
    .Build();

2. 日志转自定义事件的处理

如果是OTel日志要转成自定义事件,同样用自定义LogProcessor来修改日志属性:

using OpenTelemetry;
using OpenTelemetry.Logs;

public class CustomEventLogProcessor : BaseProcessor<LogRecord>
{
    public override void OnEnd(LogRecord logRecord)
    {
        // 添加标识让Exporter转为自定义事件
        logRecord.Attributes.Add("ai.type", "Event");
        logRecord.Attributes.Add("ai.event.name", logRecord.CategoryName);
        // 把日志内容作为事件属性
        logRecord.Attributes.Add("log.message", logRecord.FormattedMessage);
        
        base.OnEnd(logRecord);
    }
}

配置LoggerProvider时引入这个处理器:

var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddOpenTelemetry(options =>
    {
        options.AddAzureMonitorLogExporter(exporterOptions =>
        {
            exporterOptions.ConnectionString = "Your-App-Insights-Connection-String";
        });
        options.AddProcessor(new CustomEventLogProcessor());
    });
});

3. 指标转自定义事件的折中方案

指标在App Insights里有专属的存储类型,如果非要转成自定义事件,可以把指标值打包成OTel事件的属性发送,这样既保持OTel中立性,又能在App Insights里显示为自定义事件:

// 封装一个工具方法,把指标数据转成OTel事件
public static void TrackMetricAsCustomEvent(string metricName, double metricValue, Dictionary<string, object>? customProps = null)
{
    using var activity = new Activity(metricName);
    activity.Start();
    
    activity.SetTag("ai.type", "Event");
    activity.SetTag("ai.event.name", $"Metric_{metricName}");
    activity.SetTag($"metric.value", metricValue);
    
    if (customProps != null)
    {
        foreach (var prop in customProps)
        {
            activity.SetTag(prop.Key, prop.Value);
        }
    }
    
    activity.Stop();
}

目前.NET的Azure Monitor Exporter没有类似Python的现成扩展,通过自定义处理器修改遥测属性是最直接的实现方式,这些属性会告诉Azure Monitor把数据解析成自定义事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:42:04