Дополнительные поля Logstash в файле журнала

Я пытаюсь разобрать файл журнала с помощью grok

Каждая строка файла журнала имеет поля, разделенные запятыми:

13,home,ABC,Get,,Private, Public,1.2.3 ecc...

Я использую подобный матч: match => [ "message", "%{NUMBER:requestId},%{WORD:ServerHost},%{WORD:Service},...

Мой вопрос: могу ли я разрешить дополнительное поле? Иногда некоторые из полей могут быть пустыми ,,

Есть ли шаблон, который соответствует строке, подобной этой 2.3.5? (вид номера версии)

Ответы

Ответ 1

В нем база grok основана на регулярных выражениях, поэтому вы можете окружать шаблон с помощью ()?, чтобы сделать его необязательным - например (%{NUMBER:requestId})?,

Если у вас нет шаблона grok, который бы соответствовал вашим потребностям, вы всегда можете создать именованное извлечение, подобное этому: (?<version>[\d\.]+), который будет извлекаться в версию, строку, в которой есть любое количество цифр и точек.

Ответ 2

{"message" => "(% {TIMESTAMP_ISO8601})?. [(% {WORD: user_id})? - (% {NOTSPACE: имя_проекта})? * - (% {WORD: имя_хоста})? * - (% {DATA: api_name})?] (% {GREEDYDATA: thread})?] (% {WORD: log_level})?. * METHODNAME: (% {WORD: Method_name})?. * ВРЕМЯ ВЫПОЛНЕНИЯ: (% {INT: Method_time})?" }

Я использовал это, теперь, если мы хотим, чтобы статические слова также стали необязательными, что делать?