Rsyslog不原生支持SNMP模块,仅可通过snmptrapd或omprog间接集成;但真实支持MySQL输出,需安装rsyslog-mysql包、加载ommysql模块并配置数据库。

Rsyslog 本身不直接提供 snmp 输入或输出模块,官方模块列表中没有 imsnmp 或 omsnmp 这类标准模块。所谓“Rsyslog 支持 SNMP”通常是指:
- 通过外部工具(如
snmptrapd)接收 SNMP Trap,再将消息转为 syslog 格式写入/dev/log,由imuxsock模块捕获; - 或使用自定义脚本 +
omprog模块调用snmpset/snmpwalk等命令实现联动 —— 这不是原生 SNMP 模块支持,也不通过ModuleLoad启用。
而 MySQL 支持是真实存在的,但需满足两个前提:安装对应驱动包 + 正确加载 ommysql 模块。下面分两部分说明:
✅ 开启 MySQL 日志写入支持(真正可用的 ModuleLoad)
-
确认已安装 rsyslog-mysql 驱动包
不同发行版命令不同:# CentOS/RHEL 7+ yum install rsyslog-mysql -y # Ubuntu/Debian apt-get install rsyslog-mysql -y
-
在
/etc/rsyslog.conf或/etc/rsyslog.d/50-mysql.conf中加载模块
添加以下两行(顺序不能颠倒):module(load="ommysql") # 必须先加载输出模块 action(type="ommysql" server="localhost" db="Syslog" uid="rsyslog" pwd="your_password" template="RSYSLOG_TraditionalFileFormat")
⚠️ 注意:
ommysql是输出模块(output module),用于把日志写进 MySQL;它不监听或解析 SNMP 数据。 -
准备 MySQL 数据库与表结构
- 导入官方建库脚本(路径因版本而异):
mysql -u root -p < /usr/share/doc/rsyslog-mysql*/createDB.sql
- 创建专用用户并授权:
CREATE USER 'rsyslog'@'localhost' IDENTIFIED BY 'your_password'; GRANT INSERT,SELECT ON Syslog.* TO 'rsyslog'@'localhost'; FLUSH PRIVILEGES;
- 导入官方建库脚本(路径因版本而异):
❌ SNMP 功能无法通过 ModuleLoad 直接开启
Rsyslog 官方不提供 SNMP 协议栈模块(无 imsnmp, omsnmp, mmssnmp 等)。如果你看到某些文档提到 ModuleLoad imsnmp,基本属于误传、拼写错误或第三方非标补丁。
可行替代方案:
-
用 snmptrapd 接收 Trap → 转发为 syslog
配置/etc/snmp/snmptrapd.conf:traphandle default /usr/bin/logger -t "SNMPTRAP" -p local6.info
然后确保 rsyslog 加载了
imuxsock(默认已启用),即可捕获logger写入的日志。 -
用 omprog 调用外部 SNMP 工具(高级用法)
示例:将某类日志触发snmpset告警:module(load="omprog") if $syslogfacility-text == 'local6' and $msg contains 'CRITICAL' then { action(type="omprog" binary="/usr/local/bin/send-snmp-alert.sh" template="RSYSLOG_FileFormat") }脚本
send-snmp-alert.sh内部调用snmpset,属于间接集成。
? 验证模块是否生效
重启服务后检查加载状态:
sudo systemctl restart rsyslog sudo rsyslogd -N1 # 语法检查(无报错即模块加载成功) sudo grep -i "mysql\|snmp" /var/log/messages # 查看启动日志是否有模块提示
若看到 ommysql: module loaded 表示 MySQL 输出模块就绪;若出现 module 'imsnmp' not found,说明该模块根本不存在。


















