Php 日志文件与数据库在何处保存用户活动数据以供分析?

Php 日志文件与数据库在何处保存用户活动数据以供分析?,php,database,machine-learning,bigdata,Php,Database,Machine Learning,Bigdata,我目前正在一个网站上工作,该网站具有登录功能。我需要跟踪用户活动,如登录注销时间、浏览总持续时间、IP地址、位置等。所有这些数据将用于分析和安全目的 现在,有两种方法(至少我知道)可以将如此庞大的数据保存在数据库或日志文件中 保存在数据库或日志中的正确做法是什么 如果有人想知道,我使用PHP作为编程语言,使用MySQL作为数据库,在数据分析方面没有任何经验。我认为数据库是正确的选择。它更强大、更灵活。否则,您将得到(多个?)大而无意义的文件。我认为DB是正确的选择。它更强大、更灵活。否则,您将得

我目前正在一个网站上工作,该网站具有登录功能。我需要跟踪用户活动,如登录注销时间、浏览总持续时间、IP地址、位置等。所有这些数据将用于分析和安全目的

现在,有两种方法(至少我知道)可以将如此庞大的数据保存在数据库或日志文件中

保存在数据库或日志中的正确做法是什么


如果有人想知道,我使用PHP作为编程语言,使用MySQL作为数据库,在数据分析方面没有任何经验。

我认为数据库是正确的选择。它更强大、更灵活。否则,您将得到(多个?)大而无意义的文件。

我认为DB是正确的选择。它更强大、更灵活。否则,您将得到(多个?)大而无意义的文件。

最好使用DB,因为如果您想按IP、位置等对登录尝试进行分析或排序。使用MySQL查询可以很容易地做到这一点,但当您进入日志时,您应该有一个编辑器,搜索某些内容将非常困难。 我个人在我的应用程序中记录了相同的功能,这里是一些如何获取浏览器信息和IP的代码

<?php

function log_login_activity($loginEmail, $loginAuthType = '', $loginAttemptStatus = '', $error = '', $loginRedirect = '',$HeaderInfo = ''){
    $loginTime = time();
    $browserInfo = getBrowser();
    $browser = $browserInfo['name'].' '.$browserInfo['version'];
    $loginIP = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "HTTPS" : "HTTP";
    $browserAgent = $browserInfo['userAgent'];
    DB::insert('?:login_logs',array('email' => $loginEmail, 'time' =>$loginTime, 'browserInfo' =>$browser, 'loginAuthType' =>$loginAuthType, 'IP' =>$loginIP, 'error' => $error, 'protocol' => $protocol, 'loginRedirect' => $loginRedirect, 'browser' => $browserAgent));
}

最好使用DB,因为如果您想按IP、位置等对登录尝试进行分析或排序。使用MySQL查询可以很容易地做到这一点,但当您进入日志时,您应该有一个编辑器,搜索某些内容将非常困难。 我个人在我的应用程序中记录了相同的功能,这里是一些如何获取浏览器信息和IP的代码

<?php

function log_login_activity($loginEmail, $loginAuthType = '', $loginAttemptStatus = '', $error = '', $loginRedirect = '',$HeaderInfo = ''){
    $loginTime = time();
    $browserInfo = getBrowser();
    $browser = $browserInfo['name'].' '.$browserInfo['version'];
    $loginIP = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "HTTPS" : "HTTP";
    $browserAgent = $browserInfo['userAgent'];
    DB::insert('?:login_logs',array('email' => $loginEmail, 'time' =>$loginTime, 'browserInfo' =>$browser, 'loginAuthType' =>$loginAuthType, 'IP' =>$loginIP, 'error' => $error, 'protocol' => $protocol, 'loginRedirect' => $loginRedirect, 'browser' => $browserAgent));
}

这肯定取决于两件事:
1.用户操作数量
2.数据使用场景。
例如,如果有500000条新的每日记录,您需要做的一切就是进行一些聚合分析,那么您可以将日志数据保存到HDFS,并使用Apache Hive或Apache Spark进行分析。
如果数据量仍然很大,并且您希望进行分析,并且希望能够基于用户和时间戳检索操作记录,那么您需要首先将数据保存在某个键值数据库(如Apache Cassandra)中,然后使用Apache Spark执行分析。 您可以阅读更多有关Cassandra和大数据场景的信息(免责声明:我在这家公司工作)

如果每天有2000条记录,您只需将其放入任何关系数据库并立即进行分析,这将是最好的解决方案。
这肯定取决于两件事:
1.用户操作数量
2.数据使用场景。
例如,如果有500000条新的每日记录,您需要做的一切就是进行一些聚合分析,那么您可以将日志数据保存到HDFS,并使用Apache Hive或Apache Spark进行分析。
如果数据量仍然很大,并且您希望进行分析,并且希望能够基于用户和时间戳检索操作记录,那么您需要首先将数据保存在某个键值数据库(如Apache Cassandra)中,然后使用Apache Spark执行分析。 您可以阅读更多有关Cassandra和大数据场景的信息(免责声明:我在这家公司工作)

如果每天有2000条记录,您只需将其放入任何关系数据库并立即进行分析,这将是最好的解决方案。

值得回到这里分析需求

通常,业务用户需要了解站点以业务为中心的行为。昨天有多少人登录了?他们在网站上花了多少时间?他们买了什么东西吗

满足此要求的常用方法是配置分析包(例如)。分析包善于理解网站上的行为,并且可以轻松配置以更改报告和分析结构。然而,他们通常不擅长报告个人行为,他们的报告基于“网络行为”——你必须将“点击添加到购物车按钮”转化为“购买东西”的商业概念

客户支持用户和应用程序逻辑需要了解个人的具体行为。当客户支持接到电话说“帮助,我无法登录”时,他们可能想知道该用户最后一次登录是什么时候?如果应用程序逻辑模块想知道该用户是否对产品X感兴趣,则需要知道他们是否看过相关产品

这些数据通常作为关系数据包含在数据库中,因为它很容易查询。然而,很难修改关系模型,非技术用户也不能编写SQL查询,因此它更加严格

技术用户需要了解应用程序的运行状况,并能够调查事件

此信息通常存储为日志文件。日志文件通常是巨大的——一个中等繁忙的网站每天会创建数GB的apache日志——并且只能使用专用的日志解析工具进行查询;这些都是针对技术用户,而不是商业人士。日志文件通常保留很短的时间(数周或数月),并每天轮换一次。因此,回答“用户x上次登录是什么时候”的问题可能需要解析一个月的日志文件,如果您在一个月后删除日志,您可能无法得到正确的答案。但是,日志语句很容易插入代码中,更改日志记录(例如,只记录“错误”,而不记录“调试”消息)也很容易


因此,对于“分析”(我假设是由业务用户进行的)——插入数据库或使用web分析。出于“安全目的”(我假设这是为了技术用户的事件分析)-日志文件。

值得回到这里分析需求

通常,业务用户需要了解站点以业务为中心的行为。昨天有多少人登录了?他们在网站上花了多少时间?他们买了什么吗