【问题标题】:Stats Count Splunk Query统计计数 Splunk 查询
【发布时间】:2019-02-20 10:54:05
【问题描述】:

我想知道是否有人可以帮助我。

我写了以下关于我正在尝试编写的 Splunk 查询的帖子:

https://answers.splunk.com/answers/724223/in-a-table-powered-by-a-stats-count-search-can-you.html

我得到了一些很大的帮助,但是尽管在这方面工作了几天,现在专注于使用 eval if 语句,但我仍然遇到同样的问题,“成功”和“不成功”列显示空白结果。所以我想我应该把网络撒得更广一些,请问是否有人可以看看这个并就我如何解决这个问题提供一些指导。

非常感谢和亲切的问候

克里斯

【问题讨论】:

    标签: splunk splunk-query


    【解决方案1】:

    我尝试使用 splunkd-access 日志探索您的用例,并想出了一个简单的 SPL 来帮助您。 在这个查询中,我实际上加入了 2 个搜索的输出,这些搜索汇总了所需的结果(不关心搜索性能)。

    试一试。如果您可以访问_internal 索引,这将按原样工作。您应该能够轻松地修改它以适应您的活动(例如:将 user 替换为 ClientID)。

    index=_internal source="/opt/splunk/var/log/splunk/splunkd_access.log" 
    | stats count as All sum(eval(if(status <= 303,1,0))) as Successful sum(eval(if(status > 303,1,0))) as Unsuccessful by user 
    | join user type=left 
        [ search index=_internal source="/opt/splunk/var/log/splunk/splunkd_access.log" 
        | chart count BY user status ]
    

    我根据 splunk 社区答案更新了您的搜索(应该如下所示):

    w2_wmf(RequestCompleted)`request.detail.Context="*test" 
    | dedup eventId 
    | rename request.ClientID as ClientID detail.statusCode AS statusCode 
    | stats count as All sum(eval(if(statusCode <= 303,1,0))) as Successful sum(eval(if(statusCode > 303,1,0))) as Unsuccessful by ClientID 
    | join ClientID type=left 
        [ search w2_wmf(RequestCompleted)`request.detail.Context="*test" 
        | dedup eventId 
        | rename request.ClientID as ClientID detail.statusCode AS statusCode 
        | chart count BY ClientID statusCode ]
    

    【讨论】:

    • 嗨@Anant Naugai,谢谢你回到我身边。我对此唯一的犹豫是加入,因为我已经读到它们效率很低,并且有 50,000 条记录的截止,而且我知道我的摘录会比这更多,除非我误解了?非常感谢和亲切的问候
    【解决方案2】:

    我在 Splunk 中回答

    https://answers.splunk.com/answers/724223/in-a-table-powered-by-a-stats-count-search-can-you.html?childToView=729492#answer-729492

    但使用虚拟编码,它看起来像

    w2_wmf(RequestCompleted)`request.detail.Context="*test"
      | dedup eventId
      | rename request.ClientId as ClientID, detail.statusCode as Status
      | eval X_{Status}=1
      | stats count as Total sum(X_*) as X_* by ClientID
      | rename X_* as *
    

    将为您提供 ClientID、计数,然后为找到的每个状态代码提供一列,以及该列中每个代码的总和。

    据我所知,您无法使其正常工作,此查询应显示虚拟编码

    `index=_internal sourcetype=*access
     | eval X_{status}=1
     | stats count as Total sum(X_*) as X_* by source, user
     | rename X_* as *`
    

    这会给出类似的输出

    【讨论】:

    • 嗨@adb。谢谢你带着这个回到我身边。所以我已经按照你的建议尝试了代码,但不幸的是它不能像我希望的输出那样工作。状态代码未显示在任何列中,并且使用您在 Splunk 中提供的第二个解决方案回答成功和不成功列是空白的。非常感谢和亲切的问候
    • 嗨@IHRM,这没有意义。不会给你列的原因是如果你没有正确的rename detail.statusCode as Status,那么后面的命令就没有“状态”字段。你能做一个简单的stats count by Status,因为这将检查重命名是否有效,否则将不会显示任何结果。
    • 嗨@adb。我刚刚使用了您在此处发布的查询和 Splunk 的答案。非常感谢。
    • 如果你做 w2_wmf(RequestCompleted)request.detail.Context="*test" | dedup eventId | rename request.ClientId as ClientID, detail.statusCode as Status | stats count as Total by Status and w2_wmf(RequestCompleted)request.detail.Context="*test" |去重事件 ID |重命名 request.ClientId 为 ClientID,detail.statusCode 为 Status |统计数据按 detail.statusCode 计为总计
    • 如果您有权访问内部访问日志索引,您可以使用以下查询index=_internal sourcetype=*access | eval X_{status}=1 | stats count as Total sum(X_*) as X_* by source, user | rename X_* as * 查看实际原理
    猜你喜欢
    • 2021-11-08
    • 2020-10-21
    • 2012-08-17
    • 1970-01-01
    • 2020-12-22
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多