ELK系列(二):.net core中使用ELK


ELK安裝好后,我們現在.net Core中使用一下,大體思路就是結合NLog日志組件將數據寫入ELK中,其它語言同理。

ELK的安裝還是有些復雜的,我們也可以在Docker中安裝ELK:docker run -it --rm -p 9200:9200 -p 5601:5601 --name esk nshou/elasticsearch-kibana

這條命令執行完成后,我們就在本地運行了elasticsearch和Kibana,沒有錯誤的話我們就可以通過localhost:5601直接訪問Kibana界面了:

這里我們可以看到在一個容器里運行了多個程序,這樣節省了資源,同樣增加了管理的復雜性,不建議在生產環境中這樣使用。

同樣我們也可以通過localhost:9200訪問elasticsearch,返回如下數據:

有了elasticsearch和kibana我們還需要logstash,我這里以阿里雲上安裝的logstash為例,首先進到目錄下,我們需要新增一個nlog.conf配置文件:

內容如下:

這里使用最簡單的配置(其實是復雜的配置我一時還沒看懂。。。),這里我們指定監聽端口8001,同時指定數據輸出到elasticsearch中,下面是它的IP和端口。

添加完配置文件后在logstash文件夾下通過:bin/logstash -f nlog.conf 運行當前配置。

elasticsearch和kibana正常運行就可以,這樣我么的ELK就算都運行起來了。

 

 

新建一個.net core API項目,通過Nuget安裝Nlog依賴包:

 

 

在Startup.cs添加Nlog服務

我們這里用到了一個配置文件nlog.conf,配置如下:

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="internal-nlog.txt">

  <extensions>
    <!--enable NLog.Web for ASP.NET Core-->
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- define various log targets -->
  <!--定義日志文件目錄-->
  <variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
  <variable name="nodeName" value="node1"/>

  <targets async="true">
    <!-- 全部日志target -->
    <target xsi:type="File"
            name="allfile"
            fileName="${logDirectory}/nlog-all/${shortdate}.log"
            layout="#node1#${longdate}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
            keepFileOpen="false"
            />

    <!-- 本地文件日志target -->
    <target xsi:type="File"
            name="ownLog-file"
            fileName="${logDirectory}/nlog-${level}/${shortdate}.log"
            layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
            keepFileOpen="false"
            />

    <!-- Tcp日志target -->
    <target xsi:type="Network"
            name="ownLog-tcp"
            keepConnection="false"
            address ="tcp://47.99.92.76:8001"
            layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#"
            />
    <!--grok 規則-->
    <!--%#{DATA:request_time}#%{DATA:node_name}#%{DATA:class_name}#%{DATA:log_level}#%{DATA:call_site}#%{DATA:line_number}#%{DATA:request_url}#%{DATA:request_method}#%{DATA:container_name}#%{DATA:action_name}#%{DATA:log_info}#%{DATA:exception_msg}#-->
    <!--空白-->
    <target xsi:type="Null" name="blackhole" />
  </targets>

  <!--日志級別 Trace -》Debug-》 Info -》Warn-》 Error-》 Fatal-->
  <!--日志規則-->
  <rules>
    <!--全部日志, 包括Microsoft日志-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--自定義日志,排除Microsoft日志-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Debug" writeTo="ownLog-file" />
    <logger name="*" minlevel="Info" writeTo="ownLog-tcp" />
  </rules>
</nlog>

注意點是下面這里我們需要指定logstash的地址和端口:

然后我們在默認的ValueController中使用如下:

public class ValuesController : Controller
    {
        private readonly ILogger _logger=LogManager.GetCurrentClassLogger();

        // GET api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            _logger.Info("這是一條測試日志信息");
            _logger.Warn("這是一條測試日志信息Warn");
            _logger.Error("這是一條測試日志信息Error");
            return new string[] { "value1", "value2" };
        }
    }

如何不出問題的話,F5之后數據已經被寫入ELK,如圖:

 

這里只是簡單的展示如何在程序里集成ELK,公司里並不是用的NLog日志組件,是架構組封裝的日志組件,當然,方法原理都是一樣的,通過logstash將日志數據輸出到elasticsearch,通過kibana展示。

 

參考文章:

https://blog.csdn.net/quryktcs/article/details/71331718

https://www.cnblogs.com/piscesLoveCc/p/7230426.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM