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
-
说明:这个参数旨在明确究竟是哪一个服务(程序)在打印日志信息。使得配置文件明确日志的来源,从而进行相应的处理。
-
设施类型:
设施 说明 auth PAM产生的日志,认证日志 authpriv FTP,SSH等登陆认证日志 mail 邮件日志 cron 计划任务(时钟进程) kern 内核启动日志 FTP FTP日志信息 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.128:514 #本地存储日志 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