
如何快速给传统 ASP.NET 应用加上监控ApplicationInsights-dotnet 的 HttpModule 与 ActivityProcessor 完整指南【免费下载链接】ApplicationInsights-dotnetApplicationInsights-dotnet项目地址: https://gitcode.com/gh_mirrors/ap/ApplicationInsights-dotnet如果你还在维护一套传统 ASP.NET.NET Framework应用却想要请求追踪、异常监控和实时指标那么 ApplicationInsights-dotnet 里的 Web SDK 就是答案。本指南面向新手讲解Microsoft.ApplicationInsights.Web包如何通过HttpModule 自动采集与内置 ActivityProcessor两项核心机制让应用零侵入接入 Azure Monitor / Application Insights 监控。一、3 步完成传统 ASP.NET 接入接入过程非常轻量核心只有三步第 1 步安装 NuGet 包在包管理控制台执行Install-Package Microsoft.ApplicationInsights.Web安装程序会自动完成三件事生成ApplicationInsights.config配置文件把ApplicationInsightsHttpModule写入Web.config安装逻辑见 web.config.install.xdt添加程序集引用并更新packages.config第 2 步填写连接字符串编辑ApplicationInsights.config把占位符替换为你的连接字符串完整示例见 applicationinsights.config.sampleApplicationInsights xmlnshttp://schemas.microsoft.com/ApplicationInsights/2013/Settings ConnectionStringInstrumentationKey你的KEY;IngestionEndpointhttps://你的采集端点//ConnectionString /ApplicationInsights也支持通过环境变量APPLICATIONINSIGHTS_CONNECTION_STRING提供。第 3 步运行并验证以 F5 启动应用随便访问几个页面然后到 Azure 门户的 Application Insights → Live Metrics实时指标和 Transaction Search事务查询中确认请求与依赖数据已上报。想直接看效果仓库内置了传统 ASP.NET 示例项目 examples/ClassicAspNetWebApp其 applicationinsights.config 和 Web.config 就是真实可用的配置参考。二、HttpModule 是如何工作的两层初始化自动采集的入口是ApplicationInsightsHttpModule源码ApplicationInsightsHttpModule.cs。它利用 ASP.NET 的生命周期分两层完成初始化层级组件时机职责应用启动前WebApplicationInsightsInitializer.csApplication_Start之前通过PreApplicationStartMethod特性触发读取ApplicationInsights.config构建全局唯一的TelemetryConfiguration单例模块初始化ApplicationInsightsHttpModule.cs应用启动订阅BeginRequest事件懒加载创建TelemetryClient两个设计细节值得新手了解幂等初始化Initialize()内部有isInitialized标记和双重检查锁重复调用安全无副作用模块的Init()还会防御性地再调用一次即使模块加载较晚也能保证配置就绪。无 DI 也能用 OpenTelemetry3.x 版本底层已迁移到 OpenTelemetry。由于传统 ASP.NET 没有依赖注入容器SDK 直接通过builder的 APIUseApplicationInsightsAspNetTelemetry()来配置遥测管道你不需要理解 DI 也能受益。自动采集的数据包括所有入站 HTTP 请求路径、状态码、耗时、SQL/HTTP 出站依赖调用、未处理异常、性能计数器CPU、内存、请求速率以及实时指标流。三、内置 ActivityProcessor6 个上下文补充器逐个看HTTP 请求本身只是一个骨架。为了让遥测数据真正可用能区分用户、会话、来源SDK 内置了 6 个 ActivityProcessor在 Activity 结束时OnEnd从 Cookie 和请求头中提取信息写入标准语义约定标签Processor数据来源写入内容SessionActivityProcessor.csai_sessionCookiesession.id、session.isFirst是否首次会话UserActivityProcessor.csai_userCookie匿名用户 IDClientIpHeaderActivityProcessor.csX-Forwarded-For请求头客户端 IP可配置多个请求头名称AuthenticatedUserIdActivityProcessor.csai_authUserCookie已认证用户 IDAccountIdActivityProcessor.csai_authUserCookie用户账户 IDSyntheticUserAgentActivityProcessor.csUser-Agent 字符串识别爬虫/监控机器人等合成流量内置search|spider|crawl|Bot|...过滤规则WebTestActivityProcessor.csSyntheticTest-RunId等请求头标记来自可用性监控的测试请求 小例子SessionActivityProcessor会把ai_sessionCookie 值按|拆开第一段作为会话 ID如果获取日期与续期日期相同还会打上session.isFirsttrue标签方便你分析新用户行为。这些处理器对应用代码完全透明——你在 Portal 里看到的用户数、会话数、合成流量过滤背后就是它们在起作用。四、applicationinsights.config 常用配置速查配置文件采用注释即文档的设计取消注释即可启用参考 applicationinsights.config.sample!-- 采样率0.0 ~ 1.01.0 表示全量上报 -- SamplingRatio1.0/SamplingRatio !-- 日志速率限制每秒条数默认 5.0 -- TracesPerSecond5.0/TracesPerSecond !-- 关闭请求追踪或依赖追踪 -- EnableRequestTrackingTelemetryModuletrue/EnableRequestTrackingTelemetryModule EnableDependencyTrackingTelemetryModuletrue/EnableDependencyTrackingTelemetryModule关闭某个模块时初始化器会自动注册一个ActivityFilterProcessor来过滤对应类型的 Activity见 WebApplicationInsightsInitializer.cs 中的ConfigureOpenTelemetryWithOptions方法。其余开关DisableTelemetry全局关停、StorageDirectory离线存储目录、EnableQuickPulseMetricStream实时指标、EnablePerformanceCounterCollectionModule性能计数器等按需取消注释即可。五、常见进阶操作在Global.asax.cs中手动补充配置或注册自定义 Processorprotected void Application_Start() { var config TelemetryConfiguration.CreateDefault(); config.ConfigureOpenTelemetryBuilder(otel otel.WithTracing(t t.AddProcessorMyCustomProcessor())); // ...路由注册等原有代码 }手动发送自定义遥测事件、指标var client new TelemetryClient(TelemetryConfiguration.CreateDefault()); client.TrackEvent(OrderCreated);使用 AAD 认证替代连接字符串安装Azure.Identity包后调用telemetryConfig.SetAzureTokenCredential(new DefaultAzureCredential())。⚠️ 排错提示如果日志里出现NoConnectionStringFoundInConfig说明连接字符串未配置出现TelemetryConfiguration was already built则说明你的代码在初始化器之前就手动构建了配置单例——此时配置文件选项会被跳过建议在Application_Start中手动设置。六、源码导航从哪里开始读起Web SDK 主目录WEB/Src/Web/Web/6 个 ActivityProcessor 都在这里请求常量定义Cookie 名、请求头长度上限RequestTrackingConstants.cs配置读取器ApplicationInsightsConfigurationReader.csNuGet 安装时自动改写的 XDT 转换脚本WEB/Src/Web/Web/net462/官方概念文档docs/concepts.md大版本变更说明BreakingChanges.md新手友好的一页式传统 ASP.NET 接入参考skills/applicationinsights-setup/references/aspnet-classic-greenfield.md总结HttpModule 负责接进来ActivityProcessor 负责补全上下文配置文件负责按需开关——三者配合让传统 ASP.NET 应用只需一个 NuGet 包就能获得现代可观测性能力。【免费下载链接】ApplicationInsights-dotnetApplicationInsights-dotnet项目地址: https://gitcode.com/gh_mirrors/ap/ApplicationInsights-dotnet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考