如何使用nodejs设置HTTP服务器进行日志logging?

我需要为我的启动安装日志logging服务。 我和我的团队没有时间和资源(金钱)来部署日志的专用工具。 不过,我需要运行用户行为分析。 当我要学习分析位并实现它时,我需要logging用户活动,以便稍后可以抽出数据并进行math计算。

我正在为我的主应用程序(这是一个Web服务)使用基于SQL(RDBMS)的设置,并计划在DynamoDB(AWS)中logging用户活动。

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

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

注意 :当我说用户活动 ,我的意思是应用程序级日志logging,如:

  • 来自ABCD IP地址的用户X在2016-09-10 14:21:22试图访问ID为123的文章
  • 用户Y在2016-09-10 18:30:02发表评论#234文章#987使用ABC应用程序。
  • 用户C从EFGH IP地址login到Web界面。

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

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

  1. 是否决定使用DynamoDB进行logging请求还是我犯了一个错误? 该服务符合我的预算。
  2. 在这种情况下,NodeJS有什么样的限制? nodejs可以吗?
  3. 我应该使用什么Node模块? HTTP服务器会做还是有模块公开可用于这种情况?
  4. 如何确保该服务器只侦听来自同一台计算机的请求(环回)?

这里会去TL; DR; 回答:

1 – 是否决定使用DynamoDB进行日志logging请求还是我犯了错误? 该服务符合我的预算。

DynamoDB是一个nosql数据库服务,可以提供快速和可预测的性能,具有无缝的可伸缩性。当我们谈论login时,这是一个很好的使用方法,正如所料,您需要快速写入和快速读取,而不需要日志消息之间的关系。 所以你可以在这里使用DynamoDB。

2 – 在这种情况下,NodeJS有什么样的限制? nodejs可以吗?

NodeJS是(如你所说)单线程和基于事件循环,如果你有更多的请求比NodeJS可以处理,你应该叉 或类似的东西

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

3 – 我应该使用什么Node模块? HTTP服务器会做还是有模块公开可用于这种情况?

当我谈到日志策略时,我想到的第一件事就是“成千上万的networking包”,我不知道你是否在启动时有这个function,无论如何,我build议你使用UDP发送日志消息, UDP(用户数据报协议) ,主要用于在互联网上的应用程序间build立低延迟和丢失容忍连接。 您可以使用例如 dgram启动UDP NodeJS侦听器。 要将UDP日志消息发送到您的NodeJS服务器,您可以将Winston日志库与winston-udp插件一起使用 。 或者,你的情况,从PHP服务器,你可以用套接字发送UDP消息或看看这里 。 免责声明:我不是PHP的专家,所以我谷歌search,我发现这些解决scheme通过UDP发送日志消息,我不知道这是否是最好的方法来做到这一点:)

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

您可以使用安全组来执行此操作

希望这些帮助。