我是 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
。