You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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?v
    
    你的索引格式为applogs-<应用名>-<环境名>-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:31:49