簡體   English   中英

如何使用nodejs設置HTTP服務器進行日志記錄?

[英]How to setup HTTP server with nodejs for logging?

我需要為啟動設置日志記錄服務。 我和我的團隊沒有時間和資源(金錢)來部署專用於日志的工具。 但是,我需要對用戶行為進行分析。 當我要學習分析知識並逐步實現它時,我需要記錄用戶活動,以便稍后可以提取數據並進行數學計算。

我正在為我的主應用程序(這是一個Web服務)使用基於SQL的(RDBMS)設置,並計划在DynamoDB(AWS)中記錄用戶活動。

另外,我計划設置一個本地(在同一服務器上)Node.Js服務器,該服務器可以處理來自我基於PHP的應用程序的日志請求, 以確保日志記錄活動在另一個進程中運行並且可以正常處理,而不會導致崩潰或減慢運行主服務器代碼。 這里的想法是-當用戶發出請求時,PHP應用程序將調用NodeJS服務器。 NodeJS服務器將接受請求並在排隊請求時立即返回 (例如200個其他請求),而PHP應用將繼續為該請求提供服務。 NodeJS服務器將繼續依次記錄隊列中的所有內容。

我計划執行此操作的原因是-NodeJS在單個線程上運行並且基於事件循環-因此,如果出現突然的流量高峰,日志請求將排隊,並且數據最終將發送到Dynamo,而不會PHP應用程序等待確認。

注意 :當我說用戶活動時 ,我的意思是應用程序級日志記錄,例如:

  • 來自ABCD IP地址的用戶X嘗試在2016-09-10 14:21:22訪問ID為123的文章
  • 用戶Y使用ABC應用在2016-09-10 18:30:02發表了關於文章#987的評論#234。
  • 用戶C從EFGH IP地址登錄到Web界面。

當然,數據將采用JSON格式,服務器將調用AWS開發工具包。

在這里,NodeJs服務器將基本上充當日志代理。 根據目前的想法/場景,我有以下問題:

  1. 是否決定使用DynamoDB記錄請求,還是我做錯了? 這項服務符合我的預算。
  2. 在這種情況下,NodeJS會有哪些限制? nodejs可以嗎?
  3. 我應該為此使用哪些節點模塊? HTTP服務器會做這種情況嗎?有沒有開放的模塊可供使用?
  4. 如何確保該服務器僅偵聽來自同一計算機的請求(環回)?

TL; DR; 回答:

1-是否決定使用DynamoDB記錄請求,還是我做錯了? 這項服務符合我的預算。

DynamoDB是一種nosql數據庫服務,可提供快速且可預測的性能以及無縫的可伸縮性,IMO是我們談論loggin時的一種很好的使用方式,因為期望您需要快速寫入和快速閱讀,而日志消息之間沒有關系(我認為)。 因此,您可以在這里毫無問題地使用DynamoDB。

2-在這種情況下,NodeJS會有哪些限制? nodejs可以嗎?

如您所說,NodeJS是單線程且基於事件循環,如果您的請求超出NodeJS的處理能力,則應使用fork 類似的方法

我仍然認為您應該使用Logstash之類的工具,但是如果您確定可以使用NodeJS這樣做,則可能會成功。

3-我應該為此使用哪些節點模塊? HTTP服務器會做這種情況嗎?有沒有開放的模塊可供使用?

當我談論日志記錄策略時,我想到的第一件事是“網絡上有成千上萬個軟件包”,我不知道啟動時是否有此包,無論如何,我建議您使用UDP來發送logg消息, UDP(用戶數據報協議) ,主要用於在Internet上的應用程序之間建立低延遲和容錯連接。 您可以使用,啟動一個UDP監聽器的NodeJS 例子 DGRAM 要將UDP日志消息發送到NodeJS服務器,可以將Winston loggin庫與winston-udp插件一起使用 或者,就您而言,從PHP服務器,您可以使用套接字發送UDP消息或在此處查看 免責聲明:我不是PHP的專家,所以我用Google搜索了,發現了這些解決方案可以通過UDP發送日志消息,我不確定這是否是最好的方法:)

4-如何確保該服務器僅偵聽來自同一計算機的請求(回送)?

您可以使用安全組來執行此操作

希望這些幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM