Sumologic:从两个日志查询中计算出一个值

Sumologic: calculate a value from two log queries

我有两个来自同一流的日志查询,它们都 return 符合搜索条件的日志消息数。

首先我想获取传入的blob数量如下:

namespace=ns cluster=we container=project1
| where %"log.@m" matches "*About to handle incoming blob*"
| count as Incoming

然后我有另一个日志查询来获取同一流中成功处理的 blob 的数量。唯一的区别在于“匹配”子句:

namespace=ns cluster=we container=project1
| where %"log.@m" matches "*successfully handled blob*"
| count as Success

我想计算比率,即成功/传入,但找不到正确的方法来实现。我已经测试了子查询、度量资源管理器和 Google 提供但没有成功的其他一些想法。欢迎任何指点。

您可以将这两个查询合二为一。您可以通过计算该行是否与您的模式匹配并将该信息存储为新字段来实现。 像这样(我还没有测试过):

namespace=ns cluster=we container=project1
| %"log.@m" matches "*successfully handled blob*" as success

或者实际上您更愿意将其转换为数值(这样更容易聚合):

namespace=ns cluster=we container=project1
| if (%"log.@m" matches "*successfully handled blob*", 1, 0) as success

然后您可以汇总:

...
| sum(success) as successCount, count as totalCount
| successCount / totalCount as successRatio

免责声明:我目前受雇于 Sumo Logic

感谢 Gregorz 的提示,它帮助我找到了正确的回复。在我的例子中,有许多不同的消息,所以我不得不添加一个额外的过滤器。这是我提出的最终查询:

namespace=ns cluster=we container=project1
| where (%"log.@m" matches "*successfully handled 
blob*" or %"log.@m" matches "*About to handle incoming blob*")
| if (%"log.@m" matches "*successfully handled 
 blob*", 1, 0) as success
| sum(success) as successCount, count as totalCount
| (successCount / (totalCount - successCount)) * 100 as ratio
| format("%.0f",ratio) as successRatio
| fields successRatio