ARMS的查询调用链功能所支持的内置查询字段不具备业务意义,无法满足有业务场景的查询需求。借助ARMS业务监控,您可以为应用配置自定义参数提取规则,业务监控会获取相应业务参数并追加到调用链中,此后您可以根据自定义参数来查询调用链。

前提条件

您已经接入ARMS业务监控,详情请参见准备工作概述
注意 请确保将Agent升级至2.7.1或更高版本。

背景信息

ARMS提供查询调用链功能,支持的查询条件包括TraceId、接口名称、IP地址、HTTP状态码等,但这些查询条件都不具备具体的业务属性,如需查询用户ID、订单ID等含有业务信息的字段,则查询调用链功能无法满足需求。借助ARMS业务监控,这个问题即可迎刃而解。

接入ARMS业务监控后,只需配置自定义参数提取规则,ARMS业务监控就会通过Agent获取业务参数并追加到调用链中,您可以快速获得基于业务参数条件精准定位调用链的能力。

相较于ARMS的全息排查功能和业务监控的分组规则功能,业务监控的自定义参数提取功能更具优势,以下表格总结了三者的区别。

监控方式 接入成本 实时性 灵活性
业务监控(参数提取) 低(基于Agent业务信息自动采集上报) 实时(后台实时聚合运算并展现) 高(可配置多条参数提取规则,且所有业务数据全量上报。)
业务监控(分组规则) 低(基于Agent业务信息自动采集上报) 实时(后台实时聚合运算并展现) 受限(只能配置1条分组规则,业务数据只取Top 10。)
全息排查 高(需要改造应用程序,在日志中将业务信息和调用链关联起来。) 实时 低(必须更改日志后才能展示新增分析需求的业务信息)

配置自定义参数提取规则

要实现自定义参数查询调用链,需要先为应用配置自定义参数提取规则。

  1. 登录ARMS控制台
  2. 在左侧导航栏选择应用监控 > 应用列表,并在页面左上角选择目标地域。
  3. 应用列表页面上,单击目标应用右侧操作列的设置
  4. 应用设置页面单击自定义参数页签,然后单击右上角的添加自定义参数
  5. 添加自定义参数对话框中输入以下信息,并单击确认
    bzm_db_add_custom_parms
    参数 描述 是否必填 示例值
    规则名称 自定义参数提取规则名称。 必填 业务参数提取
    接口类型 目前仅支持HTTP入口。 必填 HTTP入口
    参数提取规则 针对HTTP接口,支持从Parameter、Cookie、Method和Header中提取所需的业务字段,且支持设置多条参数提取规则。 必填 如需从业务请求接口curl "http://{domain}/api/buy?brand=SIEMENS" -H "account: 123456"中提取brandaccount数据,则添加以下参数提取规则:
    • Parameter:brand
    • Header:account
    适用接口 默认情况下,参数提取规则针对所有业务接口,表达式为/**。如需针对特定的业务接口,请在此设置。 选填 /**
    调用链全采 开启后对应业务接口将忽略应用调用链采样率限制并进行全量采集。默认关闭。 选填 关闭

根据自定义业务参数查询调用链

配置自定义参数提取规则后,即可根据自定义的业务参数查询调用链。

  1. 自定义参数页签上,单击目标规则右侧操作列的查询调用链
  2. 调用链路查询页签上输入以下参数,并单击查询
    说明 如需新增作为查询条件的参数名和参数值,请单击第一行参数值右侧的图标。
    参数名 参数值
    日期(默认) 查询调用链的时间范围,例如2020-07-01 00:00至2020-08-01 00:00
    客户端名(默认) 客户端名称。本示例中不涉及。
    服务端名(默认) 服务端名称。从下拉列表中选择设置了参数提取规则的应用名称。
    http.parameters.brand 本示例中为SIEMENS
    http.parameters.account 本示例中为123456
    符合查询条件的结果将显示在下方列表中。pg_trace_query_with_custom_params
  3. 在查询结果中单击目标TraceId,例如耗时较长的TraceId。
  4. 调用链路页签上查看调用链详情,并借助这些信息定位问题。
    ex_tab_trace_bzm_with_custom_params
    参数 描述
    应用名称 设置了自定义参数提取规则的应用名称。
    日志产生时间 日志的产生时间,精确到秒。
    状态 红色表示该服务调用的本地调用链路中存在异常,绿色表示正常。
    IP地址 该应用的IP地址。
    调用类型 该次调用的调用类型,与自定义参数的接口类型对应。
    服务名称 服务的名称,一般为接口名称。将鼠标指针悬浮于服务名称上,可在浮层中查看自定义参数,详情请参见验证结果
    方法栈 单击该列的放大镜图标后,可在对话框内查看方法栈的以下详情:
    • 调用方法:本地方法栈调用方法,展开后显示的是该方法的下一层调用。
    • 行号:本地方法的代码所在行数。
    • 扩展信息:

      • 参数:调用的输入参数。
      • SQL:数据库调用的SQL语句。
      • 异常:抛错的信息。
    • 时间轴:本地调用链路每次方法调用的时间分布。
    线程剖析 线程粒度的CPU耗时和每类线程数量的统计,详情请参见线程分析
    时间轴 各服务间调用链路的耗时,以及相对于整条调用链路的耗时分布。

验证结果

您可按照以下步骤验证自定义参数提取规则是否生效。

  1. 调用链路页签的服务名称列,将鼠标指针悬浮于服务名称上。
  2. 在浮层的Tags区域查看是否有自定义的参数。
    ex_overlay_trace_tags

    如果有您自定义的业务参数,则说明自定义参数提取规则生效。