Дополнительные поля 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})?" }
Я использовал это, теперь, если мы хотим, чтобы статические слова также стали необязательными, что делать?