NewRelic .NET代理如何在其核心中运行?是某种IIS模块或NewRelic代理以某种方式附加到CLR?
E.g。如果它通过HttpClient运行,它如何知道某些请求是外部的?
答案 0 :(得分:1)
所有监控.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上解释我们如何做到这一点:)