Шаблон 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/ и оба они работают как шарм.
- \ [(. +) \]
- \ [+. \](.+)
Полная декларация шаблона выглядит так:
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
), пока это не так. Чтобы избежать специального использования обратной косой черты, вы должны избегать ее с другой обратной косой чертой. Так что в то время как настоящее регулярное выражение \[(.+)\]
а также \[.+\](.+)
, строки, которые вы должны использовать: ”\\[(.+)\\]”
а также ”\\[.+\\](.+)”
,
Кроме того, будьте осторожны с двойными кавычками, вы, вероятно, хотите "
, и не ”
,