我已经创建了一个PHP+MYSQL网络应用程序,我正在尝试实现一个日志系统来存储和跟踪每个用户的一些操作。
这样做的目的是:通过记录IP+time+action来跟踪每个用户会话的活动,然后查看他稍后通过日志记录time+pagename访问的页面;对于每个用户,将有一个格式的文件:IP+time+action
然后,每个日志将仅由网站所有者通过自定义管理面板查看,并且数据将仅用于安全目的(例如,向用户显示他是否从不同的IP登录或其他人从不同的IP登录,并查看用户在登录会话期间访问的网站的哪些区域)。
目前,我有一个MYSQL MyISAM表,其中存储用户IP、IP、时间、动作和应用程序仍然没有启动,但是我们打算有很多用户(超过100 k),使用数据库来解决这个问题就像自杀一样。
那你有什么建议?如何进行日志记录?使用文件,使用当前数据库中的表,还是使用单独的数据库?是否有任何可用于PHP的文件日志框架?
那么,应该如何读取文件呢?逐行阅读结果?
谢谢
发布于 2015-02-11 10:32:11
你有很多选择,所以我将根据我的经验,运行一家拥有大约50万用户的初创公司,每个月有10万名活跃用户,这似乎就在你的范围之内。
我们在MySQL数据库中记录了用户操作。
我们决定登录MySQL进行用户操作,因为:
我们确实在一些应用程序日志中使用了文件日志--或者我们每天都不进行查询--比如Python应用程序写入数据库、We服务器访问和错误日志等等。
我们使用洛格斯塔什来处理这些日志。它可以简单地连接到日志文件并将其流到您的Logstash服务器。Logstash还可以查询您的日志,这非常酷。
高级使用
我们使用松懈进行团队通信,并将Python数据库编写应用程序与之集成在一起,这使我们能够将关键错误发送到一个通道(通过他们的API),在该通道中,有人可以立即执行修复操作。
关闭
我的建议是暂时不要想太多,登录到MySQL,查询并查看统计数据。更新,冲洗,重复。您希望保持部署和更新之间的快速循环,因此从快速SQL查询中做出决策很容易。
基本上,您想要避免的是登录到服务器,找到一个日志,然后grep通过它找到一些东西,上面实现了这一点。
这就是我们所做的,它仍然是那样运行的,我们没有计划很快改变它。在我们找不到我们需要的任何东西时,我们没有遇到任何问题。如果有大量的用户,并且我们扩大到每月100万活跃用户,那么我们可能会改变它。
请注意:无论您决定以哪种方式登录,如果您正在保存帖子数据,请确保永远不要这样做,除非您是符合的信用卡信息。或者更确切地说,使用条带的JavaScript库。
发布于 2015-02-11 10:45:52
如果您确信每次读取日志将主要针对一个用户,则应该考虑使用http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html作为分区键对日志表进行分区: user_id。
最大分区数为1024,您将有一个分区存储100 k用户的1/1000,这是合理的。
发布于 2015-02-11 10:54:29
是否有任何可用于PHP的文件日志框架?
有一个在包装商上可用的:https://packagist.org/packages/psr/log
注意,它不是一个文件日志框架,而是一个基于FIG的PSR-3标准的记录器的API。因此,如果您愿意,它是PHP的“标准”记录器接口。您可以构建一个实现此接口的记录器,或者在打包器上搜索实现该接口的其他记录器(无论是基于文件的还是基于MySQL的)。在包装工人(茶杯,林业)上还有其他一些伐木者,但最好是使用符合PSR标准的伐木者。
https://stackoverflow.com/questions/28394905
复制相似问题