Linux学习102 Linux平台日志管理系统-rsyslog入门到精通

一、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

原文地址:https://www.cnblogs.com/Presley-lpc/p/13065749.html