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 故障导致日记丢失。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |