syslog-ng 未写入文件

syslog-ng 未写入文件

我是 syslog-ng 的新手,想要测试从外部设备写入系统日志。外部设备显示它已“连接”到端口 516 上的系统日志。但是,在我的 CentOS7 主机上,没有任何内容写入日志文件(现在 /var/log/messages 中出现错误)。我尝试远程登录到 localhost:516 并转储一些文本(作为测试),但任何地方都没有记录任何内容。 netstat 确认 syslog 正在侦听 tcp 516。

我的配置如下:

source s_test {
    system()
    internal()
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

我的配置有错误吗?

答案1

存在几个错误。对于其中之一system()internal()需要终止于;

source s_test {
    system();
    internal();
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

当手动启动时,这会产生新的错误和警告syslog-ng(来自的消息systemd对于 Centos 7 上的调试毫无用处):

# syslog-ng -F -p /var/run/syslogd.pid
WARNING: Configuration file has no version number, assuming syslog-ng 2.1 format. Please add @version: maj.min to the beginning of the file to indicate this explicitly;
...
Error parsing source, source plugin system not found in /etc/syslog-ng/syslog-ng.conf at line 16, column 5:

system();
^^^^^^

我们可以通过包含默认 syslog-ng配置文件中的语句来纠正这些问题:

@version:3.5
@include "scl.conf"
source s_test {
    system();
    internal();
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

现在syslog-ng开始:

# syslog-ng -F -p /var/run/syslogd.pid
...

然而,logger(1)从另一个终端测试失败;日志 /var/log/test报错Invalid frame header

# logger --server 127.0.0.1 --tcp --port 516 foo

这可以通过使用network代替来纠正syslog

@version:3.5
@include "scl.conf"
source s_test {
    system();
    internal();
    network(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

不过我不知道你的远程设备是否syslog需要 network

相关内容