一、rsyslog介绍
rsyslog是一个快速处理日志的程序,提供了高性能、安全功能和模块化设计,将多种来源输入输出转换结果到目的地
优点:多线程、支持加密协议(ssl、relp等)、多种数据库(mysql)等。
可以监控录入每个用户的键入命令
1.1、rsyslog架构图
Rsyslog架构,这是rsyslog官网 上的一张图,用来介绍rsyslog的架构, rsyslog的消息流是从输入模块->预处理模块->主队列->过滤模块- >执行队列->输出模块。
在这个流程图中,输入、输出、过滤三个部分称为module,输入模块有imklg、imsock、 imfile. 输出模块有omudp、omtcp、 omfile、 omprog、 ommysql. omruleset 。
过滤模块研究不多,只会提到mmnormalize.预处理模块主要解决各种syslog协议实现间的差异,举例说明如果日志系统client端使用rsyslog、server端使用syslog-ng,如果自己不做特殊处理syslog-ng是无法识别的。但是反过来,rsyslog的server端就可以识别syslog-ng发过来的消息。
Input模块,包括imklg、 imsock. imfile、 imtcp等, 是消息来源。
Filetr模块,处理消息的分析和过滤,rsyslog可以根据消 息的任何部分进行过滤,后面会介绍到具体的做法。
Output模块,包括omfile、 omprog. omtcp、 ommysq|等。 是消息的目的地。
Queue模块,负责消启的存储,从Input传入的未经过滤的消启放在主队列中,过滤后的消息放入到不同
action queue中,再由action queue送到各个输出模块。
二、实践部署
2.1、环境:
CentOS7.4 2m2g server client1 client2
2.2、server上部署操作
安装rsyslog程序(rsyslog默认已经在发行版安装,如果系统中没有的话,可以yum安装)
# yum install rsyslog -y
grep -v "^#" /etc/rsyslog.conf | grep -v "^$" $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $ModLoad immark # provides --MARK-- message capability $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 $WorkDirectory /var/lib/rsyslog $AllowedSender tcp, 192.168.37.100/24 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" :fromhost-ip, !isequal, "127.0.0.1" ?Remote $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /data/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
1、$AllowedSender tcp, 192.168.37.100/24 允许37.0网段内的主机以 tcp 协议来传输
2、 $template Remote,"/data/log/ %fromhost-ip%/ %fromhost-ip%_ %$YEAR%- %$MONTH%-%$DAY%.log"定义模板,接受日志文件路径,区分了不同主机的日志
3、 :fromhost-ip, !isequal, "127.0.0.1" ?Remote过滤server本机的日志。
4、$InputTCPServerRun 514开启tcp,tcp和udp可以共存的
创建日志目录,尽量选择系统内比较大的区域创建,因为考虑到要存放很多服务器的日志文件。
mkdir -pv /data/log
修改完后,重启rsyslog服务,并查看监听端口,514是否是tcp协议
2.3、client端部署操作
先修改两台机器的配置文件
# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $template myFormat,"%timestamp% %fromhost-ip% %msg% " $ActionFileDefaultTemplate myFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none @@192.168.37.100 authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
修改完后 wq! restart
2.4、验证
在服务器上进到 /data/log 目录下,进行查看,会发现这样的文件结构
[root@node ~]# tree /data/log/ /data/log/ ├── 192.168.37.101 │ └── 192.168.37.101_2020-07-23.log ├── 192.168.30.57 │ └── 192.168.37.102_2020-07-23.log └── messages
在server上操作查看日志
tail -f /data/log/192.168.37.101/192.168.37.101_2020-07-23.log
三、收集系统其它服务日志,在客户端上操作
3.1、修改配置文件,在尾部添加几行参数
module(load="imfile" PollingInterval="5")
#加载imfile模块,并5秒刷新一次 $InputFileName /var/log/http/access.log
#要监控的日志文件路径 $InputFileTag Apache1:
#定义文件标签,注意最后是冒号: $InputFileStateFile state-Apache1
#定义状态文件 $InputRunFileMonitor
#激活读取,可以设置多组日志读取,每组结束时设置本参数
3.2、老样子 wq! systemctl restart rstslog
3.3、查看server端的日志收集
四、总结
最近发现系统有自己用户的操作输入内容,很好奇,于是收集了一下类似的博客,发现确实有这个服务,这样可以监控其他人员的操作,方便不时之需造成失误时错误环境的演示以及排错