1.1日志服务器rsyslog配置
在日志服务器上开启rsyslog服务,具体的操作配置如下:
1.开启514端口监听数据
修改/etc/rsyslog.conf文件,开启TCP/UDP514端口,即去除对应行首的注释符,结果如下图
2.创建日志接收模板
端口开了,仍需要告诉日志服务器如何记录收到的数据,同样在rsyslog.conf中找到GLOBAL DIRECTIVES字样(用注释符包裹),在其上方添加接收模板。格式如下:
$template RemoteLogs,"/var/log/[file_name]" * #[filename]为你选择存储的日志名称,也可以是路径加日志名称
*.* ?RemoteLogs
& ~
当然,在多台设备同时向服务器传送日志的情况下,对于存储日志的模板当然要根据发送方来定,下面列举一些变量来实现可变的[filename]:
%fromhost-ip% #日志文件来源主机ip
%PROGRAMNAME% #日志文件来源程序名称
%HOSTNAME% #日志文件来源主机名
%$YEAR% #当前年份
%$MONTH% #当前月份
%$DAY% #当前日
[filename] #常用的[filename]组合
%fromhost-ip%-%HOSTNAME%.log
%HOSTNAME%/%PROGRAMNAME%.log
%$YEAR%-%$MONTH%-%$DAY%.log
我们模块目前统一采用
/var/log/safetyLog/%HOSTNAME%
来存储不同安全设备的日志。
3.重启服务
在终端输入如下命令来重启rsyslog服务来使配置修改生效(每次修改rsyslog.conf都需要重启服务)
sudo service rsyslog restart
重启完毕后,在终端利用netstat命令测试服务是否开启。
sudo netstat -tulpn | grep rsyslog
得到的结果应该如下所示:
1.2 日志客户端(安全设备)rsyslog配置
在安全设备上开启rsyslog服务,具体的配置如下:
1.设定日志发送地址
同样打开/etc/rsyslog.conf,在文件底部添加以下语句:
*.* @[server_ip] #server_ip用你所装的日志服务器的ip地址替换,此种方法采用UDP发送,可以通过将@改成@@更换TCP
此时同样的方式重启rsyslog服务即可实现日志的转发功能,但是这样的话该安全设备上所有的日志都会发送到日志服务器,我们需要通过进一步配置使得只让指定程序产生的日志发送过去。
2.指定程序日志转发
首先指定安全设备生成日志存储的路径到某一路径,本模块中规定统一在/var/log/safetyLog/*,接下来为该程序对应日志设计module(module放置在之前TCP/UDP514端口的module下即可):
module(load="imfile" PollingInterval="5")
input(type="imfile"
File="/var/log/safetyLog/*"
Tag="[your_tag]"
Severity="error"
Facility="local7"
实际上我们的应用中对Tag与Severity并不关心,最后在rsyslog.conf底部将之前的语句换成下面:
local7.* @[server_ip]
重启rsyslog服务
1.3 关于rsyslog配置的一些可能出现的问题与解决方案
· rsyslog服务器删除、修改了接收到的日志文件之后接收不到日志了。
经实际测试发现当清除日志服务器下收集到的日志文件和修改收集到的日志文件中的内容(例如清除)后,需要重启rsyslog服务才能再次接收日志
即在rsyslog服务器上执行以下命令:
sudo service rsyslog restart
重启之后客户端有日志更新会再次被服务器接收。
ps:除非服务器的日志文件过大影响内存,否则不建议删除源日志文件,一般一个月清理一次即可
· 用ubantu14.04版本无法通过rsyslog传输日志到ubantu16.04
经过实际测试这两个系统版本无法互传rsyslog日志,建议升级到ubantu16.04再进行传输
·服务器接收日志中有重复内容
rsyslog传输日志的时候会将日志中整个文件的内容传输过去,因此在后续客户端的日志文件有新的追加内容时,会连同上次发送的内容(追加之前的内容)一起传输过去。这种情况通常发生在手动打开文件写入内容并用wq命令保存的情况下。