PHP应用程序日志存储


PHP app log storage

我们的PHP&基于MySQL的应用程序创建自定义日志,这些日志被写入MySQL数据库以供用户操作。我们这样做主要是为了便于搜索,因为该应用程序已经使用MySQL进行持久存储,所以这很有意义。

我们的日志现在包含1760万行,大小为2GB。在这个地方走动时不是那么友好。

我想知道社区可能会建议什么更好、更有效的方式来存储日志。

很明显,您可以将该表拆分为1周的所有日志,然后删除非关键日志,并将该表一分为二,用于历史关键日志,如付款等。

一般来说,我们通过等函数写入日志

playerlog($id,$message,$cash,$page,$ip,$time);

但这是一个相当简化的版本,我们也使用MySQL的INSERT DELAYED,因为日志对页面加载并不重要。

如果您有兴趣使用MongoDB(我从标签中推测)来完成这项工作,您可能想看看这里:http://docs.mongodb.org/manual/use-cases/storing-log-data/

您应该明确需要哪些日志。作为插入后的第二步,您可以设置一个处理日志数据的作业,例如读取日志并对其进行处理(这会将DBMS降级为某种消息中间件)。这可能是将部分(如付款)存储到不会被删除的存档中,或者将身份验证日志写入指定保留时间后被删除的位置。但这一切都取决于您的用例。

根据您计划分析的内容或查询数据的方式,您甚至可以将它们存储在MySQL之外。

一些可能性:

  • 实施SIEM系统(http://en.wikipedia.org/wiki/Security_information_and_event_management)用于分析事件、触发警报等
  • 使用类似于SIEM的软件,如Splunk(请参阅Splunk.com),该软件适用于原始日志,并用于日志搜索和分析
  • 如果DBMS解决方案"足够快",请坚持使用它
  • 只需使用syslog并存储文本日志文件——然后就可以跳过整个MySQL