在 Ubuntu 上将 syslog 导入数据库(如 MySQL / PostgreSQL)通常有几种成熟方案。下面按常用程度和实操性给你一个完整思路。
| 方案 | 说明 | 适合场景 |
|---|---|---|
| rsyslog + MySQL/PostgreSQL 模块 | 最常用,原生支持 | 生产环境 |
| syslog-ng + SQL | 配置灵活 | 复杂日志处理 |
| Filebeat + Logstash + ES | 非关系型数据库 | 日志分析平台 |
| 脚本定时解析日志文件 | 简单但不实时 | 测试 / 小系统 |
sudo apt update
sudo apt install rsyslog rsyslog-mysql mysql-server -y
rsyslog-mysql提供ommysql模块
mysql -u root -p
CREATE DATABASE Syslog;
CREATE USER 'rsyslog'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON Syslog.* TO 'rsyslog'@'localhost';
FLUSH PRIVILEGES;
导入表结构(rsyslog 自带):
mysql -u rsyslog -p Syslog < /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql.sql
表名通常为
SystemEvents
编辑:
sudo vim /etc/rsyslog.conf
加载模块:
module(load="ommysql")
在末尾添加:
*.* action(type="ommysql"
server="localhost"
db="Syslog"
uid="rsyslog"
pwd="password")
sudo systemctl restart rsyslog
sudo systemctl status rsyslog
SELECT * FROM SystemEvents ORDER BY ReceivedAt DESC LIMIT 10;
✅ 成功的话就能看到 syslog 实时写入数据库
安装:
sudo apt install rsyslog-pgsql
配置类似,只是使用 ompgsql 模块。
只存 auth 日志:
auth.* action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="password")
DELETE FROM SystemEvents WHERE ReceivedAt < NOW() - INTERVAL 30 DAY;
如果你告诉我:
我可以给你一套更精确的配置方案。