介紹ELK
它是一個解決方案,是Logstash、Elastaicsearch、Kibana的縮寫,為什么使用:想想你是很多系統,出了問題還要登錄到服務器查看日志、或者系統部署在客戶的機器上,你甚至沒有權限登錄到別人服務器,作為開發人員又要修復bug!!再者,我們日志可以根據日志級別做分析,Kibana提供很多圖形展示,很好的分析日志,從而檢測系統健康。
- 數據源:可以來自Redis、Nginx、Docker、Rabbitmq、Consul、系統日志等等各式各樣的日志文件。
- Logstash:開源的服務器數據處理管道,能夠同時從多個來源采集數據、轉換數據、然后將數據存到數據庫中。
- Elastaicsearch:搜索、分析、存儲數據。
- Kibana:數據可視化Web。
- Beats: 輕量型采集器的平台。從邊緣機器想Logstash和Elasticsearch發送數據。
- Filebeat:輕量型日志采集器。
安裝ELK
這里采用懶人安裝,Docker容器化安裝,安裝前先保證自己已經安裝Docker-compose,安裝地址:https://github.com/deviantony/docker-elk.git,安裝完訪問服務地址:http://localhost:5601,http://localhost:9200.


ELK中文官方文檔
Elasticsearch 權威指南中文版(2.x)
Kibana 中文手冊(6.0)
好了,ELK內容到這里把!建議、最好看一首文檔,就不要去看博客了,因為都是抄來抄去,想罵人。分割線
ABP集成ELK
- ABP開始是Log4,一開始以為Log4這里可以支持集成ELK,后續發現比較坑。因為沒有Log4支持的Nuget包,后續轉到Nlog。ABP很多文檔說轉換日志管理很簡單,很多博客都是一筆帶過,知其然不知其所以然,我看到這些博客心里早已是萬馬奔騰,mmp,最后在github找到一個開源的abp的nlog包Abp.Castle.NLog,另外還需要安裝另外兩個包NLog.Web.AspNetCore,NLog.Extensions.Logging,如果你不安裝,在nlog.config中的一些參數你將不可用。
.net core 配置nlog
nlog配置文件:
<?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>
<add assembly="NLog.Web.AspNetCore"/>
</extensions >
<variable name="logDirectory" value="${basedir}\logs\"/>
<!--define various log targets-->
<targets>
<!--write logs to file-->
<target xsi:type="File" name="allfile" fileName="${logDirectory}\nlog-all-${shortdate}.log"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
<target xsi:type="Network"
name="elastic"
keepConnection="false"
address ="tcp://ip地址:5000"
index="msglog-${shortdate}"
layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
/>
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="elastic" />
</rules>
</nlog>
注意:ip地址哪里的端口為你配置logstash的input地址:
ABP日志寫入
ABP日志通過屬性注入,直接看代碼了