使用NLOG與Elasticsearch target到的日誌信息轉發到AWS Elasticsearch as a Service簇在Kibana可視化。應用程序日誌堆棧
這可以正常工作,但由於ES羣集可用性以及羣集故障轉移具有的影響,因此在使用elasticsearch-net client通過HTTP發送日誌時,我擔心在生產中使用此功能。
我正在考慮爲NLog使用不同的目標,它將日誌發送到更可靠的目的地(File,S3?),然後讓別的東西(Logstash,AWS Lambda)將它們接收併發送給ES,這樣儘量減少應用程序本身的風險。
想聽聽您的想法
UPDATE
主要關注的是應用程序的可用性和防止丟失日誌使用次要目標。
使用最新NLOG和throwExceptions設置爲false,而不是使用異步目標,在這一點上,但考慮到這是我們有很多的異步代碼。
爲了讓更多的上下文中的「應用程序」是一組獲得10的API(的WebAPI和WCF)的 - 15K RPM。
方案
請進來,ES羣集不可用。
案例1 - NLOG沒有異步目標
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off"
internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target name="elastic"
xsi:type="BufferingWrapper"
flushTimeout="5000">
<target xsi:type="ElasticSearch"
layout="${logger} | ${threadid} | ${message}"
index="logstash-${date:format=yyyy.MM.dd}"
includeAllProperties="true"
uri="...">
<field name="user"
layout="${windows-identity:userName=True:domain=False}"/>
<field name="host"
layout="${machinename}"/>
<field name="number"
layout="1"
layoutType="System.Int32"/>
</target>
</target>
</targets>
<rules>
<logger name="*"
minlevel="Debug"
writeTo="elastic" />
</rules>
</nlog>
問:
- 與主線程時會發生什麼目標不能達到?
案例2 - NLOG與異步目標
使用異步包裝用於與queueLimit elasticsearch目標= 「10000」 BATCHSIZE = 「100」
問:
- 是另一線程[B]創建?
- 將隨後的請求重用線程[B]並排隊記錄請求?
- 當達到queueLimit時會發生什麼?
- 會啓動附加線程[B1 ... Bn]嗎? (這將淹沒連接池)
沒有考慮throwExceptions標誌。感謝您指出了這一點! 我已經更新了這個問題,你能再看一下嗎? – thedev