我们目前正在使用azure scale set(一个源组上的许多VM具有负载平衡和一个可用性集),我们曾经使用NLog来记录我们的Web应用程序操作和错误,但现在我们要求/需要使用弹性搜索并且还为所有azure vm实例使用集中式日志,而不是每个实例使用文件。
我是ES和LogStash概念的新手,我是否需要用其他东西替换NLog?以及我如何使用ES并统一所有日志(我认为将nlog存储在azure存储表中作为统一结果或者我是否需要使用LogStash或者您更喜欢其他内容)?
如上所述,在azure multi VM上支持.net核心应用程序的日志记录最多的是什么?
请帮忙吗?
答案 0 :(得分:8)
对于NLog,有一个目标“NLog.Targets.ElasticSearch”(nuget) 它使用Elasticsearch.Net包。
用法:
<nlog>
<extensions>
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets>
<target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch"
requireAuth="true"
username="myUserName"
password="coolpassword"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="elastic" />
</rules>
</nlog>
参数文档:https://github.com/ReactiveMarkets/NLog.Targets.ElasticSearch/wiki
请注意:
答案 1 :(得分:3)
由于您想要登录ElasticSearch
,如果您使用支持结构化日志记录的日志记录框架,这是最好的,对于NLog,此功能位于 beta RTM 强>
您可以Serilog
作为支持结构化日志记录的日志框架。
还有Eilsearch的Serilog接收器https://github.com/serilog/serilog-sinks-elasticsearch
您应该将这些nuget包添加到您的项目中:
Serilog
Serilog.Sinks.ElasticSearch
这是用于下载到Elasticsearch的serilog配置的示例代码
var logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
ModifyConnectionSettings = x => x.SetBasicAuthentication(username, password);
})
.CreateLogger();
答案 2 :(得分:2)
许多人建议应用程序不应直接写入ElasticSearch,而应该只写入本地文件。
然后有一个服务(例如FileBeat)将日志文件的内容上传到ElasticSearch。
这将优化ElasticSearch实例(批量)的网络流量,并确保在因维护而重新启动网络或ElasticSearch实例的问题时不会丢失日志记录。
答案 3 :(得分:1)
不再使用 SetBasicAuthentication。 BasicAuthentication 是您应该使用的新事物。
var logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
....
ModifyConnectionSettings = x => x.BasicAuthentication("elasticUsername", "elasticPassword"),
})
.CreateLogger();
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/configuration-options.html