听云算是较早推出.Net Core应用性能监控的(2017年11月推出),和听云其他语言的监控工具一样,也是无需开发人员介入即可实现在无需修改代码、无需重新编译应用,就能深入代码级别的应用监控。工具虽好,但也满满的是坑呀,特别是按照听云的使用说明进行基于IIS+.Net Core的应用部署配置,发现问题还不少。

        在这里我们只讨论IIS发布部署的方式(Windows环境),因为就这种方式说明书上是写得最模棱两可的。

1.下载tingyun-agent-netcore-1.1.0.exe(更正说明:这个版本不支持Core 2.0,需用最新版本的探针

2. 安装,并配置license key

3. 更改dotnet应用启动脚本,增加一行 【call 安装路径\tingyun-enable.bat】 如下所示:

call 安装路径\tingyun-enable.bat
dotnet c:\interpub\myapp\myapp.dll

myapp.dll可以通过应用程序安装路径的配置文件web.config中看到:

        按理以上的说明已经非常清楚了,但是问题就出在这,首先IIS部署模式下,一般不会有dotnet启动脚本,要求在启动脚本中添加一行代码,这无从下手呀,说好的不用开发人员介入,无需修改代码,有点悬了。另外说明文档中还找到以下这段话:

        这段话更让人莫名其妙,因为IIS只是将请求转发给dotnet core进程(IIS类似于Nginx的作用),并没有托管程序,那么安装.Net探针又有什么意义(应用性能监控的原理是通过在中间语言植入agent,以拦截方法的方式执行并实现监听,这是基于事件触发的,所以监听的程序应该是.net Core应用,不应该是IIS及.net托管程序)。备注:.Net探针用来监听标准的.Net应用及IIS,而.net Core探针才是用来监听跨平台的.net Core应用。

        先去问下开发人员,确认一下入口程序是否是web.config中写的(Rexen.GDRC.Management.Web.dll),结果开发人员说那是调试代码时候调的,发布IIS后不用管这个了。可能是开发人员没理解我的意思,我只能抱着怀疑的态度自己监听dotnet进程(用Process Monitor),结果发现进程调用的入口程序就是我所说的:

        那么按照tingyun的说明,我们调用tingyun-enable.bat后,再启动IIS及相关dotnet进程就应该要能监听到数据了,结果听云探针的日志却报错:

        打开tingyun-enable.bat后发现,就是声明了一些变量,并且发现了监听所用到的程序是tingyun_profiler.dll

SET TINGYUN_NETCORE_HOME=D:\Users\gavin\NetCore Profiler
SET CORECLR_ENABLE_PROFILING=1
SET CORECLR_PROFILER={8BEB2128-D285-4E1D-91B6-11ACD43EC0EE}
SET CORECLR_PROFILER_PATH=%TINGYUN_NETCORE_HOME%\x64\tingyun_profiler.dll

        以上报错也说明了,执行完tingyun-enable.bat后所声明的变量并没有生效,毫无疑问这是局部的声明,而应用程序执行过程中,肯定是引用不到这些变量。另外就是GetAppName()方法,让我想到了是不是能自己赋值个应用名,于是到说明文档里真的找到了这块:

        于是我开始意识到,tingyun-enable.bat中的都是环境变量,那么我们首先应该配好环境变量,而不是在这里纠结什么时候调用tingyun-enable.bat。说干就干,把以上在bat中声明的变量全都添加到系统变量,并且在path中加上tingyun_profiler.dll的引用路径:

         配好环境变量,按理只要重启应用程序就可以了,由于我也不能肯定重启应用程序是否快捷有效,那就简单粗暴一点吧,重启机器:

        重启完后,再看听云的监听日志,奇迹出现了,竟然没再出现上面的报错了:

        再看一下听云的监控页面,已经能看到完整的监控视图了:

        结局是完美的,我又再一次填平了听云上的一个坑,上一次填过的坑是《如何在Windows下安装听云NodeJs探针》。我分享的虽然只是个小小的问题处理方案,但其实想说的是我们测试人员真的应该具备这种思考能力:很多人缺乏的不是测试技术、方法和工具,而是缺乏分析能力。

         需要说明的是,.Net Core监控本身是不成熟的,因此不是所有.Net Core项目都可以实现监控,而且本文也不是为了推广听云,如果对.Net Core的应用性能监控有兴趣,可以关注Skywalking-netcore(开源项目)。

        更正说明:写这篇文章时,听云探针还是旧版本的,现在不一定能遇到我上面所说的问题,请读者自行鉴别。core探针1.1版本是早期的beta初版,针对sdk1.1适配的,后来core的sdk更新到2.0后,老版本探针会出现GetAppName取不到的问题,新版本探针已经修复该问题。另外,在windows上需要同时安装.NET探针不是针对监控本身,而是因为core探针没有做图形界面,为了方便而使用.NET探针的启动管理界面管理core探针的启动禁用,就免去了启动脚本里添加windows启动命令的过程,不过仅对windows上的core探针有效。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐