Как получить два поля, используя рекс из файла журнала? - PullRequest
0 голосов
/ 10 января 2020

Я новичок ie со Splunk. Моя цель - взять два или более полей из журналов. Я должен проверить, является ли одно поле true и поэтому использовать другое поле, чтобы сделать счетчик. Счетчик показывает, сколько запросов было сделано клиентом с использованием атрибута user-agent.

Мой логин c желаемый:

int count1, count2;
count1 = 0;
count2 = 0;

if (GW == true) {
  if (UA == "user-agent1") count1++;
  if (UA == "user-agent2") count2++;
}

На данный момент я могу получить только одно поле и сделать счетчик без if-condition.

Этот запрос работает нормально и верните правильный счетчик запросов:

source="logfile.log" | rex "UA=(?<ua>\w+)" | stats count(eval(ua="user-agent1")) as USER-AGENT1

Но, когда я пытаюсь получить второе поле (GW), чтобы сделать лог c, запрос возвращает 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

1 Ответ

1 голос
/ 10 января 2020

Это будет примерно так:

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 будет проанализирован дважды.

...