【Docker】.Net Core 结合Nlog集成ELK框架(Elasticsearch , Logstash, Kibana) (五)
之前有项目有用过ELK做过日志架构,不过是非docker形式安装的,今天来探究一下ELK的容器化技术
Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
NLog 一个普普通通的.Net日志记录框架,类似log4net的作用。
一、Docker 安装 Elasticsearch
# 下载镜像 docker pull elasticsearch:7.1.1
# 创建容器 docker run -d --name elasticsearch -v "/home/es":/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.1.1
容器启动以后验证一下,发现容器启动失败,错误Exited(137)
于是查看一下此docker的log日志,排查问题
提示是JDK版本不够高,但是经过网上搜索答案后,发现真实原因其实是服务器内存不够,导致没有创建成功
如果用的不是docker,直接打开/usr/local/es_cluster/node03/config/jvm.options 修改配置文件中的 -Xms 内存大小
docker可以使用 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 参数
# 创建容器 docker run -d -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --name elasticsearch -v "/home/es":/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.10.1
查看是否正在运行
最后发现此es容器运行半分钟后就自动关闭了,查看各种原因,发现es开启之后,服务器的CPU使用率一直在100%,
此服务器是1核2G,最后借用了公司的服务器继续完成以上步骤。
二、Docker 安装 Kibana
安装镜像
docker pull kibana:7.10.1
创建容器
docker run -d --name kibana -e ELASTICSEARCH_URL=http://localhost:9200 -p 5601:5601 kibana:7.10.1
查看容器运行状态
访问http://120.24.145.210:5601/ 出现以下图示,表示运行成功
三、Docker 安装 :Logstash
安装镜像
docker pull logstash:7.10.1
将文件挂载在宿主机/home/logstash下,创建相关文件夹
/home/logstash 目录下创建配置文件:logstash.yml
path.config: /homne/logstash/conf.d/*.conf path.logs: /var/log/logstash
/home/logstash/conf.d 目录下创建启动文件:test.conf
input { tcp { port => 4560 mode => "server" tags => ["tags"] codec => json_lines } } output { elasticsearch { hosts => "{服务器地址}:9200" index => "boot-demo-%{+YYYY.MM.dd}" } }
启动Logstash,挂载目录
docker run -it -d --name=logstash -p 9600:9600 -p 4560:4560 \
-v /home/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /home/logstash/conf.d/conf.d/:/usr/share/logstash/conf.d/ logstash:7.10.1
查看容器,正常启动。
四、.Net Core项目中引用Nlog
添加Nuget 包 NLog.Web.AspNetCore和NLog.Targets.ElasticSearch
新增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" internalLogToConsole="true"> <extensions> <add assembly="NLog.Targets.ElasticSearch"/> </extensions> <targets> <!--ElasticSearch保存日志信息--> <target name="ElasticSearch" xsi:type="ElasticSearch" ConnectionStringName="ElasticSearchServerAddress" index="userapi-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true" layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${logger} ${message} ${exception:format=toString}"> <field name="MachineName" layout="${machinename}" /> <field name="Time" layout="${longdate}" /> <field name="level" layout="${level:uppercase=true}" /> <field name="logger" layout=" ${logger}" /> <field name="message" layout=" ${message}" /> <field name="exception" layout=" ${exception:format=toString}" /> <field name="processid" layout=" ${processid}" /> <field name="threadname" layout=" ${threadname}" /> <field name="stacktrace" layout=" ${stacktrace}" /> <field name="Properties" layout="${machinename} ${longdate} ${level:uppercase=true} ${logger} ${message} ${exception}|${processid}|${stacktrace}|${threadname}" /> </target> </targets> <rules> <logger name="*" minlevel="INFO" writeTo="ElasticSearch" /> </rules> </nlog>
修改appsettings.json
"ConnectionStrings": { "ElasticSearchServerAddress": "http://{服务器地址}:9200" }
修改Program.cs文件
public class Program { public static void Main(string[] args) { NLogBuilder.ConfigureNLog("nlog.config"); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>().UseUrls("http://*:8001;").UseNLog(); }); }
修改Startup.cs文件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddNLog(); }
注入nlog对象进行测试
去kinaba里查看结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理