Logstash Необязательные поля - PullRequest
0 голосов
/ 17 октября 2018

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

Oct 17 08:41:33 host-name 2y40w: %SEC-6-IPACCESSLOGP: list 105 permitted tcp 1.2.3.4(17774) -> 0.0.0.0(22), 1 packet
Oct 17 13:32:26 host-name %SEC-6-IPACCESSLOGP: list 105 permitted tcp 1.2.3.4(56200) -> 0.0.0.0(22), 1 packet

Если я делаю регулярное выражение следующим образом:

   %{SYSLOGTIMESTAMP:log_server_timestamp} %{IPORHOST:cisco_host (%{DATA:uptime}:)? %{NOTSPACE:msgid}: \list %{NUMBER:acl} %{WORD:action} %{WORD:protocol} %{NOTSPACE:source}+\(%{DATA:src_port}\) \-> %{NOTSPACE:dest}+\(%{DATA:dest_port}\), %{NUMBER:packets}

С пробелом между:

(%{DATA:uptime}:)? %{NOTSPACE:msgid}:

Он успешно проанализирует журнал, включающий время безотказной работы, но не журнал без времени безотказной работы.

Без пробела, подобного:

(%{DATA:uptime}:)?%{NOTSPACE:msgid}:

Он проанализирует сообщение о том, чтоне включает время работы.

Я немного устала от своего регулярного выражения, поэтому надеялась, что кто-нибудь может помочь мне понять, почему это не так, поскольку мне действительно не нравится идея добавления еще одного уровня вложенностиОператоры if, когда условное поле, подобное этому, должно быть доступно в регулярном выражении.

edit:

также пытается:

(?<uptime>[ywd0-9]+):

Что не работает либо

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете заключить всю часть шаблона uptime + пробел с дополнительной группой:

%{SYSLOGTIMESTAMP:log_server_timestamp} %{IPORHOST:cisco_host}( %{DATA:uptime}:)? %{NOTSPACE:msgid}: \list %{NUMBER:acl} %{WORD:action} %{WORD:protocol} %{NOTSPACE:source}+\(%{DATA:src_port}\) \-> %{NOTSPACE:dest}+\(%{DATA:dest_port}\), %{NUMBER:packets}
                                                              ^^               ^^
...