Мне нужно сопоставить эту запись
2015/10/30 23:58:21 pid 22223 testuser@testserver.example.com 192.168.0.1 [p4/2012.2/LINUX26X86_64/536738] 'test-monitor show'
Чтобы соответствовать этому, я написал это Regex
P4_DATE (?>\d\d){1,2}\/(?:0[1-9]|1[0-2])\/(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
P4_TIME (?:2[0123]|[01]?[0-9])\:(?:[0-5][0-9])\:(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
P4_PID \b(?:[1-9][0-9]*)\b
P4_USER \b\w+\b
P4_HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
P4_IP (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
а затем в целом
P4_MATCH %(P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} [%{DATA:p4version}] \'%{DATA:p4action}\'" }
а затем сопоставить через
match => [ "message", "%{P4_MATCH}" ]
Но по-прежнему получаю "_beats_input_codec_plain_applied, _grokparsefailure"
Я не эксперт по регулярным выражениям, но очень ценю любую помощь.
Я не вижу конкретной проблемы, но взгляните на https://grokdebug.herokuapp.com/ - создавайте шаблоны по одному полю за раз и смотрите, какой шаг приводит к сбою сопоставления.
У вас есть синтаксическая ошибка в p4date
там, где на поле стоит скобка вместо фигурной скобки, она должна быть %{P4_DATE:p4date}
.
Вам нужно избегать квадратных скобок для p4version
который должен быть \[%{DATA:p4version}\]
Есть лишние персонажи " }
после p4action
которые нужно удалить.
ЭТОТ
P4_MATCH %(P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} [%{DATA:p4version}] \'%{DATA:p4action}\'" }
ДОЛЖЕН БЫТЬ ЭТОМ
P4_MATCH %{P4_DATE:p4date} %{P4_TIME:p4time} pid %{P4_PID:p4pid} %{P4_USER:p4user}\@%{P4_HOSTNAME:p4client} %{P4_IP:p4remoteclient} \[%{DATA:p4version}\] \'%{DATA:p4action}\'
Интересный подход. Библиотека Grok, поставляемая с Logstash, имеет некоторые готовые шаблоны чтобы помочь вам избежать создания больших регулярных выражений, как вы это делаете. Возможно, вам больше повезет повторно использовать их разработки, чем создавать свои собственные.