zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    由吃饺子想到的多线程情况下的数据共享问题
    关于伪静态的几个体会
    最近改造的一款可多选的日历插件,已通过兼容性测试
    对kingthy创作的Vtemplate模板引擎的使用心得
    从前辈们整理的数据库优化经验中得到的一点心得分享
    关于近期对Lucene.Net应用研究学习的总结
    对SharpICTCLAS 1.0的一点小小的修改记录
    转 Blob、DataURL、canvas、image的相互转换
    节日_100
    模板生成_100
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/13065749.html
Copyright © 2011-2022 走看看