全息排查用于通过业务主键快速定位问题链路,需要和应用监控功能搭配使用。本文介绍了全息排查最佳实践。

前提条件

  1. 在ARMS控制台上已创建应用监控,并已在Java程序中挂载和启动应用监控的Agent。详情参见为Java应用手动安装Agent中关于安装Java探针的步骤。
  2. 程序中已引入arms-sdk-1.7.1.jar
    <dependency>
    <groupId>com.alibaba.arms.apm</groupId>
    <artifactId>arms-sdk</artifactId>
    <version>1.7.1</version>
    </dependency>
说明 如果无法获取Pom,请直接下载arms-sdk-1.7.1.jar

获取TraceId与RpcId

满足上述前提条件后,即可通过以下代码获取上下文的TraceId与RpcId。

Span span = Tracer.builder().getSpan();
String traceId = span.getTraceId();
String rpcId = span.getRpcId();

打印日志

获取TraceId与RpcId后,您可以根据业务需求打印和输出业务日志。以下是包含TraceId与RpcId的样例业务日志。该日志输出到文件/home/admin/logs/example/example.log中,但您也可以按需将其输出到SLS、MQ等其他通道中。

2018-07-12 11:37:40|1e057c4015313666599651005d1201|0|username=xiao,age=22,action=login
2018-07-12 11:37:40|1e057c4015313666599651005d1201|0|username=xiao,age=22,action=search
2018-07-12 11:37:40|1e057c4015313666599651005d1201|0|username=xiao,age=22,action=cart

以上每条业务日志均表示用户的一条行为轨迹。

配置全息排查事件集

按照自定义监控章节的说明创建一个自定义监控任务,使用上方的样例业务日志作为数据源,并按照下图方案自定义切分日志。

随后进入创建自定义监控任务的“创建全息排查事件集”步骤,并按照下图配置事件集。

  • 业务主键:表示搜索业务事件所使用的字段。在本文的示例中,业务主键是行为(action)和用户名称(username)。

  • 选择时间字段:必须选择业务时间,不能选择系统时间。

  • 流水号:设置TraceId。

  • 流水序号:设置RpcId。

配置好事件集后,请启动自定义监控任务。

全息排查功能的使用案例

本案例的业务日志表示用户的行为轨迹,对应的应用为购物网站。假设用户kevin.yang投诉称在2018-07-12 14:20以后下单失败,那么您可以通过以下两种方法来定位问题原因。

  • 方法1:调用链路查询。
    1. 在左侧导航栏中单击应用监控 > 调用链路查询,并在顶部菜单栏选择目标地域。
    2. 调用链路查询页面选择参数类型业务主键,在参数值中输入业务主键的值,例如本例中的username:kevin.yang,然后单击添加到查询条件。则所有调用链路显示在搜索结果中。
    3. 在搜索结果中,单击异常调用链路的TraceId,然后单击业务轨迹页签,显示该TraceId下的所有业务事件,并根据业务事件定位问题原因。
  • 方法2:全息排查事件查询。
    1. 在左侧导航栏中单击应用监控 > 全息排查事件查询,并在顶部菜单栏选择目标地域。
    2. 在标签页上的日期参数值中输入日期范围,在全息排查事件集下拉框中选择前面配置的事件集,然后单击查询。指定时间区间内的所有调用链路显示在搜索结果中。
    3. 在搜索结果中,单击调用链查询,然后单击业务轨迹页签,显示该TraceId下的所有业务事件,并根据业务事件定位问题原因。

更多信息