如何在Elasticstack的Kibana日志页面查看Serilog输出的日志流?
我正在.NET Core Web服务中评估Serilog.Sinks.Elasticsearch接收器,已通过JSON配置成功将日志发送至Elasticsearch,配置如下:
... "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://localhost:9200", "connectionGlobalHeaders": "Authorization=Basic <base64 encrypted user:pwd here>", "indexFormat": "serilog-{0:yyyy.MM.dd}" } } ], ...
我能在Kibana的Analytics->Discovery页面查看并过滤这些日志,但无法以易读方式展示消息;而Observability->Logs页面可实现该功能,却看不到这些日志(通过.NET->文件->filebeat->Elasticsearch方式则能看到)。请问是否需要配置Kibana或Elasticsearch接收器才能查看日志流?
问题核心是Kibana Observability Logs页面依赖Elastic通用架构(ECS)格式的日志数据,Serilog.Sinks.Elasticsearch默认输出的日志结构与ECS不匹配,而Filebeat会自动将日志转换为ECS兼容格式,因此能被Observability识别。可通过以下两种方式解决:
1. 让Serilog输出ECS兼容格式
安装Serilog.Formatting.Elasticsearch NuGet包,修改Serilog配置指定ECS兼容格式化器:
... "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://localhost:9200", "connectionGlobalHeaders": "Authorization=Basic <base64 encrypted user:pwd here>", "indexFormat": "serilog-{0:yyyy.MM.dd}", "formatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch" } } ], ...
该格式化器会自动将Serilog日志字段映射到ECS标准字段(如message、@timestamp、level等),让Observability Logs能正确解析并友好展示。
2. 手动配置Kibana数据视图(无需修改Serilog配置)
若不想调整Serilog输出格式,可在Kibana中创建对应数据视图:
- 进入Kibana Stack Management -> Data Views
- 新建数据视图,索引模式填写
serilog-* - 指定时间字段为Serilog输出的时间字段(默认是
Timestamp,若用ECS格式化器则选@timestamp) - 保存后,Observability->Logs页面即可选择该数据视图查看Serilog日志
3. 可选:验证索引模板适配数据流
若使用Elasticsearch数据流,需确保Serilog接收器注册的索引模板符合要求。可在配置中添加autoRegisterTemplate: true和templateName: "serilog-template",让接收器自动创建包含ECS字段映射的模板,保证日志被正确索引。
- Analytics->Discovery能看到日志但展示不友好,是因为Discovery直接呈现原始JSON文档,未做ECS字段的格式化渲染;而Observability Logs会基于ECS字段做结构化展示,自动提取消息、级别、时间等关键信息。
- Filebeat能被Observability识别,是因为它默认将采集的日志转换为ECS格式,包含Observability所需的标准字段。
内容的提问来源于stack exchange,提问作者Tim Meyer

