我想将sshd
日志条目中的源 IP 地址保存到 mysql 数据库中syslog-ng
。目前,我定义了一个过滤器,它匹配所需日志条目的子字符串。
我可以将日志条目完整地保存到数据库中,但是$MSG
系统日志条目的一部分包含很多我不想要的额外数据。有没有办法将系统日志条目的字段“拆分”为仅将 IP 地址写入数据库?
这是我的配置:
filter f_sshd
{
# (log entry) Sep 5 14:59:20 myhost4 sshd Starting session: shell on pts/0 for rbackup from 10.120.192.25 port 36894 id 0
match("Starting session:" value ("MESSAGE") );
};
destination d_sshd
{
sql( type(mysql)
username("xxxxx")
password("xxxxxxx")
database("syslog")
host("localhost")
table("ssh")
columns("host", "facility", "priority", "level", "pid", "tag", "timestamp", "program", "msg")
values("$HOST", "$FACILITY", "$PRIORITY", "$LEVEL", "$PID", "$TAG","$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC","$PROGRAM", "$MSG")
indexes("timestamp", "host", "program", "pid", "message"));
};
log
{
# s_stunnel is defined in syslog-ng/conf.d/stunnel.conf
source(s_stunnel);
filter(f_sshd);
destination(d_sshd);
};
您可以使用syslog-ng-patterndb创建解析器来提取部分消息。
创建 XML 文件以定义解析器 (
/etc/syslog-ng/template_sshd.xml
):然后在你的
syslog-ng.conf
:定义解析器:
在您的日志指令中调用解析器:
在目标中使用解析器中的变量
SSH_CLIENT_ADDRESS
:单元测试运行:
应该返回:
改编自此链接:https ://gist.github.com/linickx/8002981
编辑以下关于您的评论:
像这样更改 XML 中的模式:
哪个返回:
关于模式解析器的进一步阅读:https ://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.16/administration-guide/72