我们可以通过集中式日志服务器将多台机器的日志收集在一个日志服务器,然后通过脚本或者其他方式去分析,但是真正做过运维的小伙伴明白,日子收集在硬盘上,硬盘的空间有限且大文件分析起来IO压力超级大,分析日志需要高超的技术,一般运维人员分析起来会很困难,更无法实时的去查看某个机器的日志。这样的话我们的日志收集就变成了真正意义上的收集了,收集起来如何利用就变成了一个难题,总结一下主要的问题就是以下几点:
- 日志文件巨大,硬盘IO压力大
- 无法实时分析
- 分析需要消耗很多计算机资源且困难
如何解决这个问题呢?
- IO压力: 我们可以将日志收集在数据库中,海量的日志通过分布式存储的底层支撑加上数据库对数据的高效管理,使得数据读写变得轻松,避免了原理日志服务器的 IO 压力。
- 无法实时分析:可以部署一个 日志分析系统来辅助分析,苦难的分析工作瞬间变得简单。
- 分析需要消耗很多计算机资源: 分布式处理分担处理压力
高性能的日志收集、存储、分析架构,同时也是一个可以使用 web 页面查看日志的可视化架构:
rsyslog + mariadb + loganalyzer
一、 server 端的环境准备 和 设置
1.1、安装软件包
bash
[root@long90 ~]# dnf install mariadb mariadb-server rsyslog-mysql-8.2102.0-5.el8.x86_64 -y
1.2、配置 mariadb 服务
bash
[root@long90 ~]# systemctl restart mariadb.service
[root@long90 ~]# systemctl status mariadb.service
● mariadb.service - MariaDB 10.3 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2022-11-28 19:47:31 CST; 21s ago
设置 mysql root 密码
bash
[root@long90 ~]# mysqladmin -u root password Tangyulong90?
[root@long90 ~]# cd /usr/share/doc/rsyslog/
测试 mariadb
bash
[root@long90 rsyslog]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.28-MariaDB MariaDB Server
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)
导入 日志数据库架构 Syslog
bash
[root@long90 rsyslog]# mysql -u root -p < mysql-createDB.sql
Enter password:
[root@long90 rsyslog]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.3.28-MariaDB MariaDB Server
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| Syslog |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)
配置用户跟权限
bash
MariaDB [(none)]> create user 'syslogroot'@'%';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'127.0.0.1' identified by 'syslogpasswd';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'192.168.8.86' identified by 'syslogpasswd';
Query OK, 0 rows affected (0.000 sec)
MariaDB [none]> grant all on Syslog.* to 'syslogroot'@'192.168.8.8' identified by 'syslogpasswd';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all on Syslog.* to 'syslogroot'@'192.168.8.1' identified by 'syslogpasswd';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> quit;
物理机 win11 ip 192.168.8.1
1.3、 修改 rsyslog 服务的配置文件
服务器端:192.168.8.8
bash
[root@long90 rsyslog]# vim /etc/rsyslog.conf
22 # Provides TCP syslog reception
23 # for parameters see http://www.rsyslog.com/doc/imtcp.html
24 module(load="imtcp") # needs to be done just once
25 input(type="imtcp" port="514")
26 module(load="ommysql")
66
67 # 使用 ommysql 模块,将日志信息发送到日志服务192.168.8.8中的 Syslog 数据库
68 *.* :ommysql:192.168.8.8,Syslog,syslogroot,syslogpasswd
[root@long90 rsyslog]# systemctl restart rsyslog.service
二、测试
2.1、测试数据能否记录到数据库中
bash
[root@long90 ~]# logger "this is a test from 192.168.8.8."
MariaDB [Syslog]> select * from SystemEvents\G
*************************** 1. row ***************************
ID: 1
CustomerID: NULL
ReceivedAt: 2022-11-28 20:48:11
DeviceReportedTime: 2022-11-28 20:48:11
Facility: 1
Priority: 5
FromHost: long90
Message: this is a test 192.168.8.8; # 看到之前使用 logger 产生的日志信息及代表 rsyslog 可以将日志信息存入数据库中
NTSeverity: NULL
2.2、设置 客户端 192.168.8.86
bash
[root@rhel8 ~]# yum install rsyslog-mysql.x86_64 -y
[root@rhel8 ~]# vim /etc/rsyslog.conf
22 # Provides TCP syslog reception
23 # for parameters see http://www.rsyslog.com/doc/imtcp.html
24 module(load="imtcp") # needs to be done just once
25 input(type="imtcp" port="514")
26 module(load="ommysql")
local7.* /var/log/boot.log
*.* @192.168.8.8
#*.* @@192.168.8.8
*.* :ommysql:192.168.8.8,Syslog,syslogroot,syslogpasswd
[root@rhel8 ~]# systemctl restart rsyslog.service
2.3、在服务端 192.168.8.8 查看数据是否保存到数据库 Syslog 中
bash
MariaDB [Syslog]> select * from SystemEvents\G
...
FromHost: rhel8
Message: hello this is a test from 192.168.8.86.
NTSeverity: NULL
...
三、sever (192.168.8.8)端 安装支持 web 页面查看日志的工具 loganalyzer
3.1、下载 loganalyzer-4.1.8.tar.gz
3.2、搭建 LAMP
bash
dnf install httpd php php-mysqlnd php-gd -y
tar xf loganalyzer-4.1.8.tar.gz
cd loganalyzer-4.1.8/
cp -r src/* /var/www/html/
cp contrib/* /var/www/html/
cd /var/www/html/
sh configure.sh
systemctl restart httpd
# 创建 loganalyzer 数据库
mysql -u root -p
MariaDB [(none)]> create database loganalyzer;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> create user 'loganalyzer'@'%';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on loganalyzer.* to loganalyzer@'192.168.8.8' identified by 'loganalyzer';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> quit;
3.3、打开浏览器,部署 loganalyzer