php yii2的访问日志系统?

nwsw7zdq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(402)

我正在使用php开发一个网站,特别是使用yii2框架。web服务器正在使用 Nginx , PHP engine 是php fpm。问题是我想跟踪哪个用户访问了哪个 webpage 带参数的url地址。 Yii2 它本身有一个日志系统,但主要用于错误和调试。我知道nginx有日志系统可以记录访问日志,但是我需要记录确切的userid,我认为username在我的数据库中 nginx 无法录制此内容。
每次用户访问一个页面时,我都会考虑将这些信息记录到另一个mysql表中,但是我担心这个表可能增长得很快,似乎使用关系数据库不是一个好主意。
我应该使用hadoop吗?或者其他常见的方法来解决这类问题?谢谢你的建议。

7y4bm7vi

7y4bm7vi1#

如果你想的话
使用参数跟踪哪个用户访问了哪个网页的url地址,
nginx访问日志是一个更好的选择,因为mysql会严重影响您的性能。
假设用户id是一个参数 uid 在查询字符串中,您可以通过添加字段来定制nginx的访问日志 $arg_uid . 如果用户id是uri的一部分,则可能需要带有regexp的配置位置来捕获它。
如果不能直接从请求中获取用户id,则必须有一个令牌与一个且只有一个用户相关,可以从mysql或redis中获取。在这种情况下,有两种方法:
返回user id作为头,例如php中的x-uid,然后添加变量 $upstream_http_X_UID 在访问日志中。如果不想将此头返回给客户端,请添加一个指令 proxy_hide_header X-UID; 从php响应中删除此标头。
使用nginx lua模块构建nginx,并为其编写一段lua脚本 log_by_lua 根据该令牌从mysql或redis查询用户id的指令。然后通过添加userid变量来定制nginx的访问日志。
根据您的具体场景,选择最佳解决方案。我希望这对你有帮助。

brccelvz

brccelvz2#

我没有使用hadoop的经验,但我过去遇到过一些问题,因为在mysql表(40gb)中存储了数百万个页面视图。
但基本上问题不是存储,而是如何实际使用这些数据。
我认为mysql可以处理大量数据,但根据您需要如何显示数据,您可能需要一些cronjob来进行一些优化,并以不同的格式保存到另一个表中,以便轻松地显示数据,或者了解一些nosql数据库,这可能会有所帮助。
顺便说一句,我听说getclicky analytics的人使用纯文本文件来存储数据,所以。。我想你也可以选择。
如果您选择使用mysql,还有其他一些想法:
也许可以研究一下表分区?
也许在yii2中创建一个单独的数据库和一个单独的数据库连接,并使用该数据库连接来只存储访问日志?这样你就不会把访问数据和应用数据混在一起
也许两者都有?

相关问题