【问题标题】:Azure Application Insight Query to get success rateAzure Application Insight 查询以获取成功率
【发布时间】:2020-03-24 12:25:10
【问题描述】:

有一个关于如何在 Azure 仪表板上显示成功率的问题。 如果我有一个表明成功或失败的远程事件 - 这很简单:

    customEvents
    | where name == "ResponseEvent" and customDimensions.Condition == "test"
    | summarize count() by tostring(customDimensions.State) //State could be Success|Failure
    | render piechart

但就我而言 - 我有 2 个事件:RequestEvent、SuccessResponseEvent,我想从这两个事件中获得成功率,例如:successRate = 100*successCount/requestCount。

我最终得到了这个加入:

    customEvents
    | where name == "RequestEvent" and customDimensions.Condition == "test"
    | summarize  requestCount = count()
    | extend joinField = "1"
    | join ( customEvents
    | where name == "SuccessResponseEvent" and customDimensions.Condition == "test"
    | summarize  successCount = count()
    | extend joinField = "1")
    on joinField
    | extend successRate = (100 * successCount / requestCount)
    //////| extend failureRate = 100 - successRate 
    | project successRate
    | render table

我得到了我需要的值,但我只设法将它显示为表格,而我需要一个饼图。 我考虑过添加联合:

    let success = view () { print x=toint(80) };
    let failure = view () { print x=toint(20) };
    union withsource=TableName success, failure
    | render piechart

但我在我的请求中没有看到如何执行此操作。

或者使用 let 语句创建变量并尝试计算所有内容并使用 materialize(createRequestRecieved) 连接,但这会导致相当多的错误,我希望存在一些简单的方法。

问题是:也许有人可以指点我如何实现这一点:计算一个值,也许将其显示为两个值(成功和 100 成功)并以对“渲染饼图”运算符有效的格式排列它们?

第二个问题,不是那么重要:我可以通过某个现有领域加入他们吗?乳清我正在尝试使用 joinField = tostring(customDimensions.MappingField) 我收到一个错误:确保表达式:customDimensions.MappingField 确实是一个简单的名称

【问题讨论】:

    标签: azure azure-application-insights azure-log-analytics


    【解决方案1】:

    如果您要使用饼图,则需要一个字符串图例字段和该图例的每一行的值,因此两个结果的联合应该有效:

    requests
    | summarize Success = sumif(itemCount, success == true)
    | project Legend = "Success", Value = Success 
    | union
    (requests
    | summarize Failed = sumif(itemCount, success == false)
    | project Legend = "Failed", Value = Failed )
    | render piechart
    

    使用条形图将允许在一个查询中同时使用 summarize 子句而无需连接/联合,并且可能会提高性能:

    requests
    | summarize Success = sumif(itemCount, success == true), Failed = sumif(itemCount, success == false)
    | project Legend = "Status", Success, Failed 
    | render barchart 
    

    同样,在同一个查询中计算费率:

    requests
    | summarize Success = sumif(itemCount, success == true), Failed = sumif(itemCount, success == false)
    | extend SuccessRate = Success * 1.0 / (Success + Failed)
    

    【讨论】:

    • 感谢您的反馈。我需要尝试调整它,但现在我看不出您的第一个选项与我的第一个示例有何不同:检查 customDimensions.Condition 与检查成功 == true 相同。它是“简单”的数据源——“请求”,我的问题是我的数据源是整个大请求,重复两次以获得“联合”看起来不是一个好主意。
    • 是的,在第一个示例中,唯一的主要区别是“union”与“join”,join 通常会做笛卡尔积,并且可能会在查询中占用额外的内存/cpu,而 union 缝合两个桌子在一起很好。查询仍然执行两次。其他示例演示了如何只执行一次查询,但它们缺少“饼图”。我建议查找 "piechart" documentation 以找到使其与给定结果布局一起使用的技巧。
    【解决方案2】:

    我很确定这不是最好的选择,因为我在这种查询语言功能中遗漏了一些东西,但我可以将我的请求放入变量中,应用一些缓存并重复两次,我想:

    let dataSource = customEvents
    | where name == "RequestEvent" and customDimensions.Condition == "test"
    | summarize  requestCount = count()
    | extend joinField = "1"
    | join ( customEvents
    | where name == "SuccessResponseEvent" and customDimensions.Condition == "test"
    | summarize  successCount = count()
    | extend joinField = "1")
    on joinField
    | extend successRate = (100 * successCount / requestCount)
    | extend failureRate = 100 - successRate;
    let cacheddataSource = materialize(dataSource);
    cacheddataSource
    | project Legend = "Success", Value = successRate
    | union (
    dataSource
    |project Legend = "Failure", Value = failureRate 
    ) 
    | render piechart
    

    所以,让和实现或多或少有所帮助,也许需要进行一些调整以显示实际成功和失败的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2022-11-09
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多