可使用 rsyslog 的 ommysql 模块将安全日志直写 mysql/mariadb;需启用模块、创建 syslogdb 数据库及 rsyslog 用户并授权,再导入官方 createdb.sql 建表。

可以使用 Rsyslog 的 ommysql 模块将匹配的安全日志(如来自 auth.log、secure 或特定 facility/severity 的日志)直接写入 MySQL/MariaDB 数据库。需确保模块已启用、数据库结构就绪、权限配置正确。
确认并启用 ommysql 模块
Rsyslog 默认可能未加载数据库输出模块。检查是否支持:rsyslogd -v | grep -i mysql
若无输出,需安装对应包(如 Debian/Ubuntu:`sudo apt install rsyslog-mysql`;CentOS/RHEL:`sudo yum install rsyslog-mysql` 或 `rsyslog-mysql.x86_64`)。
在 /etc/rsyslog.conf 或独立配置文件(如 /etc/rsyslog.d/50-mysql.conf)中启用模块:
module(load="ommysql")
创建数据库与表结构
登录 MySQL 创建专用数据库和用户(避免使用 root):
CREATE DATABASE IF NOT EXISTS syslogdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'rsyslog'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT INSERT ON syslogdb.* TO 'rsyslog'@'localhost'; FLUSH PRIVILEGES;
建表推荐使用 Rsyslog 官方提供的 createDB.sql(通常位于 /usr/share/doc/rsyslog/mysql-createDB.sql 或 /usr/share/rsyslog/mysql-createDB.sql),执行导入:
mysql -u root -p syslogdb
该脚本会创建 SystemEvents 表,含字段如 Message、FromHost、Severity、Facility、ReceivedAt 等,适配标准日志结构。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
配置规则:筛选安全日志并转发到 MySQL
在 /etc/rsyslog.d/50-mysql.conf 中添加规则(注意顺序:过滤规则需在模块加载之后、全局日志规则之前):
# 仅捕获 auth/authpriv 设施的日志(如 SSH 登录、sudo、PAM 事件)
if $syslogfacility-text == 'auth' or $syslogfacility-text == 'authpriv' then {
action(
type="ommysql"
server="localhost"
serverport="3306"
db="syslogdb"
uid="rsyslog"
pwd="StrongPass123!"
template="RSYSLOG_SyslogProtocol23Format"
)
}
<h1>可选:额外捕获包含关键词的安全事件(如 "Failed password"、"Invalid user")</h1><p>if $msg contains 'Failed password' or $msg contains 'Invalid user' or $msg contains 'session opened' then {
action(
type="ommysql"
server="localhost"
serverport="3306"
db="syslogdb"
uid="rsyslog"
pwd="StrongPass123!"
template="RSYSLOG_SyslogProtocol23Format"
)
}</p>说明:
-
template="RSYSLOG_SyslogProtocol23Format"是标准模板,确保字段映射到SystemEvents表各列;也可自定义模板(需同步修改表结构) - 多条件判断用
or、and,字符串匹配用contains或isequal - 建议把 MySQL 输出规则放在
*.* /var/log/syslog等通用规则之前,避免日志被提前写入文件而跳过数据库写入
重启服务并验证
保存配置后,校验语法并重启:
sudo rsyslogd -N1 # 无输出表示配置正确 sudo systemctl restart rsyslog
触发一条安全日志(例如:logger -p auth.info "Test auth log from rsyslog"),然后检查数据库:
mysql -u rsyslog -p syslogdb -e "SELECT FromHost, Message, ReceivedAt FROM SystemEvents ORDER BY ReceivedAt DESC LIMIT 5;"
若看到新记录,说明写入成功。可结合 tail -f /var/log/syslog 和数据库查询交叉验证实时性。










