Шаблон rsyslog - ошибка синтаксического анализа в регулярном выражении

Я пытаюсь структурировать журналы с моего D-Link DAP-2310 на сервере rsyslog. У него нестандартный формат журнала, и я хочу исправить это с помощью регулярного выражения в шаблоне rsyslog. Когда я анализирую rsyslog.conf с помощью rsyslogd -N1, результат действительно удручает.

Элемент данных msg выглядит так AA:BB:CC:DD:EE] [app-name] log messageПервая часть - это MAC-адрес, где первая часть "[00:" "помещена в другой элемент данных, не спрашивайте, почему. Часть вторая "[имя-приложения]" - это приложение / экземпляр, отправляющий сообщение. Последняя часть "log message" - зарегистрированное действие.

Интересные части: i) имя приложения и ii) сообщение журнала.

Я проверил следующее регулярное выражение на http://www.rsyslog.com/regex/ и оба они работают как шарм.

  1. \ [(. +) \]
  2. \ [+. \](.+)

Полная декларация шаблона выглядит так:

template(name=”AP_tmpl” type=”list”) {   
    property(name=”timestamp”)    
    constant(value=” “)   
    property(name=”hostname”)
    constant(value=” “)   
    property(name=”msg” 
        regex.type=”ERE” 
        regex.submatch=”1”    
        regex.expression=”\[(.+)\]--end”
        regex.nomatchmode=”BLANK”
    )   
    constant(value=” “)
    property(name=”msg” 
        regex.type=”ERE”
        regex.submatch=”1”
        regex.expression=”\[.+\](.+)$--end”   
        regex.nomatchmode=”BLANK”
    )    
    constant(value=”\n“) 
}

Когда я разбираю файл conf он жалуется на escape-символы.

tobias@ubuntutest:~$ sudo rsyslogd -N1
rsyslogd: version 7.4.4, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: invalid character '"' in object definition - is there an invalid escape sequence somewhere? [try http://www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: invalid character '\' in object definition - is there an invalid escape sequence somewhere? [try http://www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: invalid character '.' in object definition - is there an invalid escape sequence somewhere? [try http://www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: invalid character '*' in object definition - is there an invalid escape sequence somewhere? [try http://www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: invalid character '\' in object definition - is there an invalid escape sequence somewhere? [try http://www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/41-AP.conf, on or before line 20: syntax error on token ']' [try http://www.rsyslog.com/e/2207 ]
rsyslogd: CONFIG ERROR: could not interpret master config file '/etc/rsyslog.conf'. [try http://www.rsyslog.com/e/2207 ]
rsyslogd: run failed with error -2207 (see rsyslog.h or try http://www.rsyslog.com/e/2207 to learn what that number means)

Я не могу понять, почему, регулярные выражения проверяются без каких-либо ошибок. http://www.rsyslog.com/e/2207 ничего не дает. Есть идеи?

1 ответ

Когда ты пишешь ”\[(.+)\]--end”, \[ ожидается, что это специальный символ (например, \n), пока это не так. Чтобы избежать специального использования обратной косой черты, вы должны избегать ее с другой обратной косой чертой. Так что в то время как настоящее регулярное выражение \[(.+)\] а также \[.+\](.+), строки, которые вы должны использовать: ”\\[(.+)\\]” а также ”\\[.+\\](.+)”,

Кроме того, будьте осторожны с двойными кавычками, вы, вероятно, хотите ", и не ,

Другие вопросы по тегам