通过mysql中的大致时间戳匹配日志文件

时间:2017-11-20 20:58:08

标签: mysql

我有两个我想要匹配的日志文件。一个表是来自三个服务器的原始Apache日志,全部下拉到一个用户ID,另一个是同一用户在另一个系统中的活动。 Apache正在为这个其他系统提供服务,但这两个日志并不是100%完全相同的时间戳。 Apache将为其他系统中的每个操作提供14个条目。它们通常具有相同的时间戳,但也可能是几秒钟不同步。它只是一个用户,我试图从Apache日志中获取该用户的IP地址,以便与其他日志上的特定操作相匹配。如果时间戳完全相同,我可以这样做。

这有效:

SELECT DISTINCT `a`.`Timestamp`, `a`.`OriginIP`, 
    `a`.`User_browser`, `c`.`Activity_ID`, `c`.`DATA`
    from `Tomcat_server_logs` `a`
    INNER JOIN `user_activity` `c` ON
       `a`.`Timestamp`=`c`.`Timestamp`
       INNER JOIN
        (
          SELECT `Timestamp`, `Activity_ID`, `DATA`
          FROM `user_activity`
          GROUP BY `Timestamp`
        ) b ON c.Timestamp = b.Timestamp AND
          c.`Activity_ID` = b.`Activity_ID` AND
          c.`DATA` = b.`DATA`
   WHERE (c.`DATA` LIKE '%submit%') or (c.`DATA` LIKE '%uploadFile')
ORDER BY c.`Timestamp`;

但它只为我提供了与此用户完全相同的时间戳的IP地址。它略微跳过不同步的条目。

恐怕我已经被大脑打破,想弄清楚如何说出这样的话:

    ...
    INNER JOIN `user_activity` `c` ON
       ((`a`.`Timestamp` <= ADDTIME(`c`.`Timestamp`,'0 0:0:4') 
       AND (`a`.`Timestamp` >= SUBTIME(`c`.`Timestamp`,'0 0:0:4'))
       INNER JOIN
       ...

但显然这不是一个好的语法。

0 个答案:

没有答案