Доброго времени суток
часть rsylog.conf:
$ModLoad omlibdbi
$template oracleformat,"insert into syslog(datetime,host,program,pid,message,facility,level1) values('%timereported:1:19:date-rfc3339%%timereported:27:32:date-rfc3339%','%HOSTNAME%','%programname%','%PROCID%','%msg:::space-cc%','%syslogfacility-text%','%syslogseverity-text%')",SQL
*.* :omlibdbi:;oracleformat
Т.е. все логи пишутся в удалённую БД. После подключения очередного хоста в локальном логе появилось:
Jun 4 22:50:59 vm-syslog rsyslogd: db error (917): 917: ORA-00917: missing comma
После этого rsyslog начал постепенно есть память. Т.е. он посчитал, что база временно в дауне и каждые 2,5 мин повторял попытку записать лог. Накапливая поступающие логи в памяти
Запустил rsylogd в foreground с дебагом ( rsylogd -c5 -dn ), увидел что проблемное сообщение содержит одинарные кавычку.
Jun 4 23:17:22 vm-xx-mail postfix/smtpd[23918]: warning: Illegal address syntax from xxx-xxxxxxxx.xxxxxxxxx.xxx[xxx.xxx.xxx.xxx] in RCPT command: <'x.xxxxx@xx-xxx.xx'>
Логично, одинарные кавычки меняют sql запрос из template, делая его некорректным.
В template частично экранируется msg с помощью msg::space-cc, но эта дирертива вырезает только asci с кодами до 32 включительно, а у ' код - 0x27
Можно ли экранировать и кавычку тоже?