1. 概述
本文将手把手教你如何将 Java 应用的日志发送到 Elastic Stack(ELK)。在之前的文章中,我们重点介绍了 Elastic Stack 的搭建和 JMX 数据的接入方式,这次我们聚焦日志处理。
2. 配置 Logback
首先配置 Logback,通过 FileAppender
将日志写入文件:
<appender name="STASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logback/redditApp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logback/redditApp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="DEBUG">
<appender-ref ref="STASH" />
</root>
关键点说明:
✅ 使用 RollingFileAppender
+ TimeBasedRollingPolicy
实现按天分割日志
✅ 设置 maxHistory="7"
只保留最近 7 天的日志
✅ 采用 LogstashEncoder
将日志编码为 JSON 格式(方便 Logstash 处理)
要使用 LogstashEncoder
,需在 pom.xml
添加依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
⚠️ 别忘了给日志目录开权限,否则会踩坑:
sudo chmod a+rwx /var/lib/tomcat8/logback
3. 配置 Logstash
接下来配置 Logstash,让它读取应用生成的日志文件并推送到 Elasticsearch。创建配置文件 logback.conf
:
input {
file {
path => "/var/lib/tomcat8/logback/*.log"
codec => "json"
type => "logback"
}
}
output {
if [type]=="logback" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logback-%{+YYYY.MM.dd}"
}
}
}
配置要点:
input
使用file
类型(从文件读取日志)path
指定日志目录,处理所有.log
文件index
自定义为logback-%{+YYYY.MM.dd}
(替代默认的logstash
前缀)
启动 Logstash 的命令:
bin/logstash -f logback.conf
4. 使用 Kibana 可视化日志
现在可以在 Kibana 中看到 logback-*
索引的数据了。创建搜索条件隔离日志数据:
type:logback
简单粗暴创建可视化图表:
- 进入 Visualize 标签页
- 选择 Vertical Bar Chart(垂直柱状图)
- 选择 From Saved Search
- 选中刚创建的 Logback logs 搜索
坐标轴配置:
- Y 轴:聚合方式选
Count
- X 轴:
- 聚合方式选
Terms
- 字段选
level
- 聚合方式选
运行后就能看到不同日志级别(DEBUG/INFO/ERROR 等)的统计柱状图。
5. 总结
本文介绍了如何通过 Logstash 将 Java 应用日志推送到 Elasticsearch,并用 Kibana 实现可视化。核心步骤:
- Logback 配置 JSON 格式日志输出
- Logstash 配置文件输入和 ES 输出
- Kibana 创建搜索和可视化图表
这套方案简单高效,特别适合需要集中管理日志的生产环境。