You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Splunk查询获取working_days>0的用户ID及工作日数据

Splunk 提取working_days>0用户记录的正确实现

常见过滤失效原因

之前写法返回结果不对,90%以上是这两个问题:

  • rex正则提取到的working_days默认是字符串类型,直接做数值大小比较会按字符串字典序判断,逻辑完全不符合预期
  • 正则提取时带了多余的空格、非数字字符,导致后续判断时字段值无法被识别为有效数字

可直接运行的查询语句

替换语句最开头的检索范围为你实际的索引、源类型条件即可:

<替换为你的基础日志检索条件,例:index=user_record sourcetype=work_stat>
| rex "user_id:(?<user_id>\d+)"
| rex "working_days:(?<working_days_extract>\d+)"
| eval working_days = tonumber(working_days_extract)
| where isnotnull(working_days) AND working_days > 0
| table user_id, working_days

语句逻辑说明

  • 两行rex规则用\d+精准匹配连续数字,避免提取到字段值前后的空格、标点等冗余字符
  • eval步骤调用tonumber()函数把字符串格式的工作日数强制转换为数值类型,是过滤条件生效的核心
  • where条件同时排除空值、0值、非数字的无效记录,不会漏判也不会误判
  • 最后用table只返回要求的user_id和working_days字段

针对你提到的4条样例日志场景,该语句会精准返回两条目标结果:

  • user_id:5619,working_days:10
  • user_id:306561,working_days:35

调试方案

如果运行后结果仍不符合预期,可以在where行前插入下面这行调试,确认字段类型是否正确:

| eval check_type = typeof(working_days), check_value = working_days."___"

如果check_type返回值不是Number,说明正则提取的内容有冗余字符,调整rex的匹配规则即可。


内容的提问来源于stack exchange,提问作者Aniket Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.20 16:15:49