我是Splunk的新手,我正在尝试进行查询以计算有多少请求具有确定值,但是如果请求上有特定属性,则必须将该计数器增加。
示例:
2020-01-09 13:51:28,802 INFO [http-nio-8080-exec-8] class:ControllerV1, UA=[tokyo], GW=[api-gateway-id]
2020-01-09 13:51:31,865 INFO [http-nio-8080-exec-9] class:ControllerV1, UA=[tokyo], GW=[api-gateway-id]
2020-01-09 13:51:32,922 INFO [http-nio-8080-exec-10] class:ControllerV1, UA=[tokyo], GW=[api-gateway-id]
2020-01-09 13:51:36,939 INFO [http-nio-8080-exec-2] class:ControllerV1, UA=[tokyo], GW=null
2020-01-09 13:51:48,614 INFO [http-nio-8080-exec-1] class:ControllerV1, UA=[new-york], GW=[api-gateway-id]
2020-01-09 13:51:49,266 INFO [http-nio-8080-exec-3] class:ControllerV1, UA=[new-york], GW=[api-gateway-id]
2020-01-09 13:51:57,533 INFO [http-nio-8080-exec-4] class:ControllerV1, UA=[helsing], GW=[api-gateway-id]
对于上面的示例,如果GW != null
,我必须增加计数器,所以我有三个计数器,分别是东京,纽约和帮助。结果应该是这样的:
tokyo | new-york | helsing
3 | 2 | 1
尝试:
source="/logfiles.log" | rex "UA=(?<user-agent>\w+)" | stats count(eval(user-agent="[tokyo]")) as TOKYO
但是返回错误:Error in 'rex' command: Encountered the following error while compiling the regex 'UA=(?<user-agent>\w+)': Regex: syntax error in subpattern name (missing terminator).
我知道不能使用-
,但是我必须这样做,并且当我删除它时,结果保持为空(0个结果)。
答案 0 :(得分:0)
您只需在基础搜索中添加NOT "GW=null"
,如果正在评估字段GW,则可以添加GW!=null
这就是我所见过的正则表达式语法(如果在某些字段中对消息进行了评估,则使用字段名称,或者使用 raw),还将hiphen(-)更改为下划线()变量名,如下所示:不接受带“-”的变量名。
source="/logfiles.log"
| rex field=_raw "UA=(?<user_agent>\w+)"
| stats count(eval(user-agent="[tokyo]")) as TOKYO
但是在上面的正则表达式中,您也需要相当大的方括号'[' 所以下面的正则表达式应该可以工作
source="/logfiles.log"
| rex field=_raw "UA=(?<user_agent>\[\w+\])"
| stats count(eval(user-agent="[tokyo]")) as TOKYO