Linux Destro 是:Centos 6.8
下面是 rsyslog.conf 的样子:
# cat /etc/rsyslog.conf
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template server-dc, "/scratch/rsyslog/%HOSTNAME%/messages.log"
authpriv.* ?server-dc
*.info,mail.none,authpriv.none,cron.none ?server-dc
$IncludeConfig /etc/rsyslog.d/*.conf
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
#*.* @elk-rsyslog:514
我要理解的一点是:
1)
$template server-dc, "/scratch/rsyslog/%HOSTNAME%/messages.log"
enter code here
因此,上面的行/scratch/rsyslog
是 rsyslog 服务器上的目录路径,我们在其中转发来自 unix 远程主机的所有日志,该主机在消息文件后面创建一个目录结构,如下所示:
/scratch/rsyslog/remot1-Ser1/messages.log /scratch/rsyslog/remot1-Ser2/messages.log
所以,这工作正常,但是同时我们也有很少的网络设备将网络日志以以下格式转发到同一位置:
/scratch/rsyslog/Sep/messages.log /scratch/rsyslog/Oct/messages.log
在上述网络日志的情况下,它在消息文件后面按月份名称创建目录因此,我正在 rsyslog 中寻找一种方法来为网络日志定义不同的路径,以便可以将/scratch/rsyslog/network
网络日志收集到单独的文件夹中,这背后的原因是,我正在将这些日志处理到 Elasticsearch,因此我对 unix 日志使用通配符,/scratch/rsyslog/*/messages.log
但这也包括被调用的通配符()的网络日志*
。
那么,有没有一种方法可以说明日志是否来自特定的远程主机或 IP 应该转到 rsyslog 服务器中的特定文件夹?
2)这里输入$template server-dc, "/scratch/rsyslog/%HOSTNAME%/messages.log"
什么是登录 服务器 DC由于这是另一个主机名,这是否有任何目的,或者我们可以考虑上述要求将其更改为相关的内容。
3)相同 服务器 DC也被包含到另一个配置参数中。
期望的
只是想知道是否有办法可以将类似系统、网络、防火墙的日志转发到单独的不同目录中,例如......
1 -/scratch/rsyslog/system/%HOSTNAME%/messages.log
2 - /scratch/rsyslog/network/%HOSTNAME%/messages.log
3 - /scratch/rsyslog/firewall/%HOSTNAME%/messages.log
答案1
您可以拥有任意数量的模板,并测试传入消息的主机名或 IP 地址。如果您的主机名结构良好,例如所有“系统”都以“sys”开头,例如 sys10 和 sysabc,则可以减少测试数量。
例如,
$template mysystems,"/scratch/rsyslog/system/%HOSTNAME%/messages.log"
$template mynets,"/scratch/rsyslog/network/%HOSTNAME%/messages.log"
$template myfirewalls,"/scratch/rsyslog/firewall/%HOSTNAME%/messages.log"
if $fromhost startswith "sys" then -?mysystems
& stop
if $fromhost startswith "net" then -?mynets
& stop
if $fromhost startswith "fw" then -?myfirewalls
& stop
该& stop
行停止进一步处理与前一行匹配的消息。您可以使用以下命令测试 IP 地址:
if $fromhost-ip startswith "192.168." then -?mynets
如果你想保留*.info,...
过滤器,可以修改上面的内容,例如:
if $fromhost startswith "sys" then {
*.info,mail.none,authpriv.none,cron.none -?mysystems
& stop
}
但请注意,如果您不想记录某些项目,则实际上应该在发件人处而不是在网络的这一端进行此过滤。发送消息只是浪费网络带宽,然后您将其过滤掉并丢弃。
查看广泛系统日志文档,注明您拥有的版本。