1、ELK部署
ELK是elasticsearch、kibana、Logstash組合而成的整套解決方案,前面我們使用skywalking時候已經部署好elasticsearch(參見上一篇隨筆),接下來只需要安裝Logstash和kibana即可
1.1、安裝kibana
前面使用的elasticsearch是7.5.0版本,這里kibana選擇相同版本:
運行:
docker run -d --restart=always --name kibana -e ELASTICSEARCH_URL=http://192.168.56.10:9200 -p 5601:5601 kibana:7.5.0
瀏覽器訪問:
進入容器查看配置文件:
docker exec -it kibana /bin/bash
將配置文件中的http://elasticsearch:9200改為http://192.168.56.10:9200
重啟容器:
docker restart kibana
還是出現問題則稍等1分鍾,重試,頁面正常加載:
1.2、安裝Logstash
同樣選擇7.5.0版本:
sudo docker pull logstash:7.5.0
1.2.1、啟動
docker run -d --name=logstash -p 5044:5044 logstash:7.5.0
查看日志:
docker logs -f logstash
進入容器
docker exec -it logstash /bin/bash
修改配置文件:
vi config/logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.56.10:9200" ]
vi pipeline/logstash.conf

input {
tcp {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
output {
elasticsearch {
hosts => "192.168.56.10:9200"
index => "sample"
}
stdout {
codec => rubydebug
}
}
重啟:
docker restart logstash
2、NetCore 使用 ELK
2.1、添加NLog、NLog.Web.AspNetCore nuget包
2.2、根目錄添加配置文件nlog.config

<?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://192.168.56.10:5044" 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>
2.3、修改Program
在最后增加配置
ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
}).UseNLog();
2.4、修改Startup
var currentClassLogger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); services.AddSingleton(currentClassLogger);
2.5、寫入測試(接口必須訪問幾遍,不然下面Kibana面板上無數據)

public class HealthCheckController : ControllerBase { private readonly ILogger<HealthCheckController> _logger; public HealthCheckController(ILogger<HealthCheckController> logger) { _logger = logger; } [HttpGet] public IActionResult GetHealthCheck() { _logger.LogInformation("這是一條測試消息Information"); _logger.LogError("這是一條測試消息Erro"); _logger.LogDebug("這是一條測試消息Debug"); return Ok("連接正常"); } }
3、Kibana查看數據
先看結果:
3.1、首先創建索引模板:
Logstatsh配置文件logstash.conf中配置的output屬性:
Index patterns這里同樣輸入sample*
其他輸入項目前還沒搞清楚是干嘛的,反正是可選項,直接下一步,完成創建即可。
3.2、根據索引模板查看數據
首頁即會提示創建,或者點擊最左上角圖標到主頁,再點擊
配置頁,輸入sample*,直接下一步即可(全部按默認創建,顯示所有字段即可)
3.3、點擊Discover
可以看到上面寫入的日志記錄了
到這里,基本的日志寫入和呈現就完成了。
參考:
https://blog.csdn.net/xiaozm1223/article/details/89475003
https://www.cnblogs.com/chongyao/p/14098197.html
https://www.cnblogs.com/Leo_wl/p/11796634.html