2016-09-22 39 views
1

我需要为我的启动设置日志记录服务。我和我的团队没有时间和资源(金钱)来部署日志专用工具。不过,我需要对用户行为进行分析。虽然我要学习分析位并实现它,但我需要记录用户活动,以便稍后可以提取数据并进行数学计算。如何使用nodejs设置HTTP服务器进行日志记录?

我为我的主应用程序(这是一个Web服务)使用基于SQL的(RDBMS)安装程序并计划在DynamoDB(AWS)中记录用户活动。我打算设置一个本地(在同一台服务器上)的Node.Js服务器,它可以处理来自我的基于PHP的应用程序的日志请求,以确保日志记录活动在另一个进程中运行并且可以正常处理。而不会崩溃或减慢主服务器代码。这里的想法是 - 当用户发出请求时,PHP应用程序将调用NodeJS服务器。 NodeJS服务器将接受请求,立即返回,而排队请求(如说200个其他请求),并且PHP应用程序将继续为请求提供服务。 NodeJS服务器将一个接一个地记录队列中的所有内容。

我计划这样做的原因是 - NodeJS在单线程上运行,并且基于事件循环 - 因此,如果突然出现流量高峰,日志请求将排队并将数据发送到Dynamo最终没有让PHP应用程序等待确认。

注意:当我说用户活动,我的意思是应用级的日志记录,如:

  • 从ABCD IP地址的用户X试图在2016年9月10日以编号123来访问的文章14:21:22
  • 用户Y发表评论#234对文章#987在2016-09-10 18:30:02使用ABC应用程序。
  • 用户C从E.F.G.H IP地址登录到Web界面。

当然,数据将采用JSON格式,服务器将调用AWS SDK。

在这里,NodeJs服务器将基本上充当日志代理。基于到目前为止的想法/方案,我有以下问题:

  1. 是否决定使用DynamoDB进行日志记录请求还是出错?该服务符合我的预算。
  2. 在这种情况下,NodeJS会受到什么样的限制? nodejs可以吗?
  3. 我应该使用哪些节点模块? HTTP服务器会做还是有模块公开可用于这种情况?
  4. 如何确保此服务器仅侦听来自同一台计算机的请求(环回)?
+0

您如何看待[Logstash](https://github.com/elastic/logstash)? – danilodeveloper

+0

@danilodeveloper我认为这是一个非常好的工具。但我没有足够的时间去完成。我也没有足够的资源来完成自己的任务,再加上维护它将成为头痛的问题。长远来说,非常重要的是。现在,对我来说很难(不幸)。 –

回答

2

这里将去TL; DR;回答:

1 - 使用DynamoDB进行日志记录请求的决定是否正确?是否我 出错?该服务符合我的预算。

DynamoDB是NoSQL的数据库服务,提供快速和可预测的性能,无缝的可扩展性,IMO是当我们谈论洛使用的好办法,预期你需要快速写入和快速阅读,没有日志之间的关系消息(我认为)。所以你可以在这里使用DynamoDB而没有问题。

2 - 在这种情况下,NodeJS会遇到什么样的限制? nodejs可以吗?

的NodeJS是(如你所说)单个线程是事件循环的基础,如果你有更多的要求比的NodeJS可以处理,你应该fork or somethinglike

我仍然认为你应该使用像Logstash这样的工具,但如果您确定可以使用NodeJS来做到这一点,那么您可能会获得成功。

3 - 我应该使用什么Node模块? HTTP服务器或 是否有可用于此类场景的公开可用的模块?

当我谈论记录策略时,首先想到的就是“网络上数以千计的软件包”,我不知道你是否在创业公司有这个功能,无论如何,我建议你使用UDP发送日志消息UDP (User Datagram Protocol),主要用于在Internet上的应用程序之间建立低延迟和丢包容忍连接。 您可以使用forexampledgram启动UDP NodeJS侦听器。 要将UDP日志消息发送到您的NodeJS服务器,您可以将Winston对照库与winston-udp plugin一起使用。或者,就你而言,从PHP服务器,你可以发送UDP消息socket或看看here免责声明:我不是在PHP的专家,所以我用Google搜索,我发现这些解决方案通过UDP发送日志消息,我不知道这是否是做的最好的方式:)

4 - 如何确保此服务器仅侦听来自同一台计算机(环回)的请求 ?

您可以使用Security Group

希望这些帮助做到这一点。

+0

HTTP服务器应该运行在不同端口上的同一台计算机上,以便将条目提交给独立于主应用程序的NodeJS。 –

相关问题