博客
关于我
Logstash是什么,干什么用的?带你详细认识
阅读量:800 次
发布时间:2023-02-06

本文共 1866 字,大约阅读时间需要 6 分钟。

Logstash详解:功能与工作原理

1. 介绍

Logstash是一款开源的数据收集引擎,支持实时数据流水线处理。它能够将不同来源的数据统一处理,并以标准化的格式输出。Logstash配备了丰富的插件,能够解析、丰富、转换和缓冲各种类型的数据,成为Elastic Stack的重要组件之一。

2. 工作原理

Logstash的核心是管道(pipeline)架构,每个管道包含输入(input)、输出(output)和可选的过滤器(filter)。输入阶段负责从数据源获取事件,输出阶段则将处理后的事件发送到目标系统。过滤器用于对事件进行预处理和转换。

2.1 输入阶段

Logstash支持多种输入插件,如文件监控(file)、Kafka、 Beats等。这些插件负责从数据源读取数据并生成事件。

2.2 过滤器阶段

过滤器是处理事件的核心,Logstash提供了多种插件,如Grok用于日志解析、Mutate用于字段转换等。通过配置过滤器,可以对事件数据进行精细化处理。

2.3 输出阶段

输出阶段负责将处理后的事件发送到目标系统,Logstash支持多种输出插件,如Elasticsearch、文件存储(file)等。

3. Codecs(解码器)

在输入和输出阶段,Logstash支持编解码器(codecs),用于对数据进行格式转换。编解码器作为过滤器的一部分,能够在数据传输和序列化过程中灵活配置,提升处理效率。

4. 持久队列(Persistent Queues)

为了防止数据丢失,Logstash提供了持久队列功能。队列位于输入和过滤器阶段之间,缓冲数据并存储在磁盘上。持久队列支持配置最大容量,当队列满时,Logstash会对输入施加压力,控制数据流速。

4.1 持久队列优点

  • 数据在异常终止时避免丢失。
  • 无需依赖外部消息队列(如Kafka、Redis),适合大规模缓冲和突发事件处理。

4.2 持久队列缺点

  • 磁盘故障可能导致数据丢失。
  • 对于不支持确认机制的输入插件(如TCP、UDP),持久队列无法防止数据丢失。

5. Dead Letter Queues(死信队列)

死信队列用于处理无法成功传输的事件。Logstash将无法处理的事件写入死信队列,记录失败原因和事件详细信息。通过配置Dead Letter Queue插件,可以从死信队列中读取事件进行处理。

6. 部署与扩展

Logstash适用于大规模部署,尤其是在企业级应用中。以下是Logstash常见的体系结构模型:

6.1 Beats到Elasticsearch

通过Filebeat等Beats模块,Logstash可以快速收集和解析日志,并将数据直接发送到Elasticsearch进行索引。

6.2 Beats与Logstash到Elasticsearch

Beats负责从边缘服务器收集日志,Logstash则作为中间件对数据进行加工和转换。Logstash支持水平扩展,通过增加节点数量提升处理能力。

6.3 扩展建议

  • Beats应在Logstash节点之间实现负载均衡。
  • 建议至少使用两个Logstash节点以确保高可用性。
  • 可为每个Logstash节点部署多个Beats输入,以适应不同场景需求。

7. 性能调优

Logstash的性能调优主要涉及JVM配置和管道优化。

7.1 JVM配置

  • 堆空间大小建议控制在4G到8G之间,避免过小导致垃圾回收压力过大。
  • 堆空间不要超过物理内存的50-75%,以留出运行其他进程的空间。

7.2 管道优化

  • pipeline.workers:配置适当的线程数,充分利用CPU资源。
  • pipeline.batch.size:根据内存大小合理配置批次大小,避免频繁内存分配带来的性能损失。
  • pipeline.batch.delay:调整延迟设置,平衡处理效率和延迟。

8. 数据顺序

Logstash默认不保证事件顺序,但可以通过配置实现有序处理。以下是常见配置方式:

  • pipeline.ordered: auto:默认配置,自动启用排序。
  • pipeline.ordered: true:强制事件按批处理顺序执行。
  • pipeline.ordered: false:禁用排序,适合不重视事件顺序的场景。

9. 结论

Logstash作为Elastic Stack的重要组件,提供了灵活的数据处理能力。通过合理配置输入输出、过滤器以及持久队列和死信队列,Logstash能够满足各种复杂的数据处理需求。

转载地址:http://zjufk.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>