概述
作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。
原理
数据源提供的数据进入Logstash的管道后需要经过3个阶段:
- input:负责抽取数据源的数据,这个过程一般需要包含数据源的连接方式、通信协议和抽取间隔等信息,目的是将原始数据源源不断地接入数据管道。
- filter:将抽取到数据管道的数据按照业务逻辑的需要进行数据转换,例如添加或删除部分字段、修改部分字段的数据内容等。
- output:将过滤后的数据写入数据的目的地,在大多数情况下,数据会被写入ES索引,也可把数据写入文件或其他地方。
安装
从官网下载解压即可使用,找到bin目录下的脚本文件,双击即可完成安装。
目录
以版本为例,目录如下:
- bin:包含各种二进制形式的可执行脚本,如Logstash的启动脚本、插件脚本
- config:各种配置文件
- data:Logstash脚本执行时默认的数据目录
- lib:Logstash运行时的库文件
- logs:Logstash运行时产生的日志文件
- logstash-core:包含Logstash的关键组件
- logstash-core-plugin-api:包含Logstash的插件API
- modules:包含Logstash拥有的模块文件
- tools:包含Logstash运行时可用的工具组件
- vendor:包含Logstash运行时依赖的Ruby环境
- x-pack:包含Logstash的X-Pack插件扩展内容
配置
logstash.yml
命令行启动会覆盖logstash.yml
里的配置:
配置 | 说明 |
---|---|
path.data |
配置Logstash运行时产生的临时数据目录,默认为data目录 |
pipeline.workers |
从临时队列中消费数据进行过滤处理的线程数 |
pipeline.batch.size |
单个线程能够多从队列中一次性消费的事件数目,默认值125 |
pipeline.ordered |
控制数据流是否有序输出,若为talse则不能保证数据有序向外输出;若为true则只启用一个工作线程进行消费,保证数据有序。默认值为auto,只有在工作线程数设置为1时才保证有序 |
path.config |
指定启动的数据采集脚本的目录 |
config.reload.automatic |
若为true,则自动检查并加載最新的采集脚本,修改采集脚本后可以避免重启Logstash实例;若为talse,则采集脚本修改后需重启Logstash才能生效 |
queue.type |
用于设置缓冲队列的类型,默认队列保存在内存中,若设置为persisted则会将队列数据持久化地存储到磁盘上 |
path.logs |
配置Logstash运行时产生日志的目录,默认是安装目录中的logs目录 |
dead_letter_queue.enable |
配置是否开启死亡消息队列功能,默认不开启。如果开启,则会把处理失败的数据持久化地存储到磁盘上以便将来有机会重新执行 |
jvm.options
jvm.options
文件主要用于调整Logstash的JVM堆内存大小,默认值为1GB。通常这个值应该配置为4GB~8GB,最好不要超过机器物理内存大小的一半。性能调优时,可动态调整此配置并观察数据抽取速度与内存使用率,在两者之间取得平衡。
pipelines.yml
在一个Logstash进程中运行多个数据管道,即同时执行多个采集脚本,有两种方法:
pipelines.yml
配置文件,指明每个数据管道的配置参数,没有声明的配置,则使用logstash.yml
中配置:
- pipeline.id: test
pipeline.workers: 1
pipeline.batch.size: 1
path.config: &#