作者:很想爱到极限 | 来源:互联网 | 2023-05-22 20:45
我已经创建了一个PHP + MYSQL Web应用程序,我正在尝试实现一个日志记录系统来存储和跟踪每个用户的一些操作.
其目的如下:通过记录IP +时间+动作跟踪每个用户会话的活动,然后通过记录时间+页面名称查看他稍后访问的页面; 对于每个用户,将有一个文件格式为:log {userid} _ {month} .log
然后,每个日志将仅由网站所有者通过自定义管理面板查看,并且数据仅用于安全目的(如果他从其他IP登录或其他人登录时向用户显示)来自不同的IP并查看用户在登录会话期间访问的网站区域).
目前,我有一个MYSQL MyISAM表,我存储用户ID,IP,时间,动作和应用程序仍然没有启动,但我们打算有很多用户(超过100k),并使用数据库这个解决方案感觉像自杀.
所以你有什么建议?如何进行日志记录?使用文件,使用当前数据库中的表,使用单独的数据库?是否有适用于PHP的文件记录框架?
那么如何读取文件呢?按行阅读结果?
谢谢
1> Donovan Solm..:
你有很多选择,所以我会根据自己的经验说明,每月运行一个拥有大约50万用户的活动,每月活动100k,这似乎在你的范围内.
我们在MySQL数据库中记录了用户操作.
查询数据非常简单快捷(提供了良好的索引)
我们在Azure上运行,并有一个专用的MySQL(带有奴隶等),用于存储所有用户数据,包括日志.空间不是问题.
记录到MySQL可能会很慢,具体取决于您记录的所有内容,因此我们只需将日志推送到Redis并让Python应用程序从Redis读取并在后台插入MySQL.这使得日志记录基本上不会对加载时间产生影响.
我们决定登录MySQL以获取用户操作,因为:
我们希望在任何时候都可以毫不费力地对任何事情进行查询.用户操作日志的结构化格式非常容易实现.
如果您需要,它还允许您向用户显示某些日志.
当我们引入徽章时,我们无需解析文本日志以向那些执行特定操作X次的人颁发徽章.我们只是针对用户操作日志编写了一个查询,并授予了徽章.因此,基于操作添加功能也很容易.
我们确实使用了几个应用程序日志的文件记录 - 或者我们每天都没有查询的东西 - 例如写入数据库的Python应用程序,Web服务器访问和错误日志等.
我们使用Logstash来处理这些日志.它可以简单地挂钩到日志文件并将其流式传输到Logstash服务器.Logstash还可以查询您的日志,这非常酷.
高级用途
我们使用Slack进行团队通信,并将Python数据库编写应用程序集成到其中,这使我们能够将关键错误发送到某个渠道(通过他们的API),有人可以立即采取措施.
闭幕
我的建议是暂时不要考虑它,登录MySQL,查询并查看统计数据.进行更新,冲洗并重复.您希望快速保持部署和更新之间的循环,因此通过快速SQL查询做出决策可以轻松实现.
基本上你要避免的是登录服务器,查找日志以及grep
通过它查找内容的方式,上面实现了这一点.
这就是我们所做的,它仍然是这样运行的,我们没有计划很快改变它.我们没有任何问题,我们找不到任何我们需要的东西.如果有大量用户,我们将每月活跃用户扩展到1百万,那么我们可能会对其进行更改.
请注意:无论您决定记录哪种方式,如果您要保存POST数据,请务必不要使用信用卡信息,除非您符合要求.或者更确切地说使用Stripe的Javascript库.