如何使用身份验证通过NLog或SeriLog登录到Elastic Search

Bas*_*maa 4 asp.net nlog elasticsearch logstash serilog

我们目前使用的是Azure规模集(一个源组上的许多VM具有负载平衡和一个可用性集),我们曾经使用NLog来记录Web应用程序的操作和错误,但现在我们要求/需要使用Elastic Search,并且还使用所有Azure虚拟机实例的集中式日志,而不是每个实例的文件。

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

如上所述,在Azure多个VM上提供对.net核心应用程序支持的最多记录是什么?

有什么帮助吗?

Jul*_*ian 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>
Run Code Online (Sandbox Code Playgroud)

参数的文档:https : //github.com/ReactiveMarkets/NLog.Targets.ElasticSearch/wiki

请注意:

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


Rol*_*sen 7

许多建议,应用程序不应直接写入ElasticSearch,而应仅写入本地文件。

然后使用服务(例如FileBeat)将日志文件的内容上载到ElasticSearch。

这将优化到ElasticSearch实例(批量)的网络流量,并确保在由于维护而重启网络或ElasticSearch实例的问题时不会丢失日志记录。

  • 通过网络(弹性)发送日志,并回退到文件(当网络不可用时)。此外,当应用程序无法通过网络发送消息时,最好通知管理员。 (2认同)

Kah*_*azi 5

由于您要登录ElasticSearch,因此最好使用支持结构化日志记录的日志记录框架,对于NLog,此功能位于beta RTM中

您可以Serilog作为支持结构化日志记录的日志记录框架。

还有Elasticsearch的Serilog接收器https://github.com/serilog/serilog-sinks-elasticsearch

您应该将这些nuget包添加到您的项目中:

Serilog
Serilog.Sinks.ElasticSearch  
Run Code Online (Sandbox Code Playgroud)

这是serilog配置下沉到Elasticsearch的示例代码

var logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
    {
        ModifyConnectionSettings = x => x.SetBasicAuthentication(username, password);
    })
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)