grok parse необязательный шаблон поля не работает - PullRequest
0 голосов
/ 14 июня 2019

У меня есть такой журнал:

ERROR_MESSAGE:Invalid Credentials,THROTTLED_OUT_REASON:API_LIMIT_EXCEEDED

Я пытаюсь разобрать его с помощью grok с помощью отладчика grok:

ERROR_MESSAGE:%{GREEDYDATA:errorMassage},THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason}

Это работает, но иногда журналпоставляется без поля THROTTLED_OUT_REASON.

ERROR_MESSAGE:%{GREEDYDATA:errorMassage}

В этом случае я попробовал приведенный ниже код, поскольку THROTTLED_OUT_REASON является необязательным полем.

ERROR_MESSAGE:%{GREEDYDATA:errorMassage}(,THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason})?

Так что это должно работать в обоих случаях.Заданный вывод для журнала с необязательным полем:

{
  "errorMassage": [
    [
      "Invalid Credentials,THROTTLED_OUT_REASON:API_LIMIT_EXCEEDED"
    ]
  ],
  "throttledOutReason": [
    [
      null
    ]
  ]
}

Но ожидаемый вывод для журнала с необязательным полем:

{
  "errorMassage": [
    [
      "Invalid Credentials"
    ]
  ],
  "throttledOutReason": [
    [
      "API_LIMIT_EXCEEDED"
    ]
  ]
}

ожидаемый вывод для журнала без необязательного поля:

{
  "errorMassage": [
    [
      "Invalid Credentials"
    ]
  ],
  "throttledOutReason": [
    [
      null
    ]
  ]
}

Кто-нибудь может предложить решение, которое дает правильный вывод для обоих типов журналов?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Я получил ответ, используя @ Skeeve 's idea .

Вот для любого, кто задаст подобный вопрос:

Я использовал пользовательский шаблон, чтобы избежать чрезмерного употребления GREEDYDATA (для поля errorMessage).

ERROR_MESSAGE:(?<errorMassage>([^,]*)?)(,THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason})?
1 голос
/ 14 июня 2019

Поскольку вы используете GREEDYDATA, он "съедает" столько, сколько может получить, чтобы заполнить errormessage.

Я не знаю достаточно GROK, чтобы сказать вам, какие существуют альтернативные определенные шаблоны, ноВы должны иметь возможность использовать пользовательский шаблон:

ERROR_MESSAGE:(?<errorMassage>.*?),THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason}
...