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

Application Insights及实时指标流内部原理与OAuth请求异常排查

我来帮你详细解答这两个问题,都是Application Insights使用中常见的关键点:

1. Application Insights(包含实时指标流)的内部工作机制

Application Insights的整体工作流程可以拆分为四个核心环节,实时指标流在其中有专门的优化:

  • 数据收集层:通过对应语言的SDK(比如ASP.NET的Microsoft.ApplicationInsights.Web包)嵌入到你的应用中,SDK内置了多个自动捕获模块——比如请求跟踪模块会监听ASP.NET管道的请求开始/结束事件,异常模块捕获未处理的异常,还有依赖项模块跟踪数据库、API调用等。实时指标流的收集逻辑更轻量化,会优先捕获实时的请求、错误、性能数据,并且默认采样率更高(甚至全量)。
  • 数据传输层:常规遥测数据会先在本地缓存,达到批量阈值后通过HTTPS发送到Azure的Ingestion服务;而实时指标流采用WebSocket低延迟连接,数据几乎实时推送,不需要等待批量缓存,确保你能看到3-5秒内的最新应用状态。
  • 数据处理与存储层:Azure收到数据后,会对常规遥测做清洗、聚合、索引,最终存储到Log Analytics工作区,支持长期保留和复杂查询;实时指标流的数据则是临时存储,仅用于实时仪表盘展示,不会长期归档,所以没法在分析工具或搜索里查到历史的实时指标数据。
  • 展示层:Azure门户的Application Insights面板中,常规遥测用于趋势分析、历史故障回溯;实时指标流是专门的实时仪表盘,展示当前的请求率、错误率、响应时间,还有实时刷新的异常和请求详情。
2. OAuth2请求在实时指标流可见但分析/搜索中找不到的原因

结合你给出的OAuth2配置代码,这个问题主要和遥测捕获时机、过滤规则、采样策略这三个点有关:

  • 遥测捕获时机不匹配:你的HostAuthenticationFilter是在请求管道的早期执行的,如果OAuth验证失败,中间件可能直接返回了错误响应(比如401),而没有让请求到达Application Insights请求跟踪模块的完整捕获流程。实时指标流因为是更底层的监控(比如捕获HTTP层面的响应状态),所以能检测到这个错误,但常规请求遥测因为没走完完整的管道,所以没被记录。
  • 默认遥测过滤规则拦截:Application Insights SDK默认会过滤掉一些“非业务请求”,比如健康检查端点、静态资源请求,部分版本的SDK也可能会默认排除/oauth2/token这类认证端点。你可以检查TelemetryConfiguration中的TelemetryProcessor,看看是否有默认或自定义的过滤逻辑把这个URL的请求排除了。
  • 采样策略差异:实时指标流和常规遥测的采样配置是分开的。实时指标流默认采用高采样率(甚至100%),而常规遥测可能因为全局采样率设置过低(比如默认的10%),导致这个请求没被采样到,自然不会出现在分析工具和搜索结果中。

对应的解决建议:

  • 调整遥测过滤规则:添加自定义ITelemetryProcessor,明确允许/oauth2/token的请求被记录,示例代码如下:
    public class AllowOAuthTokenRequestsProcessor : ITelemetryProcessor
    {
        private readonly ITelemetryProcessor _next;
        public AllowOAuthTokenRequestsProcessor(ITelemetryProcessor next) => _next = next;
        public void Process(ITelemetry item)
        {
            if (item is RequestTelemetry request && request.Url.AbsolutePath.Contains("/oauth2/token"))
            {
                _next.Process(item);
                return;
            }
            _next.Process(item);
        }
    }
    
    然后在Startup.cs中注册这个处理器:
    TelemetryConfiguration.Active.TelemetryProcessorChainBuilder
        .Use((next) => new AllowOAuthTokenRequestsProcessor(next))
        .Build();
    
  • 调整采样配置:在ApplicationInsights.config中把SamplingPercentage设置为100(或者针对请求URL设置自定义采样规则),确保这类请求能被采样到。
  • 手动添加遥测:在OAuth中间件的错误处理逻辑中,手动调用TelemetryClient来记录请求和异常,比如:
    var telemetryClient = new TelemetryClient();
    telemetryClient.TrackRequest("/oauth2/token", DateTimeOffset.UtcNow, TimeSpan.Zero, "401", false);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:41:48