如何通过NLog或SeriLog通过身份验证登录弹性搜索

时间:2018-04-01 06:30:52

标签: asp.net elasticsearch logstash nlog serilog

我们目前正在使用azure scale set(一个源组上的许多VM具有负载平衡和一个可用性集),我们曾经使用NLog来记录我们的Web应用程序操作和错误,但现在我们要求/需要使用弹性搜索并且还为所有azure vm实例使用集中式日志,而不是每个实例使用文件。

我是ES和LogStash概念的新手,我是否需要用其他东西替换NLog?以及我如何使用ES并统一所有日志(我认为将nlog存储在azure存储表中作为统一结果或者我是否需要使用LogStash或者您更喜欢其他内容)?

如上所述,在azure multi VM上支持.net核心应用程序的日志记录最多的是什么?

请帮忙吗?

4 个答案:

答案 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

请注意:

  • 如果您需要使用Elasticsearch.Net 6(相当于弹性搜索版本6或更高版本),则需要NLog.Targets.ElasticSearch版本5.
  • 对于Elasticsearch.Net 5,您需要使用NLog.Targets.ElasticSearch 4

答案 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