AppDynamics 将包含 UUID 的 REST 端点分组为单个业务事务

Posted

技术标签:

【中文标题】AppDynamics 将包含 UUID 的 REST 端点分组为单个业务事务【英文标题】:AppDynamics to group REST endpoints containing UUIDs as a single business transaction 【发布时间】:2020-02-26 21:27:09 【问题描述】:

我有一个在 JBoss/Wildfly 上运行并使用 RESTEasy 的 Web 应用程序。我正在用 AppDynamics 监控它。我已将业务事务检测配置为使用 Java Servlet。 这几乎可以工作,但我的一些 REST 路径包含 UUID,例如:

/data/scenario/d345d238-e0d2-4e01-a96e-4bf11290ce1d/job

每次使用不同的 UUID 调用此端点时,AppD 都会将其视为不同的业务事务。有没有办法让 AppD 识别路径中的 UUID,并将它们分组到单个业务事务中?比如:

/data/scenario/id/job

我应该能够通过将正则表达式应用于请求的路径信息来做到这一点:

request.getPathInfo().replaceAll(
    "[0-9a-f]8\\-[0-9a-f]4\\-[0-9a-f]4\\-[0-9a-f]4\\-[0-9a-f]12", 
    "id")

甚至只是

request.getPathInfo().replaceAll("[0-9a-f\\-]36", "id")

但我不知道如何正确地逃避它。

$getPathInfo().replaceAll([0-9a-f\\-]36, id)

没有用,也没有

$getPathInfo().replaceAll(\[0\-9a\-f\\\\-\]\36\, id)

【问题讨论】:

【参考方案1】:

配置->仪器->事务检测->添加

在“使用请求数据拆分事务”部分,您必须选择“特定 URI 段” 段数:1,2,4

在您的情况下,事务名称将是“/data/scenario/job”

示例配置:

【讨论】:

谢谢。这在我给出的示例 URI 中有效,但是我们有很多包含 UUID 的端点 URI 是不同的位置。我需要更通用的东西。 如果您的 URL 命名没有标准,我建议使用 Header、Cookie、HTTP 参数或方法参数而不是正则表达式。我相信您可以找到一个可以拆分交易的独特价值。

以上是关于AppDynamics 将包含 UUID 的 REST 端点分组为单个业务事务的主要内容,如果未能解决你的问题,请参考以下文章

Appdynamics 4.2和4.3中的Lambda表达式支持

mysql经验

APM系列-国外新兴厂商New Relic vs. AppDynamics

BigQuery:如何将字段添加到 REPEATED 记录?

mysql将唯一的uuid添加到现有表

生成唯一标识符 ,通用唯一标识符 UUID