NewRelic .NET 代理如何在其核心工作?它是以某种方式附加到 CLR 的某种 IIS 模块或 NewRelic 代理吗?
例如,如果它通过 HttpClient 运行,它如何知道某个请求是外部的?
NewRelic .NET 代理如何在其核心工作?它是以某种方式附加到 CLR 的某种 IIS 模块或 NewRelic 代理吗?
例如,如果它通过 HttpClient 运行,它如何知道某个请求是外部的?
所有监控 .NET 的 APM 工具(领导者是 AppDynamics、New Relic 和 Dynatrace)基本上都做同样的事情。为了从 CLR 收集数据,他们使用分析 API https://msdn.microsoft.com/en-us/library/bb384493(v=vs.110).aspx,但诀窍是在最小化开销的同时做到这一点。您必须以智能方式进行检测,以避免导致性能问题。更高级的产品也会进行代码注入(例如,我们在 AppDynamics 这样做)这是一个示例应用程序,用于在运行时添加您自己的代码。https://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time
他们还将这一点与通过操作系统、.NET 运行时、IIS 等的 WMI 收集数据相结合。
您可以看到 APM 工具非常复杂,在生产中以低开销大规模执行此操作是一项挑战。哦,是的,记住你也不能破坏任何东西。这就是为什么要花费数年时间才能构建好的 APM 产品。如果您在 API 中有具体问题,我至少可以在 AppDynamics 解释更多我们是如何做到的 :)