在.NET Core微服务架构中,日志收集是运维监控的核心环节。本文分享一个基于ELK栈的高效日志收集方案。
架构设计 我们采用Serilog作为日志框架,通过配置File和Elasticsearch输出目标实现日志收集。首先在项目中安装必要NuGet包:
Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.Elasticsearch
核心配置代码
builder.Logging.ClearProviders();
builder.Logging.AddSerilog(new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://elasticsearch:9200"))
{
AutoRegisterTemplate = true,
IndexFormat = "microservice-logs-{0:yyyy.MM.dd}"
})
.CreateLogger());
部署实践
- 在Docker Compose中部署ELK栈服务
- 为每个微服务配置相同的日志输出格式
- 使用logstash-filter-grok处理结构化日志
- 配置Kibana仪表板进行实时监控
运维优化
- 设置日志轮转策略,避免单个文件过大
- 启用GZIP压缩减少网络传输
- 建立日志级别过滤机制,生产环境仅记录Error及以上级别
该方案已在多个生产环境验证,能够有效支撑微服务集群的可观测性需求。

讨论