我的客户端机器有 syslog-ng 而我的远程机器有 rsyslog 配置。 我的服务器/远程机器管理着许多客户端,我需要区分哪台机器正在发送哪些日志。 通常我会在服务器端使用 syslog-ng,但这些机器并不意味着拥有它们。 还想提一下,它不适用于 apache 或 web 服务器,只是物理机器。
在客户端
尝试更改和添加不同的选项或将它们分别更改为是/否。
options {
keep_hostname(yes);
create_dirs(no);
use_dns(no);
};
例如:keep_hostname 为 no,它有效,但只有当我将主机名更改为机器的 ip 地址时。这不是我想要的。
使用模板
template("$(ISODATE) $(FULLHOST_FROM) $(SOURCEIP) $(HOST) $(HOSTNAME) ${PROGRAM}: ${MESSAGE}\n")
输出:
day time localhost abc[ID] .source.s_local SourceIP=127.0.0.1 localhost localhost (root) CMD (xyz.conf)#ID
这不是我想要的输出,当我想要它代替“主机”时,它正在消息部分打印,我不明白源 ip 是环回地址。
使用结构化日志记录
rewrite r_sourceip{
set('${SOURCEIP}' value(HOST));
};
log { source(s_local); rewrite(r_sourceip);destination(d_syslog_tcp); };
输出: 并且 ip 在日志中显示为环回地址而不是机器 ip。
day date time 127.0.0.1 syslog-ng.service: Succeeded.
尝试在我的客户端上安装 rsyslog 但它不起作用
sudo add-apt-repository ppa:adiscon/v8-stable
sudo apt-get update
sudo apt-get install rsyslog
我一直遇到很多错误,由于操作系统版本或类型的不同,修复它们是不可能的。
add apt repository command not found
wget command not found
在服务器端
使用模板 它使用客户端的主机名创建一个文件夹,并将日志存储在该特定文件夹中。 不是我想要的解决方案。
$template DynaFile,"/var/log/%FROMHOST-IP%/%syslogfacility-text%.log"
*.* -?DynaFile
我希望日志这样显示
day date time `client's ip address` syslog-ng.service: Succeeded.
有人能给我建议一个解决方案吗?为什么我一直把环回地址作为我客户的 ip?