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

前提条件

  1. 在 ARMS 控制台上已创建应用监控,并已在 Java 程序中挂载和启动应用监控的 Agent。详情参见为 Java 应用安装探针中关于安装 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 下的所有业务事件,并根据业务事件定位问题原因。

更多信息