elastic APM针对java应用的高阶用法 二(java agent)

文章目录

    • 异常监测
    • 日志分析系统的配合

这篇文章是接着上一篇 elastic APM针对java应用的高阶用法(java agent)剩余的内容,异常监测和与日志分析系统的配合。

异常监测

接着上一篇文章中的内容,我们将异步函数里面进行redis连接的网络环境切换一下(把redis服务器给关了)。这时,jedis会抛出一个SocketTimeoutException异常。打开APM,看看这个异常是否能够捕捉到:

可见:

  1. APM仍然能捕捉到事务,但是在事务中,redis的执行只到了auth()函数。另外,如果只看transaction项,我们无法直观的看到该事务抛出了异常,这点需要elastic APM进行改进
  2. 点击Errors选项,我们可以看到抛出异常的类,行数,抛出时间,堆栈信息。但可以看到URL,Request method, Handled, Transaction sample ID等都是N/A。出现这个现象原因可能是:Redis的操作是异步的,即在另外一个单独的线程里面进行,虽然从Transaction里看到看到它的spans,但是不属于Transaction的一部分
    elastic APM针对java应用的高阶用法 二(java agent)_第1张图片

因此,我们再修改一下代码:

  1. 我们首先把elasticapm.properties配置里面的trace_methods=com.example.sqldemo.service.*,redis.clients.jedis.Jedis#keys(),redis.clients.jedis.BinaryJedis#*项给注释掉,即不再将定时任务作为监测目标。然后我们看看还能不能捕捉到SocketTimeoutException异常。
  2. 我们在addUser()函数里面增加异常点int errorTrigger = 100 / 0;,当web访问/apm/multiSql路径的时候触发

然后运行下程序,可以看到:

  1. APM捕捉到了除零的异常,但是没有SocketTimeoutException异常,即只能捕捉在transaction范围内的异常。
  2. / by zero异常有关联的transaction ID,可以直接跳转到对应的transaction当中。
  3. 但Handled仍然为空

接下来我们在代码中捕获该异常,并进行处理,看看情况如何:
elastic APM针对java应用的高阶用法 二(java agent)_第2张图片
代码内捕获后,APM中不再有新的异常记录,即APM只捕获抛出的未处理的异常

日志分析系统的配合

未完待续。。。

你可能感兴趣的:(ELK,Java,点火三周的Elastic,Stack专栏)