.NET 结合ELK+log4net实现集中式日志解决方案

知道91 | 教程 | 2018-04-21 | 阅读:223

ELK是Elasticsearch , Logstash, Kibana三个开源软件的简称,是集中式日志管理非常流行的解决方案。

所谓集中式日志就是将系统多个节点的日志统一收集管理,并能够提供图像化界面进行查询和分析

一套完整的集中式日志解决方案应该包括收集、传输、存储、分析、警报等特点,使用集中式日志能极大的简化运维工作。

log4net是我们经常使用的单体应用日志解决方案,使用.NET可以非常方便的使用log4net,log4net本身支持多种Appender方案,能够将日志记录到txt文本、数据库等,所以.NET 使用log4net的这个功能,集成ELK一点都不困难,而且也会影响到现有的系统,插拔方式集成非常方便。

下面我们就看一下怎样使用.NET 结合log4net实现ELK集中式日志:

.NET+ELK+log4net实现集中式日志方案步骤

我假设你已经安装好Elasticsearch和Kibana,关于Elasticsearch和Kibana的安装你可以百度一下,很多图文教程的。

我们使用一个C# console控制台程序来演示集成过程。

首先创建一个console控制台项目,如图所示:

.NET ELK集成创建控制台

要使用ELK,你需要一个Appender类的包,添加log4net Elastic Search的包,如下图所示:

.NET ELK集成添加资源包

添加App.config文件到项目的根目录,文件内容如下所示:

  <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
        <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.0.8.0" />
                </dependentAssembly>
            </assemblyBinding>
        </runtime>
        <log4net>
            <appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
                <connectionString value="Server=localhost;Index=log;Port=9200;" />
                <bufferSize value="0" />
            </appender>
            <root>
                <level value="ALL" />
                <appender-ref ref="ElasticSearchAppender" />
            </root>
        </log4net>
    </configuration>

你熟悉log4net一定知道这是log4net的配置,其中ElasticSearchAppender这个就是将日志记录到ElasticSearch的服务器,其中的Server、Index、Port都是你自己的配置。

然后打开你的AssemblyInfo.cs文件,添加下面这行代码:

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

如图所示:

.NET ELK集成加载log4net配置文件

修改program,添加如下的代码:

class Program
{
    private static readonly ILog _log = LogManager.GetLogger(typeof(Program));

    static void Main(string[] args)
    {
    _log.Error("kaboom!", new ApplicationException("The application exploded"));
    }
}

这样.NET项目的开发工作就完成了,下面我们看怎样看到运行后产生的日志。

设置 Kibana

浏览器访问Kibana站点,默认都是5601端口,在侧边栏“Management”->"Index Patterns"中添加如下图的Index,这个Index就是你配置文件中写的Index。

.NET ELK集成创建Index Pattern

然后在Discover->logs*下拉框下查询就可以查找你刚刚运行Console文件尝试的日志,如下图所示:

.NET ELK集成创建显示结果

.NET 使用log4net 集成ELK总结

以上就是.NET 使用log4net 集成ELK的全部图形示例,做之前你一定需要先安装好Elasticsearch和Kibana,log4net的加载不一定要使用AssemblyInfo文件的方式,log4net标准的文件配置加载方案都是可以的,包括log4net的配置都是可以单独使用文件加载配置的,和.NET集成log4net的方式是一致的,只需要在Appender上加上“log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch”的类就可以了。希望可以帮助到遇到困难的朋友。