我们可以通过集中式日志服务器将多台机器的日志收集在一个日志服务器,然后通过脚本或者其他方式去分析,但是真正做过运维的小伙伴明白,日子收集在硬盘上,硬盘的空间有限且大文件分析起来IO压力超级大,分析日志需要高超的技术,一般运维人员分析起来会很困难,更无法实时的去查看某个机器的日志。这样的话我们的日志收集就变成了真正意义上的收集了,收集起来如何利用就变成了一个难题,总结一下主要的问题就是以下几点:
- 日志文件巨大,硬盘IO压力大
- 无法实时分析
- 分析需要消耗很多计算机资源且困难
如何解决这个问题呢?
- IO压力:我们可以将日志收集在数据库中,海量的日志通过分布式存储的底层支撑加上数据库对数据的高效管理,使得数据读写变得轻松,避免了原理日志服务器的IO压力。
- 无法实时分析:可以部署一个日志分析系统来辅助分析,苦难的分析工作瞬间变得简单。
- 分析需要消耗很多计算机资源:分布式处理分担处理压力
接下来我就给大家介绍一款高性能的日志收集、存储、分析架构,
同时也是一个可以使用web页面查看日志的可视化架构:
rsyslog+mariadb+loganalyzer
环境准备:与前面课程提到的集中式日志服务器的架构一样,只是这个架构是在server上搭建的,也就是IP地址为192.168.1.55的这台主机上
server端的环境准备和设置
setp 1 安装所需要的软件包
[root@wing ~]# dnf install mariadb mariadb-server rsyslog-mysql -y
step 2 启动mariadb服务
[root@wing ~]# systemctl restart mariadb
[root@wing ~]# systemctl status mariadb
step 3 设置mariadb
##将mariadb的管理员密码设置为‘123456’
[root@wing ~]# mysqladmin -u root password 123456
##建立日志服务需要用到的数据库
[root@wing ~]# cd /usr/share/doc/rsyslog/
[root@wing rsyslog]# mysql -u root -p < mysql-createDB.sql
Enter password:
##进入到mariadb中验证一下是否有一个叫Syslog的数据库,如果有就代表前面的操作成功
[root@wing rsyslog]# mysql -u root -p
Enter password:
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| Syslog |
step 4 为后面将要用到的用户进行授权,允许用户访问mairadb中的Syslog库
#允许一个叫syslogroot的用户从127.0.0.1、192.168.1.55、192.168.1.18这三个ip地址访问我的数据库,密码为syslogpass,设置完成之后刷新一下并退出(如果你的架构中还有其它的主机,只要修改数据库语句中的IP地址即可)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'127.0.0.1'identified by 'syslogpass';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'192.168.1.55'identified by 'syslogpass';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'192.168.1.18'identified by 'syslogpass';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> quit
Bye
setp 5 修改rsyslog服务的配置文件
[root@wing ~]# vim /etc/rsyslog.conf
7 #### MODULES ####
.
.
.
24 module(load="imtcp") # needs to be done just once
25 input(type="imtcp" port="514")
26 module(load="ommysql")#加载一个叫ommysql的模块是日志服务可以连接mariadb
.
.
65 local7.* /var/log /boot.log
66
#告诉日志服务通过ommysql模块,将日志信息发送到192.168.1.55的Syslog库中,使用的用户名和密码就是我们在前一步设置的syslogroot,syslogpass
67 *.* :ommysql:192.168.1.55,Syslog,syslogroot,syslogpass
##重启日志服务
[root@wing ~]# systemctl restart rsyslog
step 6 测试一下日志信息能否记录到数据库中
[root@wing ~]# logger "hello test test test"
[root@wing ~]# mysql -u root -p
Enter password:
MariaDB [(none)]> use Syslog;
Database changed
MariaDB [Syslog]> select * from SystemEvents\G
*************************** 8. row ***************************
ID: 8
CustomerID: NULL
ReceivedAt: 2019-12-07 03:22:31
DeviceReportedTime: 2019-12-07 03:22:31
Facility: 1
Priority: 5
FromHost: localhost
Message: hello test test test
###如果可以看到我们之前使用logger产生的日志信息及代表rsyslog可以将日志信息存入数据库中
step 7 设置client(192.168.1.18),此步骤是唯一一步需要对client的做出的设置
##安装软件包
[root@wing ~]# dnf install rsyslog-mysql -y
##修改服务的配置文件添加相应内容(与server端添加的内容一致)
[root@wing ~]# vim /etc/rsyslog.conf
module(load="ommysql")
*.* :ommysql:192.168.1.55,Syslog,syslogroot,syslogpass
[root@wing ~]# systemctl restart rsyslog
###测试一下client的日志信息能否在server端的数据库中查看
###client
[root@wing ~]# logger "hello this is a test from client 18"
####server端使用与刚才相同的方法去查看内容
MariaDB [Syslog]> select * from SystemEvents\G
*************************** 28. row ***************************
ID: 28
CustomerID: NULL
ReceivedAt: 2019-12-07 03:30:28
DeviceReportedTime: 2019-12-07 03:30:28
Facility: 1
Priority: 5
FromHost: localhost
Message: hello this is a test from client 18
step 8 server端安装支持web页面查看日志的工具loganalyzer
[root@wing ~]# dnf install httpd php php-mysqlnd php-gd -y
[root@wing ~]# tar fx loganalyzer-4.1.8.tar.gz
[root@wing ~]# cp -r loganalyzer-4.1.8/src/* /var/www/html/
[root@wing ~]# cp loganalyzer-4.1.8/contrib/* /var/www/html/
[root@wing ~]# cd /var/www/html/
[root@wing html]# sh configure.sh
[root@wing html]# systemctl restart httpd
step 9 在mariadb中创建lyzeruser工具需要用到的库、用户并授权
[root@wing html]# mysql -u root -p
Enter password:
MariaDB [(none)]> create database loganalyzer;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> grant all on loganalyzer.* to lyzeruser@'192.168.1.55' identified by 'lyzeruser';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit
Bye
step 10 打开浏览器,部署loganalyzer