盒子外面系统日志会将所有内容转储到SystemEvents
Syslog 数据库内的表中(如果您使用提供的默认架构)。我想使用正则表达式将入站消息过滤到单独的数据库表中。
我已经玩过这个,但我很难找出实现此目的的最佳方法(甚至是一种有效的方法)。
在我的 rsyslog.conf 中:
$template wireless, \
"insert into RogueAPs \
(ReceivedAt, DeviceReportedTime, Facility, Priority, FromHost, Message) \
VALUES('%timegenerated%', '%timereported%', '%syslogfacility%', '%syslogpriority%', '%fromhost-ip%', '%msg%');", \
stdsql
if $msg contains 'subtype=wireless' then :ommysql:127.0.0.1,Syslog,dbusername,dbpassword;wireless
*.* :ommysql:127.0.0.1,Syslog,dbusername,dbpassword
这是我最近的尝试,但我陷入了困境。
(RogueAPs 表只是 rsyslog 附带的默认 SystemEvents 表的克隆)
版本信息:
shell# /usr/local/sbin/rsyslogd -v
rsyslogd 5.5.5, compiled with:
FEATURE_REGEXP: Yes
FEATURE_LARGEFILE: No
FEATURE_NETZIP (message compression): Yes
GSSAPI Kerberos 5 support: No
FEATURE_DEBUG (debug build, slow code): No
Atomic operations supported: Yes
Runtime Instrumentation (slow code): No
See http://www.rsyslog.com for more information.
答案1
从看一眼这教程,我看不出有什么区别。
但看看来自 rsyslog 的模板文档,根据参数的设置,似乎与 mysql 有所不同NO_BACKSLASH_ESCAPES
。
来自文档:
sql - format the string suitable for a SQL statement in MySQL format. This will
replace single quotes ("'") and the backslash character by their backslash-escaped
counterpart ("\'" and "\\") inside each field. Please note that in MySQL
configuration, the NO_BACKSLASH_ESCAPES mode must be turned off for this format to
work (this is the default).
stdsql - format the string suitable for a SQL statement that is to be sent to a
standards-compliant sql server. This will replace single quotes ("'") by two single
quotes ("''") inside each field. You must use stdsql together with MySQL if in MySQL
configuration the NO_BACKSLASH_ESCAPES is turned on.
答案2
不幸的是,rsyslog 文档在某些方面并不是非常完整或易于理解。过去几周我花了很大一部分时间研究 rsyslog/MySQL/regex 的东西。
您可以发布您尝试正则表达式匹配的日志行示例、您希望其进入的表的架构等吗?您发布的内容似乎应该有效...您想过滤掉什么?默认模式对您有用吗?
顺便说一句,我忍不住注意到您正在使用一个名为 RogueAPs 的表。我不知道您使用的是哪个供应商,但我有来自 Meru Networks 和 BlueSocket 控制器的身份验证日志消息的正则表达式规则。