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、
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-05-11 centos7备份系统日志
2021-05-11 mysql删除带外键约束的表的方法