云计算百科
云计算领域专业知识百科平台

SpringBoot整合LogStash,LogStash采集服务器日志

LogStash

1. 下载

版本支持兼容表https://www.elastic.co/cn/support/matrix

版本: 7.16.x 的最后一个版本

https://www.elastic.co/downloads/past-releases/logstash-7-16-3

需要提前安装好jdk1.8和ES, 此处不在演示

在这里插入图片描述

2. 安装

tar -xvf logstash-7.16.3-linux-x86_64.tar.gz
cd logstash-7.16.3
touch logstash-my.conf

3.配置

分 inputs,filters、outputs三个主要配置

此处以以下配置为例,将服务器中的log日志推至ES中

# UAT
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
file {
path => ["/opt/javaproject/logs/all/*.log","/opt/javaproject/logs/all.log"]
}
}
filter {

}

output {
elasticsearch {
action => "index"
hosts => "http://127.0.0.1:9200"
user => "elastic"
password => "elastic"
index => "app-uat-log-%{+YYYY-MM-dd}"
}

}

4.启动

在logstash 目录输入如下命令进行启动:

./bin/logstash -f logstash-test.conf

后台启动:

nohup ./bin/logstash -f logstash-test.conf >/dev/null 2>&1 &

热配置加载启动:

nohup ./bin/logstash -f logstash-test.conf –config.reload.automatic >/dev/null 2>&1 &

启动成功之后,如果是非后台启动,可以在控制台查看数据的传输,如果是后台启动,则可以在logstash的log目录中进行查看。

5.问题

1. SpringBoot整合logstash, 跟logstash直接监听log文件有何区别

Spring Boot 整合 Logstash 和 Logstash 直接监听日志文件 是两种不同的日志采集方式,各有优劣,具体区别如下:


1. Spring Boot 整合 Logstash(主动推送)
原理

Spring Boot 项目通过 Logback 或 Log4j2 直接向 Logstash 发送日志数据,而不是依赖 Logstash 监听日志文件。

实现方式
  • 使用 Logstash TCP/UDP 方式推送日志 在 logback-spring.xml 配置 Logstash Appender:

    <configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>logstash-server:5044</destination>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <root level="info">
    <appender-ref ref="LOGSTASH" />
    </root>
    </configuration>

  • 使用 ELK Stack 进行日志管理 Logstash 监听 TCP 端口接收日志:

    input {
    tcp {
    port => 5044
    codec => json
    }
    }

    output {
    elasticsearch {
    hosts => ["http://es-server:9200"]
    index => "springboot-logs"
    }
    }

  • 优缺点

    ✅ 实时性高:日志可以即时推送到 Logstash,延迟较低。 ✅ 不会丢失日志:不会因为文件轮转导致日志缺失。 ❌ 对应用影响较大:Spring Boot 需要主动推送日志,若 Logstash 不可用可能会影响应用运行。 ❌ 部署复杂:需要修改 Spring Boot 日志配置,并保证 Logstash 端口可用。


    2. Logstash 直接监听日志文件(被动采集)
    原理

    Spring Boot 只需按正常方式输出日志到文件,Logstash 监听该日志文件并读取数据推送到 Elasticsearch。

    实现方式
  • Spring Boot 配置日志输出到文件

    logging:
    file:
    name: logs/app.log
    level:
    root: info

  • Logstash 配置监听文件

    input {
    file {
    path => "/path/to/logs/app.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    }
    }

    output {
    elasticsearch {
    hosts => ["http://es-server:9200"]
    index => "springboot-logs"
    }
    }

  • 优缺点

    ✅ 对应用无侵入:Spring Boot 只是正常写日志,不需要做额外改动。 ✅ 更稳定:即使 Logstash 发生故障,Spring Boot 也不会受影响。 ❌ 实时性稍差:Logstash 需要轮询日志文件,会有一定延迟。 ❌ 日志文件轮转问题:如果日志文件滚动(log rotation),可能会丢失部分日志,需额外处理 sincedb。


    3. 两者的主要区别
    方式实时性对 Spring Boot 影响部署难度可靠性
    Spring Boot 整合 Logstash(推送) 高(直接推送) 需要修改日志配置,可能影响应用 需要配置 Logstash 端口 高(不会因文件丢失日志)
    Logstash 监听日志文件(采集) 略低(依赖文件变更) 完全无侵入 只需配置 Logstash 监听文件 可能受 log rotation 影响

    4. 什么时候选择哪种方式?
    • 如果你需要高实时性(如监控系统、异常报警) → 选择 Spring Boot 整合 Logstash,直接推送日志。
    • 如果你希望对 Spring Boot 无侵入,简单易用 → 选择 Logstash 监听日志文件,避免影响应用。
    • 如果你的应用是容器化(Docker / Kubernetes) → 推荐 Spring Boot 直接推送到 Logstash,因为容器日志文件管理不稳定。
    • 如果你的应用是传统部署(虚拟机/物理机) → 两种方式都可以,但监听文件方式可能更简单。
    最佳实践

    可以结合两者:

    • 应用运行时推送关键日志(错误日志、重要事件)到 Logstash,用于监控和报警。
    • 同时使用文件日志记录全部日志,并用 Logstash 监听日志文件,用于历史查询。

    这种方式既能保证实时性,又不会因为 Logstash 故障导致日志丢失。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » SpringBoot整合LogStash,LogStash采集服务器日志
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!