我想将syslog-ng
其他机器(基于 Debian)上的相同配置(EPEL 3.2.5)添加到 CentOS 机器(EL6)中。目的是将 JSON 格式的事件日志添加到单个文件中以供进一步处理:
# /etc/syslog-ng/syslog-ng.conf
# (...)
source s_sys {
file ("/proc/kmsg" program_override("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
# (...)
我添加的文件/etc/syslog-ng/conf.d
:
destination d_json { file("/var/log/all_syslog_in_json.log" perm(0666) template("{\"@timestamp\": \"$ISODATE\", \"facility\": \"$FACILITY\", \"priority\": \"$PRIORITY\", \"level\": \"$LEVEL\", \"tag\": \"$TAG\", \"host\": \"$HOST\", \"program\": \"$PROGRAM\", \"message\": \"$MSG\"}\n")); };
log { source(s_sys); destination(d_json); };
启动时,syslog-ng -Fevd
我收到日志事件并得到以下输出:
Incoming log entry; line='<86>Feb 6 08:49:00 sshd[7271]: pam_unix(sshd:session): session closed for user root'
Filter rule evaluation begins; filter_rule='f_kernel'
Filter node evaluation result; filter_result='not-match', filter_type='facility'
(... all the evaluations ...)
Filter node evaluation result; filter_result='not-match', filter_type='facility'
Filter rule evaluation result; filter_result='not-match', filter_rule='f_cron'
EOF occurred while reading; fd='9'
Syslog connection closed; fd='9', client='AF_UNIX(anonymous)', local='AF_UNIX(/dev/log)'
Closing log transport fd; fd='9'
此配置在其他机器上运行良好,因此我认为这是我的发行版或版本特有的问题。不过,在继续之前,我想先确认一下(syslog-ng 的更新必须非常手动)
答案1
syslog-ng 3.2 非常旧。较新的 syslog-ng 版本也支持 JSON 格式。
我们的软件包维护者创建适用于 syslog-ng 3.6 的 EPEL 6 软件包您可以尝试一下。有关将消息格式化为 JSON 的详细信息,请参阅syslog-ng 文档。
问候,
罗伯特