如何使用 serilog 在 kibana 中通过身份验证将日志设置为 ELK

Posted

技术标签:

【中文标题】如何使用 serilog 在 kibana 中通过身份验证将日志设置为 ELK【英文标题】:How to set logs to ELK in kibana with authentication using serilog 【发布时间】:2019-07-11 16:12:57 【问题描述】:

我已经设置了我的代码示例,但我无法通过使用 serilog 的身份验证登录 kibana。 在这里,我附上了我的代码,请纠正它。

Log.Logger = new LoggerConfiguration()
   .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("myurl:9200"))
   
            IndexFormat = "ChargeMasterlog-yyyy.MM.dd",
            ModifyConnectionSettings = x => x.BasicAuthentication("username", "password"),
   ).CreateLogger();

   Log.Information("Hello, Serilog!");

【问题讨论】:

【参考方案1】:

第一步:安装这个 NuGet 包“Serilog.Sinks.Elasticsearch”

Step2:在 App.config 或 Web.config 中添加这个

<appSettings>
    <add key="elasticsearchURL" value="your_URL" />
    <add key="elasticsearchuserName" value="your_Username" />
    <add key="elasticsearchpassword" value="your_Password" />
    <add key="elasticsearchIndex" value="indexname-0:yyyy.MM.dd" /> <!-- make sure index start with small letter -->
</appSettings>

第三步:在 main() 的 program.cs 或 Application_Start() 的 Global.asax 中添加这个

Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(ConfigurationManager.AppSettings["elasticsearchURL"]))
        
            AutoRegisterTemplate = true,
            ModifyConnectionSettings = x => x.BasicAuthentication(ConfigurationManager.AppSettings["elasticsearchuserName"], ConfigurationManager.AppSettings["elasticsearchpassword"]),
            IndexFormat = ConfigurationManager.AppSettings["elasticsearchIndex"]
        )
        .CreateLogger();

Step4:通过添加来记录您想要的事件

 using Serilog;
 Log.Error("Your_Message", ex);
 Log.CloseAndFlush();

【讨论】:

【参考方案2】:

如果你想使用 log4net 那么

第一步:安装这个 NuGet 包“log4net.Elasticsearch”

第二步:在 AssemblyInfo.cs 中添加这个“[assembly: log4net.Config.XmlConfigurator(Watch = true)]”

Step3:在web.config中添加这些东西

<configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.5.0" />
       </dependentAssembly>
   </assemblyBinding>
</runtime>

<log4net>
   <appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
       <connectionString value="Scheme=http;Server=your_IP;Index=index_name;Port=9200;User=your_Username;Pwd=your_Password;rolling=true;" />  <!-- make sure index start with small letter -->
   </appender>
   <root>
       <level value="ALL" />
       <appender-ref ref="ElasticSearchAppender" />
   </root>
</log4net>

Step4:通过添加来记录您想要的事件

using log4net;
private static readonly ILog _log = LogManager.GetLogger(typeof(your_mainpageclass));

_log.Error("your message ", ex);
_log.Logger.Repository.Shutdown();

【讨论】:

以上是关于如何使用 serilog 在 kibana 中通过身份验证将日志设置为 ELK的主要内容,如果未能解决你的问题,请参考以下文章

[翻译] ASP.NET Core 利用 DockerElasticSearchKibana 来记录日志

如何在 appsettings.json 中使用多个单独的记录器 Serilog 文件

如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?

web-api启动时如何注入和使用Serilog(Ilogger)

如何从 Serilog 中排除特定的异常类型?

ELK 部署