我想在一个集中式服务器上配置 rsyslog,以便所有客户端的日志都存储在一个地方,现在我遇到的问题是我不知道如何实现 rsyslog,以便它根据客户端机器上的程序创建日志,例如“httpd”等,并将它们保存在不同的文件中,即“/var/log/httpd.log”,当它将日志发送到远程服务器时,文件应该保存为“/var/log/ip-address of host/httpd.log”我有这两个问题
- 应根据程序创建日志
- 当日志被传输到远程服务器时,它们应该根据程序进行存储,并且不同主机的目录应该不同。
希望我的问题已经表达清楚了。请帮忙。
为了创建基于程序的日志,我相信我必须在客户端使用类似的东西
if $programname == 'httpd' and $syslogseverity <= '6' then /var/log/httpd.log
if $programname == 'httpd' and $syslogseverity <= '6' then ~
我也发现了这个问题,但它并没有完全解决我的问题
答案1
您需要首先配置 rsyslog 服务器以便能够接收来自客户端的消息
编辑服务器的 rsyslog 配置文件并创建或确保存在以下行:
$ModLoad imuxsock
$ModLoad imklog
# provides UDP syslog reception. For TCP, load imtcp. For TCP use InputServerRun 514
$ModLoad imudp
# This will save the log file is a separate directory for each client's IP
$template FILENAME,"/var/log/%fromhost-ip%/syslog.log"
#Create a rule for each application you need to filter, ie: httpd messages
$template HTTPD,"/var/log/%fromhost-ip%/httpd.log"
#Create a separate log rule for the specific application
if $programname == 'httpd' then ?HTTPD
&~
#Dump all remaining messages that do not match the filters created into one file
*.* ?FILENAME
之后,您需要转到每个客户端并将以下行添加到 rsyslog.conf 文件:
$ModLoad imuxsock
$ModLoad imklog
# Provides UDP forwarding. For TCP use @@server_ip
*.* @server_ip:514
您应该已经准备好了。客户端发送到服务器的所有内容都将使用您创建的规则进行过滤,并且消息将根据您在服务器端制作的模板保存到每个客户端 IP 地址文件夹中的文件中。