syslog-ng.conf 监听远程服务器

syslog-ng.conf 监听远程服务器

我正在配置 3.5.6-2 版的 /etc/syslog-ng/syslog-ng.conf,通过如下配置监听 514 端口上的远程主机

#source s_src {
#   system();
#   internal();
#};
# If you wish to get logs from remote machine you should uncomment
# this and comment the above source line.
source s_net { tcp(ip(127.0.0.1) port(514)); udp(); };

但是当我注释掉 s_src 时,我认为它表明:

#source s_src {
#   system();
#   internal();
#};

由于配置错误,syslog-ng 无法启动。如果我只注释掉这些:

source s_src {
#   system();
#   internal();
};

它启动了,但不会记录来自本地主机的标准系统日志消息。我是否需要添加其他指令source s_src来让它在端口 514 上监听远程主机?

(配置中其他可能相关的行)

log { source(s_src); filter(f_syslog3); destination(d_syslog); };   
filter f_syslog3 { not facility(auth, authpriv, mail) and not filter(f_debug); };
destination d_syslog { file("/var/log/remotelogs/$HOST/syslog"); };

答案1

好的,在我的 syslog-ng 3.5.6-2 版本中(来自标准 Debian Jessie vanilla 软件包),您必须做几件事。首先,取消注释:

source s_src {
   system();
   internal();
};

然后将 s_net 行更改为:

source s_net { tcp(ip(0.0.0.0) port(514) max-connections (5000)); udp(); };

现在您必须修改一行以将远程主机 syslog 日志放在由主机名划定的某个位置,以便您可以确定哪个主机 syslog 是哪个,例如:

destination d_syslog { file("/var/log/remotelogs/$HOST/syslog"); };

或者,如果您希望将它们全部放在同一个文件中来分析单个文件,只需执行以下操作:

destination d_syslog { file("/var/log/remotelogs/syslog"); };

然后把它们放在一起,像这样:

#log { source(s_src); filter(f_syslog3); destination(d_syslog); };
log { source(s_net); filter(f_syslog3); destination(d_syslog); };

请注意,syslog 的日志条目现在引用了 S_NET 作为源,而不是 S_SRC。现在您可以重新启动 syslog-ng 并查看它是否正在监听:

/etc/init.d/syslog-ng restart
netstat -plunt | grep syslog-ng
tcp        0      0 0.0.0.0:514           0.0.0.0:*               LISTEN      26853/syslog-ng
udp        0      0 0.0.0.0:514             0.0.0.0:*                           26853/syslog-n

答案2

来源/目的地/等等是类对象结构在 syslog-ng 中。

如果您想接收远程消息,您只需创建一个使用 tcp()、udp() 插件的源对象,就像您所做的那样:

source s_net { tcp(ip(127.0.0.1) port(514)); udp(); };

s_net是源的名称。s_net除非您将其添加到日志路径,否则将不起作用。“将其添加到日志路径”意味着您将源链接到其他对象(例如目标);因此来自源的消息将通过您在日志路径中创建的管道。

您可以使用块将源链接到目标log,例如:

destination d_syslog { file("/var/log/$HOST/syslog"); };

log {
  source(s_net);
  destination(d_syslog);
};

s_src在配置中的某个log路径中使用,这就是为什么您不能将其注释掉的原因。如果您想同时接收远程和本地消息,请不要注释掉s_src。另一个例子:

log {
  source(s_src);
  source(s_net);
  destination(d_syslog);
};

您的配置中的指令具有误导性。

请注意,syslog-ng v3.5 相当旧。请考虑升级到当前版本,即 v3.20。

相关内容