VPS测评 VPS推荐 VPS优惠
Linux运维

rsyslog教程:利用 MySQL 存储日志信息

本文将介绍如何把本地服务器的日志,发送到远程主机的MYSQL数据库中。

环境准备

两台主机

一台rsyslog日志服务器, IP:154.17.6.123

一台MYSQL数据库服务器,IP:154.3.32.85

系统:Ubuntu 20.04

实现步骤

日志服务器:

在rsyslog日志服务器上安装连接mysql模块的程序包

apt -y install rsyslog-mysql

安装的时候会弹出这个界面,因为我们的MYSQL在远程主机需要自己配置,所以这里选择NO。

存放日志需要创建数据库和表格,程序自带了SQL语句,只需要找到这个文件就可以

#如果没有apt-file命令执行以下操作
apt -y install apt-file
#查看rsyslog-mysql程序包里的文件
apt-file list rsyslog-mysql
#找到自带的SQL语句
cat /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql
#可以看到语句如下
CREATE TABLE IF NOT EXISTS SystemEvents
(
      ID int unsigned not null auto_increment primary key,
      CustomerID bigint,
      ReceivedAt datetime NULL,
      DeviceReportedTime datetime NULL,
      Facility smallint NULL,
      Priority smallint NULL,
      FromHost varchar(60) NULL,
      Message text,
      NTSeverity int NULL,
      Importance int NULL,
      EventSource varchar(60),
      EventUser varchar(60) NULL,
      EventCategory int NULL,
      EventID int NULL,
      EventBinaryData text NULL,
      MaxAvailable int NULL,
      CurrUsage int NULL,
      MinUsage int NULL,
      MaxUsage int NULL,
      InfoUnitID int NULL ,
      SysLogTag varchar(60),
      EventLogType varchar(60),
      GenericFileName VarChar(60),
      SystemID int NULL
);

CREATE TABLE IF NOT EXISTS SystemEventsProperties
(
      ID int unsigned not null auto_increment primary key,
      SystemEventID int NULL ,
      ParamName varchar(255) NULL ,
      ParamValue text NULL
);

数据库服务器:

由于要存放在远程的MYSQL数据库,所以我们在数据库服务器创建一个文件,然后把SQL语句复制进去执行。

首先在远程主机安装数据库

apt -y install mysql-server

然后执行以下命令

vim rsyslog.sql

把刚才看到的SQL语句复制进去,我发现它没有创建数据库的命令,所以我自己添加了两句命令。

CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE IF NOT EXISTS SystemEvents
(
      ID int unsigned not null auto_increment primary key,
      CustomerID bigint,
      ReceivedAt datetime NULL,
      DeviceReportedTime datetime NULL,
      Facility smallint NULL,
      Priority smallint NULL,
      FromHost varchar(60) NULL,
      Message text,
      NTSeverity int NULL,
      Importance int NULL,
      EventSource varchar(60),
      EventUser varchar(60) NULL,
      EventCategory int NULL,
      EventID int NULL,
      EventBinaryData text NULL,
      MaxAvailable int NULL,
      CurrUsage int NULL,
      MinUsage int NULL,
      MaxUsage int NULL,
      InfoUnitID int NULL ,
      SysLogTag varchar(60),
      EventLogType varchar(60),
      GenericFileName VarChar(60),
      SystemID int NULL
);

CREATE TABLE IF NOT EXISTS SystemEventsProperties
(
      ID int unsigned not null auto_increment primary key,
      SystemEventID int NULL ,
      ParamName varchar(255) NULL ,
      ParamValue text NULL
);

:wq 修改并保存退出以后,执行以下命令

mysql < rsyslog.sql

执行完以后存放日志的数据库就自动创建完成了

我们现在可以登录数据库(刚安装是没有root密码的)

mysql -uroot

创建远程登录数据库的用户,这里的IP地址是日志服务器的地址

CREATE USER rsyslog@154.17.6.123 IDENTIFIED BY "123456";

把管理日志数据库的权限授予用户

GRANT ALL ON Syslog.* TO rsyslog@154.17.6.123;

修改数据库的配置文件让MYSQL可以被远程连接

vim /etc/mysql/mysql.conf.d/mysqld.cnf 

找到bind address这一行修改成

bind-address            = 0.0.0.0

修改完成以后重启数据库服务

systemctl restart mysql

日志服务器:

修改rsyslog配置文件

在模块配置里加载刚才安装的mysql模块

vim /etc/rsyslog.conf
module(load="ommysql")

修改子配置文件

格式:

facility.priority :ommysql:数据库主机IP:数据库名:数据库用户名:数据库用户密码

vim /etc/rsyslog.d/50-default.conf 
*.info :ommysql:154.3.32.85,Syslog,rsyslog,123456

修改完配置后重启日志服务

systemctl restart rsyslog

测试

在日志服务器上生成一条日志

logger "guaguaguaguagua"

登录远程服务器的数据库执行SELECT查询

SELECT * FROM  Syslog.SystemEvents\G;

可以看到我们刚才发送的日志了

未经允许不得转载:青蛙主机 » rsyslog教程:利用 MySQL 存储日志信息

VPS相关常用工具

PING测试工具自用毛子接码站