Blazor Server应用Semantic Kernel OTel指标无法上报至Application Insights排查
问题分析与解决方案
你的配置中追踪数据能正常上报至Application Insights,但Semantic Kernel指标缺失,核心原因是Azure Monitor OpenTelemetry集成默认可能未启用指标导出,或存在配置细节遗漏。以下是具体修复步骤:
1. 升级Azure Monitor OTel包版本
确保项目中Azure.Monitor.OpenTelemetry.AspNetCore包使用最新稳定版(至少1.2.0及以上),旧版本对Metrics的支持存在局限性。
2. 显式启用Azure Monitor指标导出
修改UseAzureMonitor配置,明确开启指标收集逻辑:
services.AddOpenTelemetry() .UseAzureMonitor(options => { options.ConnectionString = appInsightsConnectionString; // 显式启用指标导出 options.Metrics = new AzureMonitorMetricsOptions { Enable = true, // 可选:调整指标导出间隔,默认60秒 ExportIntervalMilliseconds = 60000 }; }) .WithTracing(builder => builder .AddSource(Telemetry.SourceName) .AddSource("Microsoft.SemanticKernel*") .SetResourceBuilder(Telemetry.ResourceBuilder) ) .WithMetrics(builder => builder .AddMeter("Microsoft.SemanticKernel*") .SetResourceBuilder(Telemetry.ResourceBuilder) // 可选:添加默认聚合配置,确保指标被正确收集 .SetDefaultAggregation<long>(MetricStreamConfiguration.Default.WithHistogramBoundaries(0, 10, 50, 100)));
3. 验证MeterProvider生命周期
在Blazor Server环境中,确保OpenTelemetry的MeterProvider通过依赖注入正确初始化,避免与手动创建的MeterProvider(如文档示例中的独立实例)产生冲突,统一使用DI方式配置的Provider。
4. 确认Semantic Kernel指标生成
调用GetStreamingChatMessageContentsAsync时,Semantic Kernel会生成semantic_kernel.total_tokens、semantic_kernel.prompt_tokens等指标。可通过本地调试验证Meter是否注册成功:
var meters = Meter.GetMeters().Where(m => m.Name.StartsWith("Microsoft.SemanticKernel")); // 确认meters集合不为空,说明Semantic Kernel的Meter已正确注册
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

