ELK是Elasticsearch , Logstash, Kibana三个开源软件的简称,是集中式日志管理非常流行的解决方案。
所谓集中式日志就是将系统多个节点的日志统一收集管理,并能够提供图像化界面进行查询和分析
一套完整的集中式日志解决方案应该包括收集、传输、存储、分析、警报等特点,使用集中式日志能极大的简化运维工作。
log4net是我们经常使用的单体应用日志解决方案,使用.NET可以非常方便的使用log4net,log4net本身支持多种Appender方案,能够将日志记录到txt文本、数据库等,所以.NET 使用log4net的这个功能,集成ELK一点都不困难,而且也会影响到现有的系统,插拔方式集成非常方便。
下面我们就看一下怎样使用.NET 结合log4net实现ELK集中式日志:
我假设你已经安装好Elasticsearch和Kibana,关于Elasticsearch和Kibana的安装你可以百度一下,很多图文教程的。
我们使用一个C# console控制台程序来演示集成过程。
首先创建一个console控制台项目,如图所示:
要使用ELK,你需要一个Appender类的包,添加log4net Elastic Search的包,如下图所示:
添加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)]
如图所示:
修改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站点,默认都是5601端口,在侧边栏“Management”->"Index Patterns"中添加如下图的Index,这个Index就是你配置文件中写的Index。
然后在Discover->logs*下拉框下查询就可以查找你刚刚运行Console文件尝试的日志,如下图所示:
以上就是.NET 使用log4net 集成ELK的全部图形示例,做之前你一定需要先安装好Elasticsearch和Kibana,log4net的加载不一定要使用AssemblyInfo文件的方式,log4net标准的文件配置加载方案都是可以的,包括log4net的配置都是可以单独使用文件加载配置的,和.NET集成log4net的方式是一致的,只需要在Appender上加上“log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch”的类就可以了。希望可以帮助到遇到困难的朋友。