由于等保要求重要日志必须保留 180 天,而 AF 防火墙等设备建议异地保存!所以,使用 rsyslog 自行搭建一个 log 服务器。至于加入到 mysql 和 loganalyzer ,等保没有要求,以后再说
官方文档 The rocket-fast Syslog Server RSyslog Documentation
官方仓库 rsyslog/rsyslog
ubuntu 上安装文档 Install rsyslog on Ubuntu
参考 【详解】Rsyslog配置及日志服务器搭建(rsyslog+mysql+loganalyzer)
实验环境 服务端 : 192.168.2.205 (ubuntu 20.04 虚拟机) 客户端 : 192.168.2.206 (ubuntu 20.04 虚拟机)
安装
-
按照以上安装文档,服务端和客户端都同样安装 sudo add-apt-repository ppa:adiscon/v8-devel sudo apt-get update sudo apt-get install rsyslog -
查看安装版本 $ rsyslogd -v rsyslogd 8.2008.0.9d70869d4ea5 (aka 2020.08) compiled with:
PLATFORM: x86_64-pc-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: No
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
systemd support: Yes
Config file: /etc/rsyslog.conf
PID file: /var/run/rsyslogd.pid
Number of Bits in RainerScript integers: 64
See https://www.rsyslog.com for more information.
-
查看服务状态,可见已经设置为自动启动 $ sudo systemctl status rsyslog.service $ sudo systemctl list-unit-files |grep rsyslog -
防火墙 sudo ufw allow 514 sudo ufw allow 514/udp 学习的时候可以先都关掉,之后再开启并设置
配置服务端
-
官方建议下载一份样本,学习一下 https://www.rsyslog.com/doc/v8-stable/_downloads/7e57a40acf92e68e8c6a36de79acc04d/rsyslog-example.conf -
修改 /etc/rsyslog.conf 一般开启 udp 方式就好 去掉以下 2 个注释即可 $ModLoad imudp $UDPServerRun 514 -
最后一句: $IncludeConfig /etc/rsyslog.d/*.conf 说明其他配置(规则、模版)都在 /etc/rsyslog.d 目录下 这有已经建立了 3 个 conf 文件 dhbm@ubuntu2004-205:/etc/rsyslog.d$ ls 20-ufw.conf 21-cloudinit.conf 50-default.conf
-
普通使用就修改这个 50-default.conf ,可以直接在文件开头加上了以下内容 我这里自行创建了一个 conf 文件 dhbm@ubuntu2004-206:/etc/rsyslog.d$ cat wzh.conf # wzh 20220412
#
$AllowedSender TCP, 127.0.0.1, 192.168.2.0/24, *.example.com
$AllowedSender UDP, 127.0.0.1, 192.168.2.0/24, *.example.com
# A template that resambles traditional syslogd file output:
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"
#
# 以下 2 种分类方式都可以
# 分类方式一
# 按照客户端的HOSTNAME 分别创建不同目录,rsyslog需要手动创建
# 每天只创建一个文件
$template remote-incoming-logs,"/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%_%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?remote-incoming-logs
# 分类方式二
# 根据客户端的IP单独存放主机日志在不同目录,rsyslog需要手动创建
# $template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%/%syslogtag%_%$YEAR%-%$MONTH%-%$DAY%-%$hour%:%$minute%.log"
# 每天只创建一个文件
# $template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%/%syslogtag%_%$YEAR%-%$MONTH%-%$DAY%.log"
# :fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
# & ~
# Forwarding to remote machine
# 127.0.0.1 可以作为本机测试用,既是服务端,又是客户端
# 作为服务端,全都注释掉
# 作为客户端,修改以下服务端 ip ,注意,IP最后不要空格
# ----------------------------
# *.* @192.168.2.205
# udp (standard for syslog)
# *.* @@192.168.2.205
# tcp
*.* @127.0.0.1
# udp (standard for syslog)
*.* @@127.0.0.1
# tcp
主要就是以下 3 个部分 1). $AllowedSender 2). $template 3). # Forwarding to remote machine 其实,服务端和客户端没有什么区别 作为服务端用的话,注释掉以上3). # Forwarding to remote machine -
强烈建议自行手动创建 rsyslog 目录,记得要修改 owner 如果简单在 /vor/log 同级目录也是可以的,但是调试的时候经常会 sudo rm 掉该目录,这样子的话,再次运行的时候,由于该目录 owner 已经被改变,会出现creat 或 open 错误 $ cd /var/log $ sudo mkdir rsyslog $ sudo chown syslog:adm rsyslog -
只要修改了 conf ,一定记得检查语法、重启服务、检查状态 $ rsyslogd -f /etc/rsyslog.conf -N1 错误的结果: rsyslogd: version 8.2008.0.9d70869d4ea5, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 61: STOP is followed by unreachable statements! [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2207 ]
正确的结果: rsyslogd: version 8.2008.0.9d70869d4ea5, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
$ sudo service rsyslog restart $ sudo service rsyslog status
配置客户端
-
客户端和服务端实际没有区别 -
再次抄录一下前面写的 conf 文件说明 主要就是以下 3 个部分 1). $AllowedSender 2). $template 3). # Forwarding to remote machine 其实,服务端和客户端没有什么区别 作为服务端用的话,注释掉以上3). # Forwarding to remote machine -
过程省略,以下分别测试的时候再操作
测试:192.168.2.206 既是服务端,又是客户端的测试过程和结果
-
随便找个可以触发 syslog 的命令 $ sudo service nginx stop $ sudo service nginx start 这个操作应该会触发 sudo 日志 和 systemctl 日志 nginx 日志也会触发的,但是,rsyslog 中没有单独列出来 -
以上我使用了分类方式一,所以,应该会在 /var/log/rsyslog 目录下产生一个 客户端 hostname 的目录 (我这里是 ubuntu2004-206) dhbm@ubuntu2004-206:/var/log/rsyslog$ ll total 12
drwxr-xr-x 3 syslog adm 4096 Apr 13 15:02 ./
drwxr-xr-x 12 root syslog 4096 Apr 13 15:00 ../
drwxr-xr-x 2 syslog syslog 4096 Apr 13 15:44 ubuntu2004-206/
为了看得清楚,我干脆先删除之前的历史文件 dhbm@ubuntu2004-206:/var/log/rsyslog/ubuntu2004-206$ sudo rm . -
重新执行以上命令 $ sudo service rsyslog restart $ sudo service nginx stop $ sudo service nginx start 查看结果 dhbm@ubuntu2004-206:/var/log/rsyslog/ubuntu2004-206$ ll total 57132
drwxr-xr-x 2 syslog syslog 4096 Apr 13 16:04 ./
drwxr-xr-x 3 syslog adm 4096 Apr 13 15:02 ../
-rw-r----- 1 syslog adm 29381630 Apr 13 15:44 '**INVALID PROPERTY NAME**'
-rw-r----- 1 syslog adm 14627766 Apr 13 16:04 rsyslogd_2022-04-13.log
-rw-r----- 1 syslog adm 2784774 Apr 13 16:04 sudo_2022-04-13.log
-rw-r----- 1 syslog adm 11692889 Apr 13 16:04 systemd_2022-04-13.log
可以看到,产生了 4 个 log ,写本文的时候才注意到第一个错了,后续再处理!
测试:客户端 - 192.168.2.206 ,服务端-192.168.2.205 的测试过程和结果
-
客户端(192.168.2.206)修改 抱歉!写错了,应该是服务端? 将以上 # Forwarding to remote machine 中 127.0.0.1 注释掉,改为 192.168.2.205 改用方式二 dhbm@ubuntu2004-206:/etc/rsyslog.d$ sudo vim wzh.conf dhbm@ubuntu2004-206:/etc/rsyslog.d$ sudo service rsyslog restart dhbm@ubuntu2004-206:/etc/rsyslog.d$ sudo service rsyslog status 先确认 rsyslog status 正确! -
打开服务端 (192.168.2.205) dhbm@ubuntu2004-205:/var/log/rsyslog$ ll total 16 drwxr-xr-x 4 syslog adm 4096 Apr 13 11:28 ./ drwxr-xr-x 12 root syslog 4096 Apr 13 10:36 …/ drwxr-xr-x 2 syslog syslog 4096 Apr 13 14:47 192.168.2.206/ drwxr-xr-x 2 syslog syslog 4096 Apr 13 11:28 ubuntu2004-205/ 之前也有残留,先删除它! $ sudo rm -rf 192.168.2.206/ $ sudo service rsyslog restart -
同样在客户端也执行以下操作 dhbm@ubuntu2004-206:/etc/rsyslog.d$ sudo service nginx stop dhbm@ubuntu2004-206:/etc/rsyslog.d$ sudo service nginx start -
立刻回到服务端,可以看到又出现了 192.168.2.206/ 目录 dhbm@ubuntu2004-205:/var/log/rsyslog/192.168.2.206$ ll total 20
drwxr-xr-x 2 syslog syslog 4096 Apr 13 16:19 ./
drwxr-xr-x 4 syslog adm 4096 Apr 13 16:19 ../
-rw-r----- 1 syslog adm 1202 Apr 13 16:19 rsyslogd_2022-04-13.log
-rw-r----- 1 syslog adm 1172 Apr 13 16:19 sudo_2022-04-13.log
-rw-r----- 1 syslog adm 1022 Apr 13 16:19 systemd_2022-04-13.log
同样是触发了 sudo 和 systemd 日志 自行打开看看
错误处理
-
cat /var/log/rsyslog.log … Apr 12 17:00:25 ubuntu2004-206 rsyslogd: cannot connect to 192.168.2.205:514: Connection refused [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2027 ] 防火墙问题 -
cat /var/log/rsyslog.log … Apr 12 16:55:29 ubuntu2004-206 rsyslogd: cannot resolve hostname '192.168.2.205 ': Invalid argument [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2027 ] 这个比较坑,注意 192.168.2.205 后面有个空格! -
cat /var/log/rsyslog.log … Apr 13 08:59:17 ubuntu2004-205 rsyslogd: error during config processing: omfile: creating parent directories for file ‘/var/log/rsyslog/192.168.2.206/sudo:_2022-04-13-08:59.log’ failed: Permission denied [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2207 ] Apr 13 08:59:17 ubuntu2004-205 rsyslogd: error during config processing: Could not open dynamic file ‘/var/log/rsyslog/192.168.2.206/sudo:_2022-04-13-08:59.log’ [state -3000] - discarding message [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2207 ] 这个是应为调试的时候。手工 sudo rm -rf /var/log/rsyslog/ 之后, 目录的 owner 改变了 -
$ rsyslogd -f /etc/rsyslog.conf -N1 rsyslogd: version 8.2008.0.9d70869d4ea5, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 61: STOP is followed by unreachable statements! [v8.2008.0.9d70869d4ea5 try https://www.rsyslog.com/e/2207 ]
这个是因为 template 最后跟着 & ~,这个表示丢弃后续的所有日志处理
|