Как переместить часть строки после точного слова в другое поле в logstash? - PullRequest
0 голосов
/ 04 мая 2019

Давайте представим, что у меня есть файл журнала, подобный следующему:

My custom exception ST: java.lang.RuntimeException: Text of this dummy err.

Моя конечная цель - поместить все после ST: в новое вызываемое поле ST и удалить ST:.

Я пытаюсь использовать шаблон, но он не работает.

filter {
  grok {
    match => { "message" => "(?<newField>(?<=ST)(?s)(.*$))" }
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

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

^My custom exception ST: %{GREEDYDATA:ST}

Или более общий:

%{GREEDYDATA} \bST\b: %{GREEDYDATA:ST}

Всегда старайтесь использовать определенные регулярные выражения.

0 голосов
/ 04 мая 2019

Грок - на основе библиотеки регулярных выражений Онигурума . Чтобы . соответствовал любому символу с регулярным выражением Oniguruma , вам нужно передать (?m) встроенный модификатор, а не (?s) (как в PCRE и некоторых других движках регулярных выражений).

Поместив (?<=ST) положительный взгляд в указанную группу захвата, вы должны ST появиться непосредственно перед текущим местоположением, но у вас есть ST и двоеточие сразу после, а затем пробел. Имеет смысл просто переместить ST: из названной группы :

"(?m)ST: (?<newField>.*)"
 ^^^^^^^^

ST: и пробел будут сопоставлены и использованы, группа newField будет содержать остаток строки в нем.

...