一、rsyslog概述
1、我们程序运行过程中通常会输出一些信息的,不仅如此,程序运行中也有可能发生意外的状况,比如某个功能未能正常实现,那么这个输出我们保存在哪儿去,按理来说所有的输出都应该是当前程序所在的控制台上,如果有一些守护进程是运行在后台的,那么其输出的信息要保存在何处呢?通常他会保存在一个文件中,这种我们称之为日志。所以我们syslog就是为了实现这个功能,而我们的rsyslog就是syslog的进阶版
2、日志:历史事件日志
a、历史事件
时间,事件
事件级别(日志级别):事件的关键性程度
3、事件:系统引导启动,应用程序启动,应用程序尤其是服务类应用程序运行过程中的一些事件,我们就称之为能记录到系统日志的事件。
a、系统日志服务
(1)、syslogd:system,记录系统日志
(2)、klogd:kernel,记录内核日志
b、事件格式较为简单时,可统一由syslog进行记录
(1)、事件产生的日期时间 主机 进程[pid]:事件内容
(2)、我们的rsyslog有一个facility(设施)的概念,无论是哪个应用程序如果将日志发往我们rsyslog的facility就意味着这些应用程序的日志都保存在同一个文件中。并且我们我们指定facility的时候我们还可以指定我们记录的日志级别可以记录到哪个级别,然后比这个级别高的就会被记录,比这个级别低的就不会被记录。因此我们还有一个级别(priority)的概念。
c、支持C/S架构:可通过UDP或TCP协议提供日志记录服务
我们在远程记录日志的时候不是由我们客户端直接将日志发往我们server端的,而是由我们远程客户端将日志统一发往远程主机的syslog进程,然后再由远程syslog进程发往server端的syslog所监听的套接字的端口。
d、rsyslog:
(1)、rsyslogd
(2)、特性
1)、多线程
2)、UDP,TCP,SSL,TLS,RELP
3)、存储日志信息于MySQL,PGSQL,Oracle等数据管理系统
4)、强大的过滤器,实现过滤日志信息中任何部分的内容
5)、自定义输出格式:
e、elk stack:elasticsearch,logstash,kibana
二、rsyslog日志收集器重要术语
1、facility:设施,从功能或程序上对日志进行分类
a、auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,security,user,uucp,local0-local7,syslog
2、priority:优先级,日志级别
a、debug(通用级别),info,notice,warn(warning),err(error),crit(critcal)(蓝色警报),alert(橙色警报),emerg(panic)(红色警报)
b、指定级别。我们一般都是notice或warn以上的级别
(1)、*:所有级别
(2)、none:没有级别
(3)、priority:此级别以高于此级别的所有级别
(4)、=priority:仅此级别
3、程序环境:
a、主程序:rsyslogd
b、主配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
[root@node2 ~]# cat /etc/rsyslog.conf |grep -Ev "^#|^$" $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 $IncludeConfig /etc/rsyslog.d/*.conf #哪个路径下的哪些模块化配置文件可作为配置文件片段 $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages #所有facility的info及以上级别的日志都记录到这个文件中,因此/var/log/messages这个文件一般很大。但是我们后面的几个不 记录到此文件中,下面我们自己定义的记录文件authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* #所有级别的emerg日志以输出模块的形式发送给当前终端中登陆的所有用户中。 uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
-/var/log/maillog中的-可以这样来解释,我们的日志信息都很关键,因为我们内核的写入方式是这样的,我们任何的写入操作都会先送往内核,因为只有内核才能访问硬件,任何写入都会由内核先缓存在内存告诉程序说写完了,这叫异步写入,不过这样的写入方式一旦服务器崩溃了会有日志丢失,因此日志写入都是同步写入的,即直接写入到我们的磁盘上去,但是这样会对我们的io会有很大的性能影响。默认的我们都是同步的,如果加上 - 就表示异步写入。
(1)、那么我们的sshd的日志是记录到哪儿的呢,我们可以在其配置文件中看到
[root@node2 ~]# cat /etc/ssh/sshd_config |grep -A1 Syslog #SyslogFacility AUTH SyslogFacility AUTHPRIV #日志发给AUTHPRIV #LogLevel INFO #默认日志级别是INFO,即把INFO和以上的级别都送给了AUTHPRIVE
1)、因此我们可以在/etc/rsyslog.conf文件中看到我们的authpriv日志都是记录在/var/log/secure中的,从这个文件中我们就可以看到我们的登陆日志
[root@node2 ~]# tail /var/log/secure Jun 8 21:12:07 node2 polkitd[678]: Finished loading, compiling and executing 2 rules Jun 8 21:12:07 node2 polkitd[678]: Acquired the name org.freedesktop.PolicyKit1 on the system bus Jun 8 21:12:07 node2 sshd[954]: Server listening on 0.0.0.0 port 22. Jun 8 21:12:07 node2 sshd[954]: Server listening on :: port 22. Jun 8 21:35:46 node2 sshd[1229]: Accepted password for root from 192.168.10.200 port 12959 ssh2 Jun 8 21:35:46 node2 sshd[1229]: pam_unix(sshd:session): session opened for user root by (uid=0) Jun 8 21:37:26 node2 polkitd[678]: Registered Authentication Agent for unix-process:1273:152562 (system bus name :1.27 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/free desktop/PolicyKit1/AuthenticationAgent, locale en_US.utf8)Jun 8 21:37:26 node2 polkitd[678]: Unregistered Authentication Agent for unix-process:1273:152562 (system bus name :1.27, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, local e en_US.utf8) (disconnected from bus)Jun 8 14:07:52 node2 polkitd[678]: Registered Authentication Agent for unix-process:1551:335398 (system bus name :1.36 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/free desktop/PolicyKit1/AuthenticationAgent, locale en_US.utf8)Jun 8 14:07:52 node2 polkitd[678]: Unregistered Authentication Agent for unix-process:1551:335398 (system bus name :1.36, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, local e en_US.utf8) (disconnected from bus)
c、服务脚本(Centos6):/etc/rc.d/init.d/rsyslog
d、Unit File(CentOS7):/usr/lib/systemd/system/rsyslog.service
e、我们现在可以把我们192.168.10.14配置成日志服务器
(1)、我们先在/etc/rsyslog.conf中打开imudp和imtcp这个模块功能,他叫输入模块,意思是我能接收别人的信息
[root@node2 ~]# cat /etc/rsyslog.conf|grep -A5 "imudp" $ModLoad imudp $UDPServerRun 514 #监听的端口 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 #监听的端口
(2)、然后我们重启服务并查看端口。意思是我们的日志都可以通过tcp或udp发送至514端口
[root@node2 ~]# netstat -anpt|grep 514 [root@node2 ~]# systemctl restart rsyslog [root@node2 ~]# netstat -anpt|grep 514 tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1985/rsyslogd tcp6 0 0 :::514 :::* LISTEN 1985/rsyslogd
(3)、然后我们在192.168.10.15上将相应的传送路径改为发送给192.168.10.14,然后我们重启我们的服务
[root@node3 ~]# cat /etc/rsyslog.conf |grep "*.info" #*.info;mail.none;authpriv.none;cron.none /var/log/messages *.info;mail.none;authpriv.none;cron.none @192.168.10.14
[root@node3 ~]# systemctl restart rsyslog
(4)、我们在192.168.10.15上用yum安装一个httpd程序包
1)、我们在192.168.10.15的/var/log/message中看不到相应的日志
2)、我们在192.168.10.14上能看到相应的日志
[root@node2 ~]# tail -f /var/log/messages Jun 8 18:04:24 node3 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0" x-pid="683" x-info="http://www.rsyslog.com"] exiting on signal 15. Jun 8 18:04:24 node3 systemd: Stopping System Logging Service... Jun 8 18:04:24 node3 systemd: Starting System Logging Service... Jun 8 18:04:24 node3 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0" x-pid="1864" x-info="http://www.rsyslog.com"] start Jun 8 18:04:24 node3 systemd: Started System Logging Service. Jun 8 18:06:41 node3 yum[1876]: Erased: 1:mod_ssl-2.4.6-90.el7.centos.x86_64 Jun 8 18:06:41 node3 yum[1876]: Erased: httpd-manual-2.4.6-90.el7.centos.noarch Jun 8 18:06:41 node3 yum[1876]: Erased: mod_fcgid-2.3.9-4.el7.x86_64 Jun 8 18:06:41 node3 yum[1876]: Erased: httpd-2.4.6-90.el7.centos.x86_64 Jun 8 18:06:41 node3 systemd: Reloading. Jun 8 18:08:20 node3 yum[1923]: Erased: httpd-tools-2.4.6-90.el7.centos.x86_64 Jun 8 18:08:27 node3 yum[1925]: Installed: httpd-tools-2.4.6-67.el7.centos.x86_64 Jun 8 18:08:28 node3 systemd: Reloading. Jun 8 18:08:28 node3 yum[1925]: Installed: httpd-2.4.6-67.el7.centos.x86_64
f、我们来配置将日志信息写入mysql中。
(1)、我们来查看我们相应的mysql工具包并安装
[root@node2 ~]# yum list |grep rsys rsyslog.x86_64 8.24.0-12.el7 @anaconda rsyslog-gnutls.x86_64 8.24.0-12.el7 local rsyslog-gssapi.x86_64 8.24.0-12.el7 local rsyslog-mmjsonparse.x86_64 8.24.0-12.el7 local rsyslog-mysql.x86_64 8.24.0-12.el7 local rsyslog-pgsql.x86_64 8.24.0-12.el7 local rsyslog-relp.x86_64 8.24.0-12.el7 local
[root@node2 ~]# yum install -y rsyslog-mysql
[root@node2 ~]# rpm -ql rsyslog-mysql /usr/lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
(2)、我们启动我们的mysql服务器,并且将我们rsyslog-mysql安装后生成的这个mysql-createDB.sql脚本导入
(3)、然后我们配置授权
(4)、然后我们在rsyslog日志服务器中/etc/rsyslog.conf添加mysql模块配置,并且配置将相应的日志保存至mysql中
(5)、然后我们重启rsyslog服务
(6)、我们再用yum安装一个vsftpd
(7)、然后我们在mysql中查看就可以看到有相应的日志信息了
4、配置文件格式rsyslog.conf
a、主要由三部分组成
(1)、MODULES
(2)、GLOBAL DRICTIVES
(3)、RULES
b、RULES:
(1)、facility,priority target
(2)、target:
1)、文件:记录日志
2)、用户:将日志事件通知给指定的用户;是通过将信息发送给登陆到系统上的用户的终端进行的
3)、日志服务器:@host,把日志送往指定的服务器主机
host:即日志服务器地址,监听在tcp或udp协议的514端口以提供服务
4)、管道: | COMMAND
c、其它日志文件
(1)、/var/log/wtmp:当前系统成功登陆系统的日志
需要使用last命令查看
(2)、/var/log/btmp:当前系统尝试登陆系统失败相关的日志
需要使用lastb命令查看
(3)、/var/log/dmesg:系统引导过程中的日志信息
也可以使用dmesg命令进行查看
5、rsyslog服务器
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#Provides TCP syslog reception
$ModuLoad imtcp
$InputTCPServerRun 514
6、记录日志于mysql中
a、于MySQL服务器:准备好MySQL服务器,创建用户,授权对Syslog数据库拥有全部访问权限
b、于rsyslog主机:安装rsyslog-mysql程序包
c、于rsyslog主机:通过导入createDB.sql脚本创建依赖到的数据库及表
mysql -uUSER -hHOST -pPASSWORD < /usr/share/doc/rsyslog-mysql-VERSION/createDB.sql
d、配置rsyslog使用ommysql模块
### MODULES ###
$ModLoad ommysql
### RULES ###
facility.priority :ommysql:DBHOST,DB,DBUSER,DBUSERPASS
注意:重启rsyslog服务
e、web展示接口:loganalyzer
(1)、配置lamp组合
httpd,php,php-mysql,php-gd
(2)、安装loganalyzer
(3)、通过URL访问
http://HOST/loganalyzer