我正在尝试设置 rsyslog 服务器,以便将日志保存到数据库中。我编写的 Web 应用程序易于维护并可搜索日志。但我有多个网络(不是在家里,而是在工作中,所以这里没有变化)。而且我无法从不同网络的系统保存日志。我的网络是 10.1.1.0/24,我的 rsyslog 位于那里(确切的 IP 是:10.1.1.130)。
这是我在服务器上使用的配置:
module(load="imudp")
input(type="imudp" port="514" )
module(load="imtcp")
input(type="imtcp" port="514" )
$template MariaDbTpl, "INSERT INTO SystemEvents (receivedAt, deviceTime, facility, priority, fromHost, syslogTag, message) VALUES ('%timegenerated:::date-mysql%', '%timereported:::date-mysql%', %syslogfacility%, %syslogpriority%, '%fromhost-ip%', '%syslogtag%', '%msg%')",SQL
$ModLoad ommysql
*.* action(type="ommysql" Server="127.0.0.1" ServerPort="3306" db="syslog" UID="user_syslog" PWD="<censored>" Template="MariaDbTpl")
以下是我的客户示例:
*.* @10.1.1.130:514
我正确设置了防火墙,因为从多个网络的连接成功了。但我在数据库中看不到来自不同网络的任何日志。经过几个小时的挖掘,我发现日志在本地文本文件 /var/log/messages 中,在这里我能够找到来自 10.1.1.0/24 之外的系统甚至来自不同网络 172.16.2.0/24、172.16.3.0/24、192.168.72.0/24 的日志,但不在数据库中。来自这些主机的所有消息都位于文件中,而不是数据库中。为了以防万一,这里是 SQL 表:
CREATE TABLE `SystemEvents` (
`aid` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
`receivedAt` DATETIME NOT NULL,
`deviceTime` DATETIME NOT NULL,
`facility` SMALLINT NULL DEFAULT NULL ,
`priority` SMALLINT NULL DEFAULT NULL ,
`fromHost` VARCHAR(64) NULL DEFAULT NULL ,
`syslogTag` VARCHAR(64) NULL DEFAULT NULL ,
`message` TEXT NULL DEFAULT NULL ,
CONSTRAINT `PRIMARY` PRIMARY KEY (`aid`, `receivedAt`)
);
所有来自位于 10.1.1.0/24 的系统日志都在这里,每秒都有数十个新日志,运行良好。就在我尝试从位于不同网络的系统发送它时(我能够通过 netcat - linux 和 Test-NetConnection - windows 检查连接,一切顺利)。到底是什么出了问题?在网上搜索了几天,我还是找不到这个问题的解决办法。