如何根据 SLA 得出 Apdex 阈值?
How arrive at an Apdex Threshold value based on the SLA?
我们有可用的 REST API。对于此 API 提供的每个端点,我们都有一个基于内部测试的定义 SLA。 New Relic 提供了一个选项来定义每个应用程序的 Apdex T 分数。考虑如下场景:
- 端点 A:SLA 为 200 毫秒
- 端点 B:SLA 为 800 毫秒
平均 SLA:500 毫秒
案例 1:考虑 Apdex 阈值的平均 SLA
这种方法的问题是,即使我的端点 A 预计在 200 毫秒内完成,它也不会被标记,即使端点花费的时间是 SLA 中定义的两倍,因为它仍然小于平均值。端点 B 的情况反之亦然,即使它低于 800 毫秒也会被标记。
情况2:将所有端点的最大SLA(800ms)作为Apdex T值
再次出现问题,这里是端点 A。即使花费实际预期时间的 4 倍,也不会标记来自该端点的任何响应延迟。
那么,在这种情况下,我们如何得出 Apdex 阈值?
我浏览了来自 New relic 的以下文章:LINK。当我们将服务视为一个整体时,这是有意义的,但当我们查看每个端点时,则不然。
您确定要根据您的 SLA 设置 Apdex 吗?
我建议应用程序的典型性能是更好的衡量标准。假设您的应用程序在过去 7 天内的性能是否平均。但是在 "How to set an Apdex T" 中,文章建议对您的典型表现使用百分位数。
因此,如果您获得第 90 个百分位数,则 Apdex 分数通常应该接近 0.95。显然 Apdex 为 1 是无用的,因为您没有将您的帐户持有到足够接近的帐户。所以我会单独询问 Insights
select percentile(duration, 90) from Transaction where appName="AppA" since 7 days ago
select percentile(duration, 90) from Transaction where appName="AppB" since 7 days ago
这将使您的响应时间超过 90% 的客户。所以应该是关于您的 Apdex T 值的一个很好的粗略指南。
但是,如果您的目标是在 SLA 为 200 毫秒的 App A 上,任何超过该时间的交易都应为 Apdex 分数的 0 分。那么很简单,您的 Apdex T 应该是 50 毫秒。因为任何快于 50 毫秒的东西都会得到 1 分,任何介于 Apdex T 和 4 x Apdex T 之间的东西都会得到 0.5 分,但至少仍在得分。任何慢于 4 x Apdex T(在这种情况下为 200 毫秒)的东西都会在 Apdex 中获得 0 分。这样一来,如果交易违反了 SLA,那么交易就会被标记为 Frustrated for Apdex。
Apdex 是一门艺术,但您绝对可以使用上述任何一种方法到达您需要的地方。我希望我涵盖了我认为在这种情况下可能出现的两种情况。
我们有可用的 REST API。对于此 API 提供的每个端点,我们都有一个基于内部测试的定义 SLA。 New Relic 提供了一个选项来定义每个应用程序的 Apdex T 分数。考虑如下场景:
- 端点 A:SLA 为 200 毫秒
- 端点 B:SLA 为 800 毫秒
平均 SLA:500 毫秒
案例 1:考虑 Apdex 阈值的平均 SLA 这种方法的问题是,即使我的端点 A 预计在 200 毫秒内完成,它也不会被标记,即使端点花费的时间是 SLA 中定义的两倍,因为它仍然小于平均值。端点 B 的情况反之亦然,即使它低于 800 毫秒也会被标记。
情况2:将所有端点的最大SLA(800ms)作为Apdex T值 再次出现问题,这里是端点 A。即使花费实际预期时间的 4 倍,也不会标记来自该端点的任何响应延迟。
那么,在这种情况下,我们如何得出 Apdex 阈值? 我浏览了来自 New relic 的以下文章:LINK。当我们将服务视为一个整体时,这是有意义的,但当我们查看每个端点时,则不然。
您确定要根据您的 SLA 设置 Apdex 吗?
我建议应用程序的典型性能是更好的衡量标准。假设您的应用程序在过去 7 天内的性能是否平均。但是在 "How to set an Apdex T" 中,文章建议对您的典型表现使用百分位数。
因此,如果您获得第 90 个百分位数,则 Apdex 分数通常应该接近 0.95。显然 Apdex 为 1 是无用的,因为您没有将您的帐户持有到足够接近的帐户。所以我会单独询问 Insights
select percentile(duration, 90) from Transaction where appName="AppA" since 7 days ago
select percentile(duration, 90) from Transaction where appName="AppB" since 7 days ago
这将使您的响应时间超过 90% 的客户。所以应该是关于您的 Apdex T 值的一个很好的粗略指南。
但是,如果您的目标是在 SLA 为 200 毫秒的 App A 上,任何超过该时间的交易都应为 Apdex 分数的 0 分。那么很简单,您的 Apdex T 应该是 50 毫秒。因为任何快于 50 毫秒的东西都会得到 1 分,任何介于 Apdex T 和 4 x Apdex T 之间的东西都会得到 0.5 分,但至少仍在得分。任何慢于 4 x Apdex T(在这种情况下为 200 毫秒)的东西都会在 Apdex 中获得 0 分。这样一来,如果交易违反了 SLA,那么交易就会被标记为 Frustrated for Apdex。
Apdex 是一门艺术,但您绝对可以使用上述任何一种方法到达您需要的地方。我希望我涵盖了我认为在这种情况下可能出现的两种情况。