【问题标题】:How to setup HTTP server with nodejs for logging?如何使用 nodejs 设置 HTTP 服务器进行日志记录?
【发布时间】:2016-09-22 19:20:40
【问题描述】:

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

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

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

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

注意:当我说用户活动时,我指的是应用程序级别的日志记录,例如:

  • A.B.C.D IP 地址的用户 X 在 2016-09-10 14:21:22 尝试访问 ID 为 123 的文章
  • 用户 Y 在 2016-09-10 18:30:02 使用 ABC 应用在文章 #987 上发表了评论 #234。
  • 用户 C 从 E.F.G.H IP 地址登录到 Web 界面。

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

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

  1. 使用 DynamoDB 记录请求的决定是否正确,还是我犯了一个错误?该服务符合我的预算。
  2. 在这种情况下,我使用 NodeJS 会有哪些限制? nodejs 可以吗?
  3. 我应该为此使用哪些节点模块? HTTP 服务器是否会提供或是否有针对此类场景公开可用的模块?
  4. 如何确保此服务器仅侦听来自同一台机器的请求(环回)?

【问题讨论】:

  • 你觉得Logstash怎么样?
  • @danilodeveloper 我认为这是一个非常好的工具。但是我没有足够的时间去完成它。我也没有资源自己设置它,加上维护它会很头疼。从长远来看,非常肯定。现在,对我来说是一个很大的问题(不幸的是)。

标签: php node.js amazon-web-services


【解决方案1】:

这里有一个 TL;DR;答案:

1 - 使用 DynamoDB 记录请求的决定可以吗? 犯错误?该服务符合我的预算。

DynamoDB 是一种 nosql 数据库服务,它提供快速且可预测的性能和无缝的可扩展性,IMO 是我们谈论登录时使用它的好方法,正如预期的那样,您需要快速写入和快速读取,而日志消息之间没有关系(我思考)。因此,您可以在这里毫无问题地使用 DynamoDB。

2 - 在这种情况下,我使用 NodeJS 会有哪些限制? nodejs 可以吗?

NodeJS(如您所说)是单线程并且是基于事件循环的,如果您的请求比 NodeJS 可以处理的多,您应该 fork or somethinglike

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

3 - 我应该为此使用哪些节点模块? HTTP服务器会做还是 是否有针对此类场景的公开可用的模块?

说到日志策略,我首先想到的就是“网络上千包”,不知道你的启动有没有这个,反正我建议你用UDP发送日志消息,UDP (User Datagram Protocol),主要用于在 Internet 上的应用程序之间建立低延迟和容损连接。 您可以使用 for example dgram 启动 UDP NodeJS 侦听器。 要将 UDP 日志消息发送到您的 NodeJS 服务器,您可以使用 Winston 登录库和 winston-udp plugin。或者,在您的情况下,从 PHP 服务器,您可以使用 socket 发送 UDP 消息或查看 here免责声明:我不是 PHP 专家,所以我在 Google 上搜索并发现了这些通过 UDP 发送日志消息的解决方案,我不确定这是否是最好的方法:)

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

您可以使用Security Group 来做到这一点

希望这些帮助。

【讨论】:

  • HTTP 服务器应该在同一台机器上的不同端口上运行,以便将条目与主应用程序分开提交给 NodeJS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多