环境说明
日志服务器为鲲鹏云虚拟机,搭载统信v20 sp2服务器版操作系统,客户端使用的配置与服务器相同。
配置 Rsyslog 服务器
统信服务器操作系统标准化安装的Rsyslog 守护程序是自动安装的。如果你的系统中没有安装 Rsyslog,你可以根据你的系统发行版执行如下之一的命令去安装这个服务。运行这个命令必须有 root 权限。
一、手动安装并启动服务(已安装则跳过):
1.在基于 Debian 的发行版中:
sudo apt-get install rsyslog
2.在基于 RHEL 的发行版中,如 CentOS:
sudo yum install rsyslog
之后启动该Rsyslog服务
1.在新的使用 systemd 的 Linux 发行版中启动服务:
service rsyslog start
或
/etc/init.d/rsyslog start
2.在老的使用 init 的 Linux 发行版中启动服务:
systemctl start rsyslog.service
二、修改配置文件
sudo vi /etc/rsyslog.conf
为了允许在 UDP 的 514 端口上接收日志信息,找到并删除下列行前面的井号(#)以取消注释。缺省情况下,UDP 端口用于 syslog 去接收信息。
$ModLoad imudp
$UDPServerRun 514
为了启用 TCP 协议去接受日志信息,打开 /etc/rsyslog.conf 文件并删除如下行前面的井号(#)以取消注释。这将允许 rsyslog 守护程序去绑定并监听 TCP 协议的 514 端口。
$ModLoad imtcp
$InputTCPServerRun 514
在 rsyslog 上可以同时启用两种协议
取消#表示开启两种协议
三、配置解析日志模板
在接收入站日志信息之前,你需要去创建一个 rsyslog 守护程序解析日志的新模板,这个模板将指示本地 Rsyslog 服务器在哪里保存入站的日志信息。在 GLOBAL DIRECTIVES行之前以如下示例去创建一个合适的模板。
由于我这边的需求是将所有的客户端分IP保存,所以我选择添加如下模板:
$template IpTemplate,"/data/backlog/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
服务端在/etc/rsyslog.conf 里添加解析日志模板
在此对该模板进行简单解释:
第一行: template IpTemplate(这里“IpTemplate” 字符串可以为任何其他的描述性的名称),指令使rsyslog后台进程将日志消息保存在本地文件系统的 /data/backlog/ 目录的文件中,之后的是以客户端IP命名的日志文件名字:%FROMHOST-IP% ,变量中可以在输出文件名中使用的其它变量还有:%syslogseverity%、%syslogfacility%、%timegenerated%、%HOSTNAME%、%syslogtag%、%msg%、%FROMHOST-IP%、%PRI%、%MSGID%、%APP-NAME%、%TIMESTAMP%、%$year%、%$month%、%$day%。
第二行:表示了我们将Remote模板应用到所有接收到的日志上,如果你想要的话,也可以使用下面的模式对特定的设备或严重性级别使用新的模板直接来记录日志消息。
[facility-level].[severity-level] ?RemoteLogs
例如:
将全部优先级别的所有内部用户验证消息指定为RemoteLogs模板:
authpriv.* ?RemoteLogs
第三行: 符号"& ~"表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入。如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了两次。使用该规则的另外一个结果就是syslog服务器本身的日志消息只会被以该机器主机名命名的专有文件中。
三、重启服务
为了让 Rsyslog 配置文件的变化生效,你必须重启守护程序来加载新的配置。
sudo service rsyslog restart
或者
sudo systemctl restart rsyslog
我们可以通过netstat命令来验证rsyslog守护进程是否正常工作。
sudo netstat -tulpn | grep rsyslog
请注意: 为了允许建立入站连接,你必须在防火墙上打开 Rsyslog 的端口。
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1743/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 1743/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 1743/rsyslogd
udp6 0 0 :::514 :::* 1743/rsyslogd
由于统信是在使用 UFW 的基于 Debian 的发行版上,应运行如下的命令放行 Rsyslog 的端口:
ufw allow 514/tcp
ufw allow 514/udp
配置 Rsyslog 客户端
启用 Rsyslog 守护程序以客户端模式运行,并将输出的本地日志信息发送到远程 Rsyslog 服务器,需要根据需求编辑客户端中的 /etc/rsyslog.conf 文件
一、使用UDP协议
在/etc/rsyslog.conf 文件中最末尾添加:
*. * @IP_REMOTE_RSYSLOG_SERVER:514
*. * @FQDN_RSYSLOG_SERVER:514
二、使用TCP协议
为了使用 TCP 协议去发送日志信息,需在/etc/rsyslog.conf修改使用下列的模板:
*. * @@IP_reomte_syslog_server:514
注: 在 /etc/rsyslog.conf 文件中添加下列行,可以在 Rsyslog 服务器无法通过网络访问时,临时将客户端的日志信息存储在它的一个磁盘缓冲文件中,当网络或者服务器恢复时,再次进行发送。
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
为使上述规则生效,需要重新 Rsyslog 守护程序,以激活为客户端模式。