gpt4 book ai didi

php - 如何使用nodejs设置HTTP服务器进行日志记录?

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:48 24 4
gpt4 key购买 nike

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

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

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

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

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

  • IP 地址为 A.B.C.D 的用户 X 于 2016 年 9 月 10 日 14:21:22 尝试访问 ID 为 123 的文章
  • 用户 Y 使用 ABC 应用于 2016 年 9 月 10 日 18:30:02 对文章 #987 发表了评论 #234。
  • 用户 C 通过 E.F.G.H IP 地址登录网络界面。

当然,数据将采用 JSON 格式,服务器将调用 AWS 开发工具包。

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

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

最佳答案

这里是 TL;DR;答案:

1 - Is the decision to use DynamoDB for logging requests okay or am I making a mistake? The service fits within my budget.

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

2 - What kind of limitations will I have with NodeJS in this scenario? Is nodejs okay for it?

NodeJS(如您所说)是单线程并且基于事件循环,如果您的请求数量超出了 NodeJS 可以处理的数量,您应该 fork or something like

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

3 - What Node modules should I use for this? Will HTTP server do or are there modules openly available which are made for such scenarios?

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

4 - How to I make sure that this server listens only to requests coming from the same machine (loopback)?

您可以使用 Security Group 来执行此操作

希望这些有所帮助。

关于php - 如何使用nodejs设置HTTP服务器进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39647268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com