Serilog+Elasticsearch+ASP.NET Core日志无法写入Kibana求助
日志未显示在Kibana的排查步骤
1. 确认本地日志是否正常触发
先检查控制台、Debug窗口是否能看到Sending request to...和Received a success response from...的日志。如果本地无输出,说明日志未被触发,需排查:
- HttpHandler是否被正确注册到DI容器
- Logger是否通过构造函数正确注入到HttpHandler中
2. 查看Serilog SelfLog错误信息
你已开启SelfLog.Enable(Console.Error),运行程序时重点关注控制台的错误输出——Serilog写入Elasticsearch失败时,会在这里打印具体异常(如连接超时、权限不足、索引创建失败等)。
3. 验证Elasticsearch服务与索引状态
- 访问
http://localhost:9200,确认Elasticsearch服务正常运行,返回包含版本信息的JSON响应 - 用以下命令查看是否生成了目标索引:
你的索引格式为curl http://localhost:9200/_cat/indices?vapplogs-<应用名>-<环境名>-yyyy-MM(如applogs-myapi-production-2024-05),检查列表中是否存在对应索引。如果没有,结合SelfLog的错误信息定位原因。
4. 调整Serilog配置顺序
当前配置中ReadFrom.Configuration(context.Configuration)放在最后,会覆盖之前定义的部分WriteTo、Enrich规则。建议调整顺序,优先读取配置文件,再添加自定义配置:
configuration .ReadFrom.Configuration(context.Configuration) .Enrich.FromLogContext() .Enrich.WithMachineName() .Enrich.WithProperty("Environment", context.HostingEnvironment.EnvironmentName ?? "Environment Missing") .Enrich.WithProperty("Application", context.HostingEnvironment.ApplicationName ?? "Application Unknown") .WriteTo.Debug() .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticConfigurationSettings.Uri)) { IndexFormat = $"applogs-{context.HostingEnvironment.ApplicationName?.ToLower().Replace(".", "-")}-{context.HostingEnvironment.EnvironmentName?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}", TypeName = null, AutoRegisterTemplate = true, AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv8 }); SelfLog.Enable(Console.Error);
5. 修正Elasticsearch模板兼容性
Elasticsearch 8.x已废弃文档类型,AutoRegisterTemplate=true需指定ES版本避免兼容性问题,如上述代码中添加AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv8。也可手动删除旧模板(若存在),确保新模板正确注册。
6. 检查Kibana索引模式配置
- 进入Kibana的Management > Index Patterns,确认已创建匹配索引格式的模式(如
applogs-*) - 检查索引模式的Time field是否设置为
@timestamp(Serilog默认生成的时间字段) - 在Discover页面调整时间范围(如选择「最近15分钟」),避免因时间过滤导致日志不显示
7. 验证日志级别配置
临时将appsettings.json中Serilog的最低级别改为Verbose,排除级别过滤问题:
"Serilog": { "MinimumLevel": { "Default": "Verbose", "Override": { "Microsoft": "Information", "System": "Warning" } } }
内容的提问来源于stack exchange,提问作者user351479
相关产品推荐
相关产品推荐

