1、

https://blog.csdn.net/weixin_33712536/article/details/113491878

一、需求

统一收集Linux各系统的系统日志保存在MySQL数据库中。

二、架构

利用Linux系统自带的rsyslog/syslog/syslog-ng等自带服务来发送、接收和转发系统日志。

因rsyslog功能强大,维护性强,我们统一采用它来进行发送和接收数据。

有两种架构可供使用:

一种是客户端使用rsyslog工具直接发送日志到一台服务器的MySQL数据库中

一种是客户端使用rsyslog工具把日志统一发送给一台rsyslog服务器上,然后rsyslog服务再把日志发送给MySQL中。

这里是推荐使用第二种方案。

 

三、服务端部署安装

3.1 rsyslog安装

# yum install rsyslog# yum install rsyslog-mysql
开机自启动

#chkconfig rsyslog on
3.2 Mysql安装

#yum install mysql mysql-server
启动服务

#service mysqld start
开机启动

#chkconfig mysqld on
设置MySQL密码

#mysqladmin -u root password 'root123456'
创建保存日志的库Syslog(可自定义,只要后面配置时对应就行)

> create database Syslog CHARACTER SET utf8;
添加用于管理日志数据库的用户syslog(可自定义,只要配置后面时对应就行)

>grant all privileges on Syslog.* to 'syslog'@'%' with grant option;>update mysql.user set password=PASSWORD('root456789') where User='syslog';>FLUSH PRIVILEGES;
更改Mysql数据目录到/data:

#mkdir -p /data/mysql#chown mysql:mysql /data -R
停止mysql服务

#service mysqld stop
复制原目录到新目录中

#cd /var/lib/mysql#cp -Rp * /data/mysql#chown mysql:mysql /data/mysql
修改my.cnf

[mysqld]datadir=/data/mysqlsocket=/data/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links
重启服务

# service mysqld restart
3.3 配置部署

1、在Mysql中添加制定好的表结构

序列号ID

日志接收时间 Timestamp

日志产生的时间 EventTime

产生日志的设施 Facility

日志告警级别 Priority

产生日志的主机名 FromHost

产生日志的主机 IPFromIP

日志内容 Message

日志的类型 InfoUnitID

产生日志的服务 SysLogTag

产生日志的进程 Process

产生日志的进程PID ProcessID

use Syslog;CREATE TABLE SystemEvents( ID int unsigned not null auto_increment primary key comment '序列号', Timestamp datetime NULL comment '日志接收时间', EventTime datetime NULL comment '日志产生的时间', Facility smallint NULL comment '产生日志的设施,如kern,mail,cron', Priority smallint NULL comment '日志告警级别', FromHost varchar(60) NULL comment '产生日志的主机名', FromIP varchar(60) NULL comment '产生日志的ip', SysLogTag varchar(60) NULL comment '产生日志的进程+进程号,如sshd[6443],crond[3823]', Process varchar(60) NULL comment '产生日志的进程名', ProcessID varchar(10) NULL comment '产生日志的进程号', InfoUnitID int NULL comment 'Messagetype:日志类型', Message text comment '日志内容') ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、修改rsyslog配置文档,使其接收日志,并发送日志到Mysql数据库

#vim /etc/rsyslog.conf

# 开启udp端口514接收远端数据$ModLoad imudp$UDPServerRun 514# 开启tcp端口514接收远端数据$ModLoad imtcp$InputTCPServerRun 514#加载rsyslog-mysql模块,用于插入数据到Mysql数据库$ModLoad ommysql#创建一个自己的模板,对应表结构插入相对应数据$template myFormat,"insert into SystemEvents (Message, Facility, FromIP, FromHost, Priority, EventTime, Timestamp, InfoUnitID, SysLogTag, Process, ProcessID) values ('%msg%', %syslogfacility%, '%fromhost-ip%', '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%', '%programname%', '%procid%')",SQL#增加Mysql数据库连接账号和密码。数据库连接地址,数据库名称,用户名,密码,模板名称*.*;mail.none :ommysql:localhost,Syslog,syslog,root456789;myFormat
重启rsyslog服务

#service rsyslog restart

服务器端报错问题解决:

ln -s  /tmp/mysql.sock  /var/lib/mysql/mysql.sock 

 

 


四、客户端配置

4.1 配置客户端rsyslog

#vim /etc/rsyslog.conf#添加下面一行代码,@@表示使用的是TCP传输,@表示使用的是UDP传输*.*;mail.none @@接收服务器IP:514
除了mail产生的日志外,其它日志都都通过tcp协议发往rsyslog服务器上。

重启rsyslog服务

#service rsyslog restart
4.2 发送测试日志

通过logger命令产生新日志,测试是否正常发送日志到服务端

#logger -p info ‘这条是测试’
然后到mysql数据库中查询是否有这条数据插入,如果有,说明部署正常,如没有,请仔细排查问题。

五、注意事项

5.1 数据发送不成功

主要可能有几点:

1、客户端、服务端、Mysql数据库三个节点之间是否通顺

从客户端用telnet命令测试服务端rsyslog端口是否通顺

在rsyslog服务端测试是否能远程连上Mysql数据库

2、rsyslog服务端中的表结构和数据库结构是否对应

在rsyslog.conf文件中自定义表结构时,要注意一一对应。
————————————————

2、

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-05-11 centos7备份系统日志
2021-05-11 mysql删除带外键约束的表的方法

随笔 - 618, 文章 - 0, 评论 - 6, 阅读 - 37万

Copyright © 2025 风行天下-2080
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示