2016-12-06 2 views
1

Я хочу найти выражение grok для этого, INFO: 200000 пакетов. Текущий пакет - класс com.navtech.kernel.flat.FlatCombo [Loader] [tstamp: 1866 time: 1851.4 (30:51) split: 03.2] [Память: 3.320G всего: 22.20G бесплатно: 18.88G]grok regex pattern соответствует

Я пробовал

\ A (?:% {LOGLEVEL: level})% {GREEDYDATA: message} \ s (?:% {JAVACLASS: caller_class}) \ s + ([% {WORD: loglevel}] \ s +) + ([% {DATA: ts}] \ s +) + ([% {DATA: mem}])

, но теперь мне не хватает данных «Память:» и «всего:», так как буду ли я писать для этого регулярное выражение?

+0

значит, вы хотите, чтобы ВГА e все 3: 'Память: 3.320G всего: 22.20G бесплатно: 18.88G',' 3.320G' и '22.20G'? Прямо сейчас у вас есть 1 'mem':' "mem": [ "Память: 3.320G всего: 22.20G бесплатно: 18.88G" ] ' –

+0

Или вы хотите удалить память' mem' и получить только '' ": [" 3.320G "]' и '" total ": [" 22.20G "]'? –

+0

Спасибо @ WiktorStribiżew, все 3 были бы в порядке, но я не мог понять, использовать 3.320 без G –

ответ

0

Вы можете использовать

^(?:%{LOGLEVEL:level}):\s*%{DATA:message}\s*(?:%{JAVACLASS:caller_class})\s+\[%{WORD:loglevel}\]\s+(\[%{DATA:ts}\]\s+)+(\[\s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?\]) 

Где %{DATA:mem} заменяются \s*\S+\s+%{BASE10NUM:memory}\S*\s+\S+\s+%{BASE10NUM:total}.*?:

  • \s*\S+\s+ - 0+, 1+ пробельных, кроме пробельных символов и 1+ пробельных (мы пропуск Memory:)
  • %{BASE10NUM:memory}\S* - значение памяти, состоящее из числа + ноль или более символов без пробелов после номера
  • \s+\S+\s+ - 1+, 1+ пробелы, кроме пробельных символов и 1+ пробелы (мы пропускающие total:)
  • %{BASE10NUM:total} - total значение, которое представляет собой число
  • .*? - любые символы 0+ до первого ]

Смотрите тестовый экран:

enter image description here

+0

Спасибо, я попробовал то же самое, но я немного изменил его. '^ (?:% {LOGLEVEL: level}): \ s% * {ДАННЫЕ: сообщение} \ s * (?:% {JavaClass: caller_class}) \ s + \ [% {СЛОВО: LogLevel} \] \ s + (\ [% {ДАННЫЕ: тс} \] \ s +) + (\ [\ s * \ S + \ s +% {NOTSPACE: used_memory} \ s + \ S + \ s +% {BASE10NUM: total_memory}. *? \]) ' , но когда я меняю NOTSPACE в used_memory с BASE10NUM I «Не получается совпадение, что вы думаете о проблеме? –

+0

Я обновляю ответ. Используйте '^ (?:% {LOGLEVEL: level}): \ s *% {DATA: message} \ s * (?:% {JAVACLASS: caller_class}) \ s + \ [% {WORD: loglevel} \] \ s + (\ [% {ДАННЫЕ: тс} \] \ S +) + (\ [\ S * \ S + \ S +% {BASE10NUM: память} \ S * \ S + \ S + \ S +%.? {BASE10NUM: всего} * \ ]) ' –

+0

И если вам также нужно сохранить' mem', используйте '^ (?:% {LOGLEVEL: level}): \ s *% {DATA: message} \ s * (?:% {JAVACLASS: caller_class}) \ s + \ [% {WORD: loglevel} \] \ s + (\ [% {DATA: ts} \] \ s +) + (\ [\ s * (? \ S + \ s +% {BASE10NUM: memory} \ S * \ s + \ S + \ s +% {BASE10NUM: total}. *?) \ S * \]) ' –

Смежные вопросы