Logging with ElasticSearch, Kibana, ASP.NET Core and Docker
好久不見,前兩周經(jīng)歷了人生第一次"偽牛市",基金和股市大起大落,更加堅(jiān)信“你永遠(yuǎn)賺不到超出你認(rèn)知范圍之外的錢,除非靠著運(yùn)氣”,老韭菜誠不欺我也。
當(dāng)能力與野心不匹配,只能多看書,收割那些不求甚解的韭菜。
言歸正傳,本文聊一聊在ASP.NET Core3.1中集成ElasticSearch、Kibana日志查詢系統(tǒng)。
我們?yōu)槭裁葱枰狤lasticSearch、Kibana?
成熟的應(yīng)用程序,會(huì)在各個(gè)階段以各種姿勢記錄日志,這些日志包括(但不限于)nginx日志、pod/Container、業(yè)務(wù)日志。
ElasticSearch是一個(gè)高度可擴(kuò)展的全文搜索和分析引擎,使任何類型的日志記錄變得容易,可訪問和可搜索。ElasticSearch令人難以置信的速度和簡單的查詢語言,再加上Kibana的界面和圖形,構(gòu)成了功能強(qiáng)大的日志存儲(chǔ)和查詢搭檔。
1.在Docker中啟動(dòng)ElasticSearch、Kibana
docker中啟動(dòng)Elastcisearch、kibana最簡單的方式是創(chuàng)建docker-compose文件,將原服務(wù)偵聽端口映射到宿主機(jī)端口。
version:?'3.1'services:elasticsearch:container_name:?elasticsearchimage:?elasticsearch:7.6.2ports:-?9200:9200volumes:-?elasticsearch-data:/usr/share/elasticsearch/dataenvironment:-?xpack.monitoring.enabled=true-?xpack.watcher.enabled=false-?"ES_JAVA_OPTS=-Xms1g?-Xmx1g"-?discovery.type=single-nodenetworks:-?elastickibana:container_name:?kibanaimage:?kibana:7.6.2ports:-?5601:5601depends_on:-?elasticsearchenvironment:-?ELASTICSEARCH_URL=http://localhost:9200networks:-?elasticnetworks:elastic:driver:?bridgevolumes:elasticsearch-data:在后臺(tái)拉取鏡像,啟動(dòng)容器:
docker-compose??up?-d確認(rèn)ElasticSearch,kibana啟動(dòng)成功:
2. 使用ASP.NET Core和NLog向ES發(fā)送日志
VS Code創(chuàng)建.NetCore程序
dotnet?new?mvc?--no-https?-o?Elastic.Kibana.NLog cd?Elastic.Kibana.NLog添加NLog依賴包
dotnet?add?package?NLog dotnet?add?package?NLog.Web.AspNetCore dotnet?add?package?NLog.Targets.ElasticSearch添加nlog.config文件,黃色背景行是NLog直接向ES發(fā)送日志的核心配置。
<?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="Info"internalLogFile="internal-nlog.txt"><!--?enable?asp.net?core?layout?renderers?--><extensions><add?assembly="NLog.Web.AspNetCore"/></extensions><!--?the?targets?to?write?to?--><targets><!--?write?logs?to?file??--><target?xsi:type="File"?name="allfile"?fileName="/home/root/nlog-all-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message}?${exception:format=tostring}"?/><!--?another?file?log,?only?own?logs.?Uses?some?ASP.NET?core?renderers?--><target?xsi:type="File"?name="ownFile-web"?fileName="/home/root/nlog-own-${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message}?${exception:format=tostring}|url:?${aspnet-request-url}|action:?${aspnet-mvc-action}"?/><target?name="elastic"?xsi:type="BufferingWrapper"?flushTimeout="5000"><target?xsi:type="ElasticSearch"?uri="http://localhost:9200/"?/></target></targets><!--?rules?to?map?from?logger?name?to?target?--><rules><!--All?logs,?including?from?Microsoft--><logger?name="*"?minlevel="Trace"?writeTo="allfile"?/><!--Skip?non-critical?Microsoft?logs?and?so?log?only?own?logs--><logger?name="Microsoft.*"?maxlevel="Info"?final="true"?/><!--?BlackHole?without?writeTo?--><logger?name="*"?minlevel="Trace"?writeTo="ownFile-web"?/><logger?name="*"?minlevel="Info"?writeTo="elastic"?/></rules> </nlog>ASP.NET Core添加Nlog并輸出日志
????public?class?Program{public?static?void?Main(string[]?args){var?webHost?=?WebHost.CreateDefaultBuilder(args).ConfigureLogging((hostingContext,?loggingBuilder)?=>{loggingBuilder.AddConsole(x?=>?x.IncludeScopes?=?true).AddDebug();}).UseNLog().UseStartup<Startup>().Build();webHost.Run();}}Controller自定義日志:
public?class?HomeController?:?Controller{private?readonly?ILogger<HomeController>?_logger;public?HomeController(ILogger<HomeController>?logger){_logger?=?logger;}public?IActionResult?Index(){_logger.LogInformation("HomeController?Index?executed?at?{date}",?DateTime.UtcNow);return?View();}}3.在kibana中創(chuàng)建Index Pattern
dotnet run啟動(dòng)ASP.NET Core程序,現(xiàn)在開始產(chǎn)生日志。
Kibana使用index pattern從ElasticSearch indices中獲取數(shù)據(jù)。要在Kibana中顯示日志,需要先定義index pattern:之后選擇@timestamp時(shí)間過濾。
回到Discovery界面,可以看到所有日志。
ok, 上面便是ASP.NET Core+NLog集成ES、Kibana的基本操作流程。
看起來很簡單,其實(shí)只是九牛一毛,Elastic Stack的內(nèi)功博大精深,關(guān)注我,解鎖各種實(shí)戰(zhàn)姿勢。
ASP.NET Core端點(diǎn)路由 作用原理
[溫故知新] 編程原則和模式
ASP.NET?Core結(jié)合Redis實(shí)踐消息隊(duì)列
Quartz.net在集群環(huán)境下部署任務(wù)的姿勢
分享我在前后端分離項(xiàng)目中Gitlab-CI的經(jīng)驗(yàn)
總結(jié)
以上是生活随笔為你收集整理的Logging with ElasticSearch, Kibana, ASP.NET Core and Docker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ERP平台的自动化测试技术实践
- 下一篇: 创建型设计模式总结