未直接引用Application Insights的库如何生成依赖日志?
运行时拦截与无侵入埋点
在.NET平台,Application Insights通过Microsoft.ApplicationInsights.DependencyCollector包,利用CLR的Profiler API等诊断机制,拦截常见依赖库的核心方法调用——比如SQL的SqlCommand.Execute*系列方法、HttpClient的SendAsync方法。Java平台则采用字节码增强技术,在应用启动阶段动态修改目标库的类字节码,插入日志收集逻辑。整个过程不需要目标库引用任何Application Insights相关SDK,完全无侵入。请求上下文的自动关联
当HTTP请求进入应用时,Application Insights会生成唯一的OperationId和ParentId,并将这些上下文信息存储在当前线程的本地存储中(比如.NET的AsyncLocal、Java的ThreadLocal)。当拦截到依赖调用时,收集器会自动从线程上下文提取这些关联ID,将依赖日志与发起它的HTTP请求绑定,实现完整的链路追踪。内置的依赖识别规则
Application Insights的依赖收集器内置了大量预定义规则,能够自动识别不同类型的依赖:比如通过连接字符串识别SQL数据库、通过URL识别HTTP请求,还会提取关键信息(如SQL语句摘要、Http状态码、调用耗时等),并归类为对应的依赖类型(SQL、Http等)展示在控制台中。这些规则覆盖了绝大多数常用的第三方库,无需额外配置即可生效。无需目标库适配的核心逻辑
所有收集逻辑都由Application Insights的依赖收集器独立完成,目标库不需要做任何代码修改或适配工作。收集器只关注方法调用的输入输出、执行状态等通用信息,不依赖目标库的内部实现细节,因此即使库未引用AI,也能被正常监控。
内容的提问来源于stack exchange,提问作者Liero

