如何使用 rex 从日志文件中获取两个字段?
How to get two fields using rex from log file?
我是 Splunk 的新手。我的目标是从日志中获取两个或更多字段。我必须检查一个字段是否为 true
,因此使用另一个字段来制作计数器。计数器是关于客户端使用 user-agent
属性发出的请求数。
我想要的逻辑:
int count1, count2;
count1 = 0;
count2 = 0;
if (GW == true) {
if (UA == "user-agent1") count1++;
if (UA == "user-agent2") count2++;
}
目前我只能得到一个字段并在没有 if-condition
的情况下进行计数器。
此查询工作正常,return 正确的请求计数器:
source="logfile.log" | rex "UA=(?<ua>\w+)" | stats count(eval(ua="user-agent1")) as USER-AGENT1
但是,当我尝试获取第二个字段 (GW
) 来构建逻辑时,查询 returns 0
.
source="logsfile.log" | rex "UA=(?<ua>\w+) GW=(?<gw>\w+)" |stats count(eval(ua="user-agent1")) as USER-AGENT1
那么,我如何获得更多字段以及如何在查询中生成 if-condition
?
示例日志:
2020-01-10 14:38:44,539 INFO [http-nio-8080-exec-8] class:ControllerV1, UA=user-agent1, GW=true
2020-01-10 14:23:51,818 INFO [http-nio-8080-exec-3] class:ControllerV1, UA=user-agent2, GW=true
它将是这样的:
source="logsfile.log" UA GW
| rex "UA=(?<ua>\w+), GW=(?<gw>\w+)"
| stats count(eval(gw="true" AND ua="user-agent1")) as AGENT1,
count(eval(gw="true" AND ua="user-agent2")) as AGENT2
例如,如果您不知道变量的顺序或变量超过 2 个,则可以使用单独的 rex
语句:
source="logsfile.log" UA GW
| rex "UA=(?<ua>\w+)"
| rex "GW=(?<gw>\w+)"
| stats count(eval(gw="true" AND ua="user-agent1")) as AGENT1,
count(eval(gw="true" AND ua="user-agent2")) as AGENT2
这可能会有点慢,因为 _raw
将被解析两次。
我是 Splunk 的新手。我的目标是从日志中获取两个或更多字段。我必须检查一个字段是否为 true
,因此使用另一个字段来制作计数器。计数器是关于客户端使用 user-agent
属性发出的请求数。
我想要的逻辑:
int count1, count2;
count1 = 0;
count2 = 0;
if (GW == true) {
if (UA == "user-agent1") count1++;
if (UA == "user-agent2") count2++;
}
目前我只能得到一个字段并在没有 if-condition
的情况下进行计数器。
此查询工作正常,return 正确的请求计数器:
source="logfile.log" | rex "UA=(?<ua>\w+)" | stats count(eval(ua="user-agent1")) as USER-AGENT1
但是,当我尝试获取第二个字段 (GW
) 来构建逻辑时,查询 returns 0
.
source="logsfile.log" | rex "UA=(?<ua>\w+) GW=(?<gw>\w+)" |stats count(eval(ua="user-agent1")) as USER-AGENT1
那么,我如何获得更多字段以及如何在查询中生成 if-condition
?
示例日志:
2020-01-10 14:38:44,539 INFO [http-nio-8080-exec-8] class:ControllerV1, UA=user-agent1, GW=true
2020-01-10 14:23:51,818 INFO [http-nio-8080-exec-3] class:ControllerV1, UA=user-agent2, GW=true
它将是这样的:
source="logsfile.log" UA GW
| rex "UA=(?<ua>\w+), GW=(?<gw>\w+)"
| stats count(eval(gw="true" AND ua="user-agent1")) as AGENT1,
count(eval(gw="true" AND ua="user-agent2")) as AGENT2
例如,如果您不知道变量的顺序或变量超过 2 个,则可以使用单独的 rex
语句:
source="logsfile.log" UA GW
| rex "UA=(?<ua>\w+)"
| rex "GW=(?<gw>\w+)"
| stats count(eval(gw="true" AND ua="user-agent1")) as AGENT1,
count(eval(gw="true" AND ua="user-agent2")) as AGENT2
这可能会有点慢,因为 _raw
将被解析两次。