我正在向 Percona 发送 syslog-ng。我将不同的日志记录源过滤到不同的 MySQL 表中。我正在尝试确定每秒、每分钟和每小时的日志数。
这是创建表的方式:
CREATE TABLE syslog.switchlogs (
host varchar(40) DEFAULT NULL,
facility varchar(10) DEFAULT NULL,
level varchar(10) DEFAULT NULL,
tag varchar(10) DEFAULT NULL,
program varchar(50) DEFAULT NULL,
msg text,
seq bigint(20) unsigned NOT NULL AUTO_INCREMENT,
timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (seq),
KEY host (host),
KEY timestamp (timestamp),
KEY host_timestamp (host,timestamp)
) ENGINE=InnoDB;
大多数表格都得到了我期望的结果:
上一个小时:
SELECT count(seq) as thecount FROM syslog.switchlogs WHERE timestamp>=DATE_SUB(NOW(),INTERVAL 1 HOUR);
最后一分钟:
SELECT count(seq) as thecount FROM syslog.switchlogs WHERE timestamp>=DATE_SUB(NOW(),INTERVAL 1 MINUTE);
最后一秒:
SELECT count(seq) as thecount FROM syslog.switchlogs WHERE timestamp>=DATE_SUB(NOW(),INTERVAL 1 SECOND);
我得到这样的结果:
小时:804
分钟:16
秒:1
我的一张表有 VMware 日志,我从计数中得到奇怪的结果......
小时:30,180
分钟:24,278
秒:24,160
这显然是错误的。如果我查看表中的最后 50 条日志,最后一秒只有 10 条,最后一分钟有 39 条。为什么上面的 SQL 没有按预期工作?