我有许多 Cisco/JunOS 路由器和交换机将日志发送到我的 Debian 服务器,该服务器使用rsyslogd.
如何rsyslogd根据源 IP 地址配置将这些路由器/交换机日志发送到特定文件?我不想用这些条目污染一般系统日志。
例如:
/var/log/net/chicago.log. /var/log/net/dallas.log.APF-3-RCV_UNSUPP_MSG消息而不记录它们/var/log/net/firewall.log最后,这些日志应该每天轮换最多 30 天并进行压缩。
在我的配置中,我有 rsyslog 负责跟踪/home/user/my_app/shared/log/unicorn.stderr.log使用imfile. 使用 TCP 将内容发送到另一个远程日志服务器。
当日志文件轮换时,rsyslog 停止向远程服务器发送数据。
我尝试重新加载 rsyslog,发送 HUP 信号并完全重新启动它,但没有任何效果。
我发现实际有效的唯一方法是肮脏的:
kill -9 rsyslog 并重新开始。有没有合适的方法让我在不接触 rsyslog 内部的情况下做到这一点?
Rsyslog 文件
$ModLoad 标记 $ModLoad imudp $ModLoad imtcp $ModLoad imuxsock $ModLoad imklog $ModLoad 文件 $template withoutTimeFormat,"[环境] [%syslogtag%] -- %msg%" $WorkDirectory /var/spool/rsyslog $InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $InputFileTag unicorn-stderr $InputFileStateFile stat-unicorn-stderr $InputFileSeverity 信息 $InputFileFacility local8 $InputFilePollInterval 1 $InputFilePersistStateInterval 1 $InputRunFileMonitor # 转发到远程服务器 如果 $syslogtag 包含 'apache-' 那么 @@my_server:5000;WithoutTimeFormat :syslogtag, …
在来自 EC2 实例的/var/log/messages中有很多行,例如:
<date/timestamp> ip-<IP_HERE> ec2net: [get_meta] Trying to get http://169.254.169.254/latest/meta-data/network/interfaces/macs/MAC_ADDR/local-ipv4s
<date/timestamp> ip-<IP_HERE> ec2net: [rewrite_aliases] Rewriting aliases of eth0
<date/timestamp> ip-<IP_HERE> dhclient[2187]: XMT: Solicit on eth0, interval 112321ms.
<date/timestamp> ip-<IP_HERE> dhclient[2187]: XMT: Solicit on eth0, interval 111231ms.
....
and more XMT: Solicit messages (hundreds more)
Run Code Online (Sandbox Code Playgroud)
为什么会有数百条这样的请求消息,这XMT: Solicit on eth0意味着什么?我应该如何解释这个?
这仅仅是 DHCP 请求(或许多请求)的日志吗?我以前没见过“XMT”。
在我的一台服务器 Debian 9 上,没有来自sshdin 的输出/var/log/auth.log。事实上,如果我这样做ag sshd的/var/log,它只是不会出现。里面唯一的东西auth.log是systemd-logind. 事实上,几乎所有的日志消息都来自 systemd 是很可疑的。只有零星的少数来自其他事物。
这是我的/etc/rsyslog.conf(减去评论)(它应该是默认值):
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\ …Run Code Online (Sandbox Code Playgroud) 我正在将我们的 rsyslog 配置从旧服务器迁移到新服务器,并认为我会利用这个机会整理我们的配置。旧配置使用“遗留”模板定义,模板上的 rsyslog 文档建议用新模板语法替换此类定义,这就是我尝试做的。
我根本无法让它工作,而且我在尝试启动 rsyslog 时遇到的错误毫无意义。因此,似乎我从根本上误解了 rsyslog 文档,或者 RHEL6 中包含的 rsyslog 包有些有趣。
这是我要更新的旧模板:
$template secureTemplate,"INSERT INTO var_log_secure (received_at, source_ip, source_hostname, logged_at, severity, service, message, severity_int, syslogtag) VALUES ('%timegenerated:::date-rfc3339%', '%fromhost-ip%', '%hostname%', '%timereported:::date-rfc3339%', '%syslogseverity-text%', '%programname%', '%msg%', '%syslogseverity%', '%syslogtag%')",STDSQL
Run Code Online (Sandbox Code Playgroud)
这是我在阅读 rsyslog 文档后尝试使用新语法中的相同模板:
template(name="secureTemplate" type="string" option.stdsql="on"
string="INSERT INTO var_log_secure (received_at, source_ip, source_hostname, logged_at, severity, service, message, severity_int, syslogtag) values ('%timegenerated:::date-rfc3339%', '%fromhost-ip%', '%hostname%', '%timereported:::date-rfc3339%', '%syslogseverity-text%', '%programname%', '%msg%', '%syslogseverity%', '%syslogtag%')"
)
Run Code Online (Sandbox Code Playgroud)
这些是我在 rsyslog 启动时遇到的错误:
rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="4491" x-info="http://www.rsyslog.com"] start
rsyslogd-3000:unknown priority name …Run Code Online (Sandbox Code Playgroud) 我已经使用 local0创建了一个自定义日志(PHP 将日志条目发送到rsyslog)。它使用新的自定义文件 ( /var/log/sea.log)。问题是日志被发送到/var/log/sea.log, /var/log/messages和/var/log/syslog。我如何防止这种情况发生?我只需要将日志发送到/var/log/sea.log.
/etc/rsyslog.conf:
# /etc/rsyslog.conf Configuration file for rsyslog.
#
# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#################
#### MODULES ####
#################
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support
#$ModLoad immark # provides --MARK-- message capability
# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
###########################
#### …Run Code Online (Sandbox Code Playgroud) 背景:远程日志聚合被视为提高安全性的一种方式。通常,这解决了危害系统的攻击者可以编辑或删除日志以阻碍取证分析的风险。我一直在研究常用日志工具中的安全选项。
但是感觉有些不对劲。我看不到如何配置任何常见的远程记录器(例如 rsyslog、syslog-ng、logstash)来验证传入的消息确实来自声称的主机。如果没有某种策略约束,一个日志发起者可以代表另一个日志发起者伪造消息。
rsyslog 的作者似乎对验证日志数据发出警告:
最后要提醒一句:transport-tls 保护发送方和接收方之间的连接。它不一定能抵御存在于消息本身中的攻击。特别是在中继环境中,消息可能源自恶意系统,该系统将无效的主机名和/或其他内容放入其中。如果没有针对此类内容的配置,这些记录可能会显示在接收者的存储库中。-transport-tls 不能防止这种情况(但它可能会有所帮助,正确使用)。请记住,syslog-transport-tls 提供逐跳安全性。它不提供端到端的安全性,也不验证消息本身(只是最后一个发送者)。
所以接下来的问题是:什么是好的/实用的配置(在您选择的任何常用日志工具中——rsyslog、syslog-ng、logstash 等),它提供了一定程度的真实性?
或者...如果没有人验证日志数据,那为什么不呢?
——
(旁白:在讨论/比较时,使用RFC 5424 中的一些图表或术语可能会有所帮助:第 4.1 节:部署场景示例——例如“发起者”与“中继”与“收集者”)
我有 DMZ 主机转发到 DMZ 系统日志,然后将所有系统日志消息转发到内部系统日志服务器。它在大多数情况下运行良好,但内部系统日志主机消息似乎都来自 DMZ 系统日志,即它丢失了原始主机名。
{Hosts} -> {DMZ syslog: openbsd: syslog v 1.17} -> {Internal Syslog: rsyslog v3}
如何保留主机名?
谢谢!
我需要将 Nginx 访问和错误日志重定向到远程系统日志服务器。从http://nginx.org/en/docs/syslog.html我看到我可以做到:
error_log syslog:server=192.168.1.1;
Run Code Online (Sandbox Code Playgroud)
但是我需要重定向到特定的 TCP(不是 UDP!)端口,我尝试了:
error_log syslog:server=192.168.1.1:3000;
Run Code Online (Sandbox Code Playgroud)
但它没有通过。如何向 Nginx 指定端口应该是 TCP 而不是 UDP?
非常感谢!
我想记录我的应用程序,以便将其日志写入自己的日志文件中。我创建了日志文件并将其保存在下面,/etc/rsyslog.d但我的应用程序没有创建/写入指定的文件。但是,一旦我重新加载 rsyslog,下次我的应用程序运行时就会有日志条目。
我将我的应用程序打包到 RPM 中,以便在必要时编写安装后脚本。这是通过安装后脚本处理此问题的正确方法吗?
if $programname == 'serf' then /var/log/serf.log
& ~
Run Code Online (Sandbox Code Playgroud)
发送pkill -HUP rsyslog有效,但我不确定这是否会在其他程序进行日志记录时对它们造成任何问题。