2016-09-22 79 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。 –

相關問題