一、rsyslog日志服务简介

日志的概念好理解,日志作用可用于排障和追溯审计的等

  1. rsyslog是一个C/S架构的服务,可监听于某套接字,帮其它主机记录日志信息,在linux系统中可以分类两个日志:
  • klogd:kernel,记录内核相关的日志
  • syslogd:service,记录应用程序的日志

rsyslog:是CentOS 6以后的系统使用的日志系统,与之前的syslog日志系统相比,具有以下优点:

  • 支持多线程

  • 支持TCP、SSL、TLS、RELP等协议

  • 强大的过滤器,可实现过滤日志信息中的任意部分

  • 支持自定义输出格式

  • 适用于企业级别日志记录需求

  • 模块化

  1. 日志的记录格式

    日期时间 主机进程[pid]:事件内容

二、rsyslog配置

  1. 程序包:rsyslog
  • 配置文件:/etc/rsyslog.conf, /etc/rsyslog.d/
  • 主程序:/usr/sbin/rsyslogd
  • 模块路径:/usr/lib64/rsyslog/
  • Unit File:/usr/lib/systemd/system/rsyslog.service
  1. rsyslog中的术语:
  • facility:设施、信道;
  • auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0-local7
  • priority:记录日志的等级,如果等级是info,代表包含了info以及以上的所有等级事件日志都记录
  • debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
  1. 配置文件:
    由三部分组成:严格按照配置段位置添加配置
    [12:58 root@centos6.8~]# grep "####" /etc/rsyslog.conf
    #### MODULES ####
    #### GLOBAL DIRECTIVES ####
    #### RULES ####

    MODULES:定义了模块的选修,如接下来的使用mysql模块记录日志则需要在这里配置
    GLOBAL DIRECTIVES:定义了全局的环境
    RULES:定义了记录日志的设施以及等级等信息

    日志定义格式: facility.priority    Target
     facility: 设施,从功能或程序上对日志进行分类,并由专门的工具负责记录日志;
       常用的facility:
         lpr: 打印相关的日志
         auth:认证相关的日志
         user:用户相关的日志
         cron:计划任务相关的日志
         kern:内核相关的日志
         mail:邮件相关的日志
         mark:标记相关的日志
         news:新闻相关的日志
         uucp:文件copy相关的日志
         daemon:系统服务相关的日志
         authpri: 授权相关的日志
         security:安全相关的日志
         local0-local7:自定义相关的日志信息(自定义时可以使用通配符)
         通配符:
            *:所有
            f1,f2,f3......:列表
            !:取反
     priority:日志级别
     常用的日志级别:
    debug:   调试
    info:   消息
    notice: 注意
     warn,warning: 警告
    err,error: 错误
    crit: 严重级别
    alert: 需要立即修改该的信息
    emerg,panic: 内核崩溃,内核恐慌等严重的信息
    通配符:
        *:所有日志级别
        none:没有任何级别,也就是不记录日志信息
     Target:文件路径
     可以使用的有:
         /var/log/messages
         用户:*当前登录系统的所有用户
         日志服务器:@SERAVER_IP
         管道:| COMMAND
    举例:
    mail.info  /var/log/maillog:  比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
    mail.=info  /var/log/maillog: 明确指定日志级别为info,保存至/var/log/maillog
    mail.!info  /var/log/maillog: 除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
    *.info      /var/log/maillog: 所有facility的info级别,保存至/var/log/maillog
    mail.*     /var/log/maillog:  mail的所有日志级别信息,都保存至/var/log/maillog
    mail.notice;news.info  /var/log/maillog: mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog
    mail,news.crit  -/var/log/maillog:  mail和news的crit以上的日志级别保存/var/log/maillog中;"-"代表异步模式

    三、实现日志服务器收集日志

    前面已经介绍,rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作,起可以基于TCP和UDP工作,默认的监听端口是514,只需要在modules打开即可:

  2. 修改服务端配置,打开服务监听端口,并重启服务:
    #### modules ####
    …………
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514
    [13:05 root@centos6.8~]# service rsyslog restart
    Shutting down system logger:                               [  OK  ]
    Starting system logger:                                    [  OK  ]
  3. 在客户端的配置中,定义将日志发往服务端:
    #### RULES ####
    *.*     @10.1.252.109
  4. 服务端已经收到日志:
    [13:15 root@centos6.8~]# tail /var/log/messages
    Oct 16 12:48:36 centos6 kdump: started up
    Oct 16 12:48:39 centos6 abrtd: Init complete, entering main loop
    Oct 16 13:05:50 centos6 kernel: Kernel logging (proc) stopped.
    Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1547" x-info="http://www.rsyslog.com"] exiting on signal 15.
    Oct 16 13:05:50 centos6 kernel: imklog 5.8.10, log source = /proc/kmsg started.
    Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2418" x-info="http://www.rsyslog.com"] start
    Oct 18 10:20:43 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.
    Oct 18 10:20:43 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2205" x-info="http://www.rsyslog.com"] start
    Oct 18 10:26:20 localhost root: 
    Oct 18 10:26:20 localhost root:
  5. 其它几个日志文件:
  • last -num:记录登录系统成功的记录
  • lastb -num :记录登录系统失败的记录
    命令的读取日志文件:
  • /var/log/btmp:登录当前系统的所有的失败的尝试;
  • /var/log/wtmp:所有成功登录至当前系统的相关信息;
  • dmesg:系统引导过程中的日志信息;
  • /var/log/dmesg:系统引导过程中的日志信息;
    文本查看工具;
  • 也可以使用dmesg命令;

四、实现日志存储在mysql中

前提:准备好msql server或mariadb server;

  1. 安装rsyslog连接至mysql server的驱动模块;
    [13:24 root@centos6.8~]# yum install -y rsyslog-mysql 
    [13:24 root@centos6.8~]# rpm -ql rsyslog-mysql
    /lib64/rsyslog/ommysql.so
    /usr/share/doc/rsyslog-mysql-5.8.10
    /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql

    可以看到其实rsyslog模块提供的启动mysql的模块还有createDB.sql,它的作用就是定义了日志的记录表格式,可以直接导入该sql语句到mysql即可

  2. 在mysql server准备rsyslog专用的用户账号;
    mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'127.0.0.1' IDENTIFIED BY 'rsyslogpass';
    mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'local' IDENTIFIED BY 'rsyslogpass';
    mysql> FLUSH PRICVILEGES
  3. 导入该sql语句到mysql即可,生成所需要的数据库和表;
    [13:24 root@centos6.8~]# mysql -ursyslog -h127.0.0.1 -p123456 <  /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
    mysql> USE Syslog
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    mysql> SHOW TABLES;
    +------------------------+
    | Tables_in_Syslog       |
    +------------------------+
    | SystemEvents           |
    | SystemEventsProperties |
    +------------------------+
    2 rows in set (0.00 sec)
    mysql> DESC SystemEvents
     -> ;
    +--------------------+------------------+------+-----+---------+----------------+
    | Field              | Type             | Null | Key | Default | Extra          |
    +--------------------+------------------+------+-----+---------+----------------+
    | ID                 | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | CustomerID         | bigint(20)       | YES  |     | NULL    |                |
    | ReceivedAt         | datetime         | YES  |     | NULL    |                |
    | DeviceReportedTime | datetime         | YES  |     | NULL    |                |
    | Facility           | smallint(6)      | YES  |     | NULL    |                |
    | Priority           | smallint(6)      | YES  |     | NULL    |                |
    | FromHost           | varchar(60)      | YES  |     | NULL    |                |
    | Message            | text             | YES  |     | NULL    |                |
    | NTSeverity         | int(11)          | YES  |     | NULL    |                |
    | Importance         | int(11)          | YES  |     | NULL    |                |
    | EventSource        | varchar(60)      | YES  |     | NULL    |                |
    | EventUser          | varchar(60)      | YES  |     | NULL    |                |
    | EventCategory      | int(11)          | YES  |     | NULL    |                |
    | EventID            | int(11)          | YES  |     | NULL    |                |
    | EventBinaryData    | text             | YES  |     | NULL    |                |
    | MaxAvailable       | int(11)          | YES  |     | NULL    |                |
    | CurrUsage          | int(11)          | YES  |     | NULL    |                |
    | MinUsage           | int(11)          | YES  |     | NULL    |                |
    | MaxUsage           | int(11)          | YES  |     | NULL    |                |
    | InfoUnitID         | int(11)          | YES  |     | NULL    |                |
    | SysLogTag          | varchar(60)      | YES  |     | NULL    |                |
    | EventLogType       | varchar(60)      | YES  |     | NULL    |                |
    | GenericFileName    | varchar(60)      | YES  |     | NULL    |                |
    | SystemID           | int(11)          | YES  |     | NULL    |                |
    +--------------------+------------------+------+-----+---------+----------------+
    24 rows in set (0.00 sec)
  4. 配置rsyslog加载ommysql模块
    #### MODULES ####
    ......
    $ModLoad ommysql
  5. 配置RULES,将所期望的日志信息记录于mysql中;
    其格式为: facility.priority :ommysql:DBHOST,DB,DBUSER,DBUSERPASS
    所以添加以下信息:
    *.* 
    :ommysql:127.0.0.1,Syslog,rsyslog,123456
  6. 启动mysql服务,并重启rsyslog服务,mysql已经记录日志,到此为止,日志信息已经成功的存储于数据库中;
    mysql> SELECT * FROM SystemEvents\G
    *************************** 1. row ***************************
                 ID: 1
         CustomerID: NULL
         ReceivedAt: 2016-10-16 13:35:46
    DeviceReportedTime: 2016-10-16 13:35:46
           Facility: 0
           Priority: 6
           FromHost: centos6
            Message: imklog 5.8.10, log source = /proc/kmsg started.
         NTSeverity: NULL
         Importance: NULL
        EventSource: NULL
          EventUser: NULL
      EventCategory: NULL
            EventID: NULL
    EventBinaryData: NULL
       MaxAvailable: NULL
          CurrUsage: NULL
           MinUsage: NULL
           MaxUsage: NULL
         InfoUnitID: 1
          SysLogTag: kernel:
       EventLogType: NULL
    GenericFileName: NULL
           SystemID: NULL
    *************************** 2. row ***************************
                 ID: 2
         CustomerID: NULL
         ReceivedAt: 2016-10-16 13:35:46
    DeviceReportedTime: 2016-10-16 13:35:46
           Facility: 5
           Priority: 6
           FromHost: centos6
            Message:  [origin software="rsyslogd" swVersion="5.8.10" x-pid="3081" x-info="http://www.rsyslog.com"] start
         NTSeverity: NULL
         Importance: NULL
        EventSource: NULL
          EventUser: NULL
      EventCategory: NULL
            EventID: NULL
    EventBinaryData: NULL
       MaxAvailable: NULL
          CurrUsage: NULL
           MinUsage: NULL
           MaxUsage: NULL
         InfoUnitID: 1
          SysLogTag: rsyslogd:
       EventLogType: NULL
    GenericFileName: NULL
           SystemID: NULL
    *************************** 3. row ***************************
                 ID: 3
         CustomerID: NULL
         ReceivedAt: 2016-10-16 13:35:50
    DeviceReportedTime: 2016-10-18 10:48:37
           Facility: 18
           Priority: 6
           FromHost: localhost
            Message:  nidhai
         NTSeverity: NULL
         Importance: NULL
        EventSource: NULL
          EventUser: NULL
      EventCategory: NULL
            EventID: NULL
    EventBinaryData: NULL
       MaxAvailable: NULL
          CurrUsage: NULL
           MinUsage: NULL
           MaxUsage: NULL
         InfoUnitID: 1
          SysLogTag: root:
       EventLogType: NULL
    GenericFileName: NULL
           SystemID: NULL
    *************************** 4. row ***************************
                 ID: 4
         CustomerID: NULL
         ReceivedAt: 2016-10-16 13:35:52
    DeviceReportedTime: 2016-10-18 10:48:39
           Facility: 18
           Priority: 6
           FromHost: localhost
            Message:  D
         NTSeverity: NULL
         Importance: NULL
        EventSource: NULL
          EventUser: NULL
      EventCategory: NULL
            EventID: NULL
    EventBinaryData: NULL
       MaxAvailable: NULL
          CurrUsage: NULL
           MinUsage: NULL
           MaxUsage: NULL
         InfoUnitID: 1
          SysLogTag: root:
       EventLogType: NULL
    GenericFileName: NULL
           SystemID: NULL
    4 rows in set (0.00 sec)