php yii2的访问日志系统?

时间:2017-07-15 09:45:54

标签: php mysql hadoop nginx yii

我使用PHP开发网站,特别是使用 YII 2 framewor k。 Web服务器正在使用NginxPHP engine是php-fpm。问题是我想跟踪哪个用户访问了带有参数的webpage URL地址。 Yii2本身有一个日志记录系统,但主要用于错误和调试目的。我知道nginx有日志记录系统可以记录访问日志,但我需要记录我的数据库中的确切用户名,用户名,我认为nginx无法记录这一点。

我想在每次用户访问页面时将这些信息记录到另一个Mysql表中,但我担心表可能会很快增长,看起来使用关系数据库可能不是一个好主意。

我应该使用 Hadoop 吗?还是其他常见的做法来解决这类问题?谢谢你的任何建议。

2 个答案:

答案 0 :(得分:1)

如果你想

  

跟踪哪个用户使用参数访问了哪个网页网址

nginx访问日志是一个更好的选择,因为mysql会严重损害你的性能。

假设用户ID是查询字符串中的参数uid,您可以通过添加字段$arg_uid来自定义nginx的访问日志。如果用户标识是uri的一部分,则可能需要使用正则表达式的配置位置来捕获它。

如果无法直接从请求获取用户ID,则必须有一个与一个且只有一个用户相关的令牌,可以从mysql或redis中重新获得。在这种情况下,有两种方法:

  1. 将用户ID作为标题返回,例如php中的X-UID,然后在访问日志中添加变量$upstream_http_X_UID。如果您不想将此标头返回给客户端,请添加一个指令proxy_hide_header X-UID;以从php响应中删除此标头。
  2. 使用nginx-lua模块构建nginx并为log_by_lua指令编写一段lua脚本,其中根据该令牌从mysql或redis查询用户id。然后通过添加用户id变量来自定义nginx的访问日志。
  3. 根据您的具体情况,选择最佳解决方案。 我希望这会对你有所帮助。

答案 1 :(得分:0)

我没有Hadoop的经验,但由于在MySQL表格中存储了数百万的综合浏览量(40GB),我在过去遇到了问题。

但基本上问题不在于存储,而是如何实际使用该数据。

MySQL可以处理我认为的大量数据但是根据你需要显示它的方式,你可能要么有一些cronjob做一些优化,并以不同的格式保存到另一个表,所以很容易显示它,或者要么学习一些可能有帮助的NoSQL数据库。

顺便说一下,我听说GetClicky Analytics的人正在使用纯文本文件存储数据,所以我想你也可以选择这个选项。

如果您选择使用MySQL,还有其他一些想法:

  • 也许看一下表分区?
  • 也许在Yii2中创建一个单独的数据库和一个单独的数据库连接,并使用该数据库连接仅存储访问日志?这样您就不会将访问数据与应用数据混合
  • 也许两个?
相关问题