非HTTP应用或批处理应用如何进行全链路监控
在近期的应用性能问题分析中, 有时候会发现业务异常, 但是却无法在APM监控中找到相关的请求, 这可能是由于请求并非HTTP请求, 而可能是批处理或其他非HTTP请求导致的. 因此无法监控分析.
另外, 有些时候, 我们想要了解这类应用的:
● TCP解析 处理性能;
● 批处理中SQL性能...
那么就需要对非HTTP应用或批处理应用如何进行全链路监控. 下面介绍如何实现.
具体实现概述
接下来具体是通过Dynatrace AppMon 来实现对非HTTP应用或批处理应用的全链路监控.
监控前后的效果对比如下:

● 未监控之前: 看不到一条事务
● 监控后: 事务数巨细无遗
具体的实现是利用了Dynatrace的Entry Points(入口点)功能.
一个
具体实现步骤
如果一个事务没有被抓取到(比如: mule的tcp请求, 批处理..), 那么就需要以下操作步骤:
1. (可选)做CPU采样, 找到
2. 配置指定方法的传感器
3. 热部署或重启Agent生效
找到入口点方法
如果你是一名开发, 且对你要监控的程序的
● TCP请求的入口点可能是这样的:
● Batch Job的入口点可能是这样的:
如果你不清楚
CPU采样可以分析当前运行的的Java或 .NET程序的线程堆栈, 并找出是否以某一个方法长时间运行或被频繁调用.分析流程如下:
1. 点击Dynatrace上的CPU 采样仪表图. 如下:

2. 然后选择你要监控的应用Agent, 点击确定进行采样. 大约2分钟后停止采样.

3. 采样完成后, 对样本进行分析. 如下图:
分析起来其实挺简单. 我们要找的
a. 位于线程栈的较底层, 但是肯定在线程启动方法(如: )之后
b. 被频繁调用(如果是tcp请求这类的话)
c. 整个线程执行时间较长或CPU时间较长 (如批处理, 或tcp处理报文)

4. 根据以上条件, 我们会找到那个
配置该方法的传感器
找到该方法后, 直接在上图里选中该方法, 点击右键, 会弹出一系列菜单, 选择: 添加这个方法为传感器. 然后会弹出如下对话框:
勾选红框中的: Allow to start PurePaths from this method (Entry Point)
配置好之后点击确定.

那么生效后, 就会对该方法进行字节码注入, 并且, 只要捕获到该方法, 就会认为该方法是一条事务的
● 调用其他任何方法
● 调用Web Service
● 执行SQL
● 抛出 Exception
● 输出 Error log
● ...
都会被完整的记录, 记录响应时间, 成功/失败, 相关参数, web service 请求, sql语句, 异常堆栈, log日志...应有尽有.
热部署或重启Agent生效
当然, 还是要使刚刚添加的方法监控规则生效才会有一切. 要使之生效, 有2种办法:
1. Dynatrace Agent 热部署 (SUN JDK 1.6+)
2. 重启Dynatrace Agent (IBM JDK 6)
效果
生效前, 可能看不到一条事务; 生效后, 可以看到每一条事务的细节.
如下图所示:
