ELK安裝好後,咱們如今.net Core中使用一下,大致思路就是結合NLog日誌組件將數據寫入ELK中,其它語言同理。html
ELK的安裝仍是有些複雜的,咱們也能夠在Docker中安裝ELK:docker run -it --rm -p 9200:9200 -p 5601:5601 --name esk nshou/elasticsearch-kibananode
這條命令執行完成後,咱們就在本地運行了elasticsearch和Kibana,沒有錯誤的話咱們就能夠經過localhost:5601直接訪問Kibana界面了:docker
這裏咱們能夠看到在一個容器裏運行了多個程序,這樣節省了資源,一樣增長了管理的複雜性,不建議在生產環境中這樣使用。api
一樣咱們也能夠經過localhost:9200訪問elasticsearch,返回以下數據:架構
有了elasticsearch和kibana咱們還須要logstash,我這裏以阿里雲上安裝的logstash爲例,首先進到目錄下,咱們須要新增一個nlog.conf配置文件:mvc
內容以下:async
這裏使用最簡單的配置(實際上是複雜的配置我一時還沒看懂。。。),這裏咱們指定監聽端口8001,同時指定數據輸出到elasticsearch中,下面是它的IP和端口。elasticsearch
添加完配置文件後在logstash文件夾下經過:bin/logstash -f nlog.conf 運行當前配置。tcp
elasticsearch和kibana正常運行就能夠,這樣我麼的ELK就算都運行起來了。測試
咱們這裏用到了一個配置文件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