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

简单粗暴创建可视化图表:

  1. 进入 Visualize 标签页
  2. 选择 Vertical Bar Chart(垂直柱状图)
  3. 选择 From Saved Search
  4. 选中刚创建的 Logback logs 搜索

坐标轴配置:

  • Y 轴:聚合方式选 Count
  • X 轴
    • 聚合方式选 Terms
    • 字段选 level

运行后就能看到不同日志级别(DEBUG/INFO/ERROR 等)的统计柱状图。

5. 总结

本文介绍了如何通过 Logstash 将 Java 应用日志推送到 Elasticsearch,并用 Kibana 实现可视化。核心步骤:

  1. Logback 配置 JSON 格式日志输出
  2. Logstash 配置文件输入和 ES 输出
  3. Kibana 创建搜索和可视化图表

这套方案简单高效,特别适合需要集中管理日志的生产环境。


原始标题:Send the Logs of a Java App to the Elastic Stack (ELK)