azure 使用pivot的结果集后的KQL过滤器

yzuktlbb  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在尝试编写一个KQL查询,以从附加到API Management示例的Application Insights请求日志中返回行。我希望在某个API名称满足以下两个条件时,为该API名称返回一行:
1.至少两次失败。(success =“False”)
1.总呼叫中至少有50%失败。
在下面的示例datatable中,我希望查询只返回一行“/API/person”,因为总共6次调用中有5次失败。不会有“/API/banner”的行,因为虽然总共有2个失败,但失败率小于50%。
到目前为止,我已经能够使用一个pivot来获得每个表的成功和失败总数。我更熟悉TSQL,会创建一个嵌套的子查询并过滤出结果。我的理解是,这种方法在KQL中不可用。

[![datatable(apiname:string, success:bool, timestamp:timespan)
\[
   "/api/person", "True", time(00:00:00),
   "/api/status", "True", time(00:00:24),
   "/api/banner", "True", time(00:00:20),
   "/api/banner", "True", time(00:00:19),
   "/api/banner", "True", time(00:00:21),
   "/api/banner", "False", time(00:00:22),
   "/api/banner", "False", time(00:00:23),
   "/api/person", "False", time(00:00:00),
   "/api/person", "False", time(00:00:37),
   "/api/person", "False", time(00:00:47),
   "/api/person", "False", time(00:00:53),
   "/api/person", "False", time(00:00:55),
\] 
| project apiname, success
| evaluate pivot(success, count(tobool(success)))]

字符串
当前结果集:
x1c 0d1x的数据
我怀疑有一种方法可以在KQL中用不同的方法实现这一点。任何提示或建议将不胜感激。在此先谢谢您!

62lalag4

62lalag41#

我希望在某个API名称满足以下两个条件时,为该API名称返回一行:
1.至少两次失败。(success =“False”)
1.总呼叫中至少有50%失败。
在下面的示例datatable中,我希望查询只返回“/API/person”的一行
你可以使用count()countif()aggregation函数。

datatable(apiname:string, success:bool, timestamp:timespan)
[
   "/api/person", "True", time(00:00:00),
   "/api/status", "True", time(00:00:24),
   "/api/banner", "True", time(00:00:20),
   "/api/banner", "True", time(00:00:19),
   "/api/banner", "True", time(00:00:21),
   "/api/banner", "False", time(00:00:22),
   "/api/banner", "False", time(00:00:23),
   "/api/person", "False", time(00:00:00),
   "/api/person", "False", time(00:00:37),
   "/api/person", "False", time(00:00:47),
   "/api/person", "False", time(00:00:53),
   "/api/person", "False", time(00:00:55),
]
| extend is_failure = success == false
| summarize total_failures = countif(is_failure),
            failure_percentage = 100.0 * countif(is_failure) / count() 
         by apiname
| where total_failures >= 2 and failure_percentage >= 50.0
| project apiname

字符串
| apiname |
| ------------ |
| /api/person |

相关问题