Сопоставление с образцом с помощью Grok в Apache NiFi

Я пытаюсь прочитать данные журнала в Apache NiFi, используя grok, но не могу получить желаемый результат. вот мои образцы данных:

[2019-07-16 22:20:16] local.INFO: news.index {"mobile":"959404576540","message":Mozilla/5.0 (Linux; Android 8.0.0; ATU-L42 Build/HUAWEIATU-L42; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 Mobile Safari/537.36 a/2.7.0}

Я пробовал использовать следующее выражение, но у меня это не сработало.

%{SYSLOG5424SD}%{JAVACLASS}: %{JAVACLASS} {%{QS}:%{QS},%{QS}:%{QS}} 

кто-нибудь, пожалуйста, помогите мне, как я извлекаю 2019-07-16 22:20:16, 959404576540, Mozilla/5.0 (Linux; Android 8.0.0; ATU-L42 Build/HUAWEIATU-L42; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 Mobile Safari/537.36 a/2.7.0 из приведенных выше данных.

Изменить:

Ответ @Emma работает, но если мои данные содержат какие-либо нулевые значения, он не работает. Например:

[2019-07-16 22:20:16] local.INFO: news.index {"mobile":"8765453673","message":null}

Заранее спасибо.


person ROOT    schedule 17.07.2019    source источник


Ответы (1)


Это выражение,

\[([^]]+?)\](.*?)"mobile":"\s*(\d+)\s*"\s*,\s*"message"\s*:\s*([^}]*?)\s*\}

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


Выражение объясняется в верхней правой панели этой демонстрации, если вы хотите изучить / упростить / изменить его.

person Emma    schedule 17.07.2019
comment
он работает хорошо, но если мои данные содержат какое-либо значение null, это не работает ... я обновляю свой вопрос. пожалуйста, посмотрите. - person ROOT; 17.07.2019