如何在Kibana查看结构化日志?ELK+SpringBoot配置求助
问题分析与解决方案
嘿,我来帮你搞定这个结构化日志的问题!你的配置里有两个关键问题导致Kibana显示的不是结构化数据,咱们一步步来修正:
1. 先修复Logback的Appender引用错误
你在logback-spring.xml里定义的TCP Appender名字是logstash2,但root日志节点里引用的却是logstash——这就导致日志根本没通过你配置的TCP通道发送到Logstash!
修改root节点的引用:
<root level="INFO"> <appender-ref ref="logstash2" /> </root>
2. 调整Logstash配置,正确解析JSON日志
你的Logback已经用LoggingEventCompositeJsonEncoder输出了标准的JSON格式日志,但Logstash配置里却在用grok去解析传统文本日志,完全没处理JSON结构。咱们把Logstash的配置改成直接解析JSON:
修改后的config.json:
input { tcp { port => 5000 host => "localhost" codec => json_lines # 核心:告诉Logstash每行都是JSON格式 } } filter { # 不需要grok了!直接用date插件把日志里的timestamp转成Elasticsearch标准的@timestamp date { match => ["timestamp", "ISO8601"] target => "@timestamp" } } output { elasticsearch { hosts => ["localhost:9200"] # 给日志指定一个清晰的索引名,方便Kibana识别 index => "spring-boot-app-logs-%{+YYYY.MM.dd}" } # 可选:添加stdout输出,方便你在Logstash控制台调试看解析结果 stdout { codec => rubydebug } }
3. 验证与收尾
- 重启你的Spring Boot应用和Logstash服务
- 触发一些日志输出(比如调用接口、启动应用)
- 打开Kibana:
- 先创建匹配
spring-boot-app-logs-*的索引模式 - 进入Discover页面,就能看到
severity、service、trace等字段都变成结构化的了,完全符合你想要的展示效果!
- 先创建匹配
你的Logback编码器配置其实是没问题的,已经把各个字段封装成了标准JSON,只要Logstash正确解析,Elasticsearch就能存储结构化数据,Kibana自然就能正常展示啦~
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

