.NET 結合ELK+log4net實現集中式日志解決方案

知道91 | 教程 | 2018-04-21 | 閱讀:2714

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”的類就可以了。希望可以幫助到遇到困難的朋友。

福彩3d开机号