Centos对Rsyslog日志远程转发和Mysql日志存储

Centos:Rsyslog日志远程转发和Mysql日志存储

实验环境

  • 远程日志/数据库服务器:Centos 7 ,静态ip:192.168.6.128
  • 本地日志/数据库服务器:Centos 6.9 ,静态ip:192.168.6.146

Rsyslog介绍

1. 介绍

  • 全称:Rocket-fast system for log

  • 特点:日志服务本身支持多线程;支持诸多传输协议日志:UDP,TCP;能够将日志存储到数据库中如Mysql;支持加密协议如SSL,TLS;具有强大的过滤器,可以对日志内容进行过滤;可以自定义输出格式

  • 组件:

    a. 主程序:/usr/sbin/rsyslogd

    b. Centos 6命令:service rsyslog {start|stop|restart|status}

    c. Centos 7命令:systemctl {start|stop|restart|status} rsyslog.service

    d. 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d*.conf

    e. 库文件:/lib64/rsyslog/*.so

  • /etc/rsyslog.conf文件结构:

    MODULES模块,GLOBAL DIRECTIVES全局设置,RULES规则组成

  • 规则:由Facility,Priority,Target组成,在配置文件中配置格式如下:

    Facility.Proirity[;Fcility.Priority...]			Target
    

2. Facility

  • 参考:man 3 syslog

  • 说明:这个参数旨在明确究竟是哪一个服务(程序)在打印日志信息。使得配置文件明确日志的来源,从而进行相应的处理。

  • 设施类型:

    设施说明
    authPAM产生的日志,认证日志
    authprivFTP,SSH等登陆认证日志
    mail邮件日志
    cron计划任务(时钟进程)
    kern内核启动日志
    FTPFTP日志信息
    USER(默认)生成用户级别消息
    SYSLOG系统日志信息
    *****所有的facility

3. Priority

  • 参考:man 3 syslog

  • 说明:指明日志重要性级别(从上到下递减,先左后右递减)

    级别描述级别描述
    Emerg系统不可用Notice具有重要性的普通事件
    Alert闭幕马上采取措施Info有用事件
    Crit关键事件Debug调试信息
    Err错误事件*****所有级别
    Warn警告事件NONE不记录

4. Target

  • 说明:存储与指定日志文件中,通常在/var/log下,文件路径前面 - 表示异步写入;可以是如下:
  • 文件:/var/log/xxx.log
  • 日志服务器:@ip,UDP方式将日志送往指定远程服务器记录;@@ip是TCP方式
  • 管道:|COMMAND,转发给其他命令处理

Rsyslog日志转发

1. 软件安装确认

yum -y install rsyslog

2. 防火墙和SElinux配置

  • 如果还没学过防火墙配置,那么简单粗暴地关掉防火墙以满足日志转储所需的系统环境

    #关闭防火墙
    iptables -F
    #centos7查看防火墙状态
    systemctl status firewalld
    #cento6查看防火墙状态
    service iptables status
    

3. 服务器配置文件修改

  • ​ 日志服务器端会根据rsyslog.conf的文件配置,设施/级别将日志存放到不同的文件。我们设定用户日志信息这一设施(Facility)为:user,对应一个具有重要性的普通设置级别:notice,将满足这样的情况发送到远程日志服务器/var/log/user.log的文件里;其他情况下,发过来的其他Facility产生的日志也会存放到其他指定的文件里。

  • 本地服务器

    [root@lin ~]# vim /etc/rsyslog.conf 
    # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    #*.* @@remote-host:514
    #远程转发日志 (ip地址填写远程日志服务器的ip地址)
    #注意:使用@代表走UDP协议,使用@@代表走TCP协议。
    
    user.notice                         @192.168.6.128514
    
    #本地存储日志
    user.notice                         /var/log/user.log
    
    #重启服务
    [root@lin ~]# service rsyslog restart
    Shutting down system logger:                   [  OK  ]
    Starting system logger:                        [  OK  ]
    
  • 远程日志日志服务器

    [root@ ~ 11:24:30]#vim /etc/rsyslog.conf
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    
    user.notice                          /var/log/user.log
    
    #重启
    [root@ ~ 11:39:25]#systemctl restart   rsyslog
    #检查UDP514端口是否在提供服务
    [root@ ~ 11:40:15]#netstat -tulnp|grep 514
    udp        0      0 0.0.0.0:514             0.0.0.0:*                           1217/rsyslogd       
    udp6       0      0 :::514                  :::*                                1217/rsyslogd   
    

4. Logger测试

  • logger:一个导向syslog日志系统的shell命令接口
  • logger message :写日志,没有加任何选项,就从标准输入读取
#客户端
[root@lin ~]# logger luelueluepinginglab
[root@lin ~]# cat /var/log/user.log 
Aug  8 20:01:32 lin root: luelueluepinginglab

#服务器端
[root@ ~ 11:40:17]#tailf /var/log/user.log
tailf: stat failed /var/log/user.log: No such file or directory
[root@ ~ 11:40:57]#touch /var/log/user.log
[root@ ~ 11:41:41]#tailf /var/log/user.log   #先执行此命令,再去客户端打印日志
Aug  8 20:01:32 lin root: luelueluepinginglab

小结:通过本地日志服务器和远程日志服务器的配置文件的修改,实现本地日志远程存储在远程日志服务器中

Rsyslog日志转发到特定格式的文件

1.远程日志服务器端配置/etc/rsyslog.conf

#要求:使不同IP发来的日志单独放到不同的日志文件中
#日志文件名格式:IP-年-月-日.log
#模板设置:rsyslog.conf文件最底部加入如下模板
vim /etc/rsyslog.conf

#定义模板:用来指定接收的日志文件的存放路径,%...%之间定义的是参数
$template DynamicIpLog,"/log/%fromhost-ip%-%$YEAR%-%$MONTH%-%$DAY%.log"

#接收日志:将传来的用户普通消息存到指定位置(?用来标识动态模板)
user.notice                              ?DynamicIpLog

#:x!保存修改

2.测试

#重启远程服务器端
[root@ ~ 04:53:48]#systemctl restart rsyslog.service
[root@ ~ 04:54:08]#netstat -tulnp |grep 514
udp        0      0 0.0.0.0:514             0.0.0.0:*                           1517/rsyslogd       
udp6       0      0 :::514                  :::*                                1517/rsyslogd      
[root@ ~ 04:54:20]#ls /log   		 #一开始目录还没创建
ls: cannot access /log: No such file or directory
#日志发送端开始发送日志
[root@lin ~]# logger xixihahaxixihaha

#再次查看远程服务器端
[root@ ~ 04:55:05]#cat /log/192.168.6.146-2020-09-12.log    		 #已经将日志存到模板创建的目录中的文件当中
Aug  9 01:01:56 lin root: xixihahaxixihaha   #内容属实
[root@ ~ 04:55:20]#vim /etc/rsyslog.conf  

Rsyslog日志存储于本地MySQL

1.安装

  • centos6: mysql-server
  • centos7: mariadb-server
#安装mysql的yum源
wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm
#安装用来配置mysql的yum源的rpm包
rpm -Uvh mysql57-community-release-el6-9.noarch.rpm 
#安装mysql
yum install mysql-community-server
#开启mysql服务
[root@lin ~]# service mysqld start
Starting mysqld:                                 				  [  OK  ]

2.登陆修改密码

#初次安装,root用户的登陆密码是回车键即没有密码
[root@lin ~]# mysql -u root -p  
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
#登陆进去之后,再修改密码
mysql> use mysql;
mysql> UPDATE user SET Password= password('854633') where User='root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 3  Changed: 2  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3.安装适用于Rsyslog日志服务的Mysql驱动

[root@lin ~]# yum install rsyslog-mysql
[root@lin ~]# ll /usr/share/doc/rsyslog-mysql-5.8.10/    #查看是否有sql文件
total 4
-rw-r--r--. 1 root root 1046 Apr 18  2011 createDB.sql   #将指定的sql文件导入到数据库中
[root@lin ~]# mysql -u root -p </usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql 
Enter password:
[root@lin ~]# mysql -u root -p                           #登陆mysql
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |									#Syslog日志数据库已经导入
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

4.Syslog数据库权限设置

#授予Syslog所有表的所有使用权限 给localhost(如果是外网主机这里就是对应ip地址),
#localhost通过账号为sysloguser密码为syspass使用Syslog数据库
mysql> grant all on Syslog.* to 'sysloguser'@'localhost' identified by 'syspass';
mysql> flush privileges; #刷新权限

5.修改Rsyslog配置文件

vim /etc/rsyslog.conf
#如果要接收其他主机的日志,需要开启相应的模块,以此打开对应监听端口
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$ModLoad ommysql

#追加模块 
$ModLoad ommysql
#追加规则::模块名:+ip地址,+数据库名,++登陆名,+登陆密码
user.notice                                     :ommysql:127.0.0.1,Syslog,s
ysloguser,syspass
#服务重启
[root@lin ~]# service restart rsyslog
#查看状态
[root@lin ~]# service rsyslog status
rsyslogd (pid  3700) is running...

6.测试

#如果是将日志服务器的内容通过网络存储到远程数据库服务器中,那么在测试过程当中
#需要进行防火墙配置
#发送日志
[root@lin ~]# logger this is a log to mysql
#登陆mysql后,使用数据库
mysql> use Syslog;
#查看表格
mysql> show tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
#查表
mysql> select * from SystemEvents\G;
*************************** 1. row ***************************
                ID: 1
        CustomerID: NULL
        ReceivedAt: 2020-08-09 04:12:50
DeviceReportedTime: 2020-08-09 04:12:50
          Facility: 1
          Priority: 5
          FromHost: lin
           Message:  this is a log to mysql   #确实是之前发送的日志内容,测试成功
        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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值