前言
Logstash很多老铁,vip会员等在用,这里对于已经会用的老铁可以复习下,不会用老铁,可以通过这篇文章来学习。本文从它的价值,也就是为何会产生Logstash,它能干什么,到它是如何设计的,也就是它的架构原理方面学习,到最后该如何实现Logstash的细节,也就是我们该如何让Logstash来工作,通过各种配置,来定制和控制我们的Logstash。
第一部分为何产生
1.Logstash是什么?
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地进行存储。
我们可以看到可以搜集多种类型的数据,而且能够把他们标准化,然后发往目的地。对于这些数据,可以用来分析、归档、监控、报警灯。
第二部分设计实现
2.工作流程
分为三个阶段
处理流
pipeline本质
pipeline 是input-filter-output的三个阶段的处理流程,包含队列管理、插件生命周期管理。
logstash 数据以event的方式流转
原始数据进入logstash后在内部流转并不是以原始数据的形式流转,在input处被转换为event,在output event处被转换为目标格式的数据。可在配置文件中对其进行增删改查操作。
logstash数据流转示例
(1)通过配置文件控制流转
其数据转换过程如下:
命令运行
echo -e "foo\nbar" | ./bin/logstash -f codec.conf
3.Logstash工作流总结
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,我们最喜欢的是Elasticsearch)
输入:多数据源
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
过滤器:在线实时转换处理
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:
- 利用 Grok 从非结构化数据中派生出结构
- 从 IP 地址破译出地理坐标
- 将 PII 数据匿名化,完全排除敏感字段
- 整体处理不受数据源、格式或架构的影响
输出:选择你的存储,导出你的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
Logstash 提供众多输出选择,可以将数据发送到指定的地方,并且能够灵活地解锁众多下游用例。
4.logstash架构
logstash6.x架构
箭头代表数据流向。可以有多个input。中间的queue负责将数据分发到不同的pipline中,每个pipline由batcher,filter和output构成。batcher的作用是批量从queue中取数据(可配置)。
logstash数据流历程
首先有一个输入数据,例如是一个web.log文件,其中每一行都是一条数据。file imput会从文件中取出数据,然后通过json codec将数据转换成logstash event。
这条event会通过queue流入某一条pipline处理线程中,首先会存放在batcher中。当batcher达到处理数据的条件(如一定时间或event一定规模)后,batcher会把数据发送到filter中,filter对event数据进行处理后转到output,output就把数据输出到指定的输出位置。
输出后还会返回ACK给queue,包含已经处理的event,queue会将已处理的event进行标记。
队列详解
1.queue分类
In Memory
在内存中,固定大小,无法处理进程crash、机器宕机等情况,会导致数据丢失。
Persistent Queue In Disk
可处理进程crash情况,保证数据不丢失。保证数据至少消费一次;充当缓冲区,可代替kafka等消息队列作用。
Persistent Queue(PQ)处理流程
1、一条数据经由input进入PQ,PQ将数据备份在disk,然后PQ响应input表示已收到数据;
2、数据从PQ到达filter/output,其处理到事件后返回ACK到PQ;
3、PQ收到ACK后删除磁盘的备份数据;
第三部分具体实现
logstash设置相关配置文件
logstash设置相关配置文件主要位于conf配置文件下,在logstash启动时使用。
logstash.yml
logstash相关配置,如node.name,path.data等。其中这些配置的参数可以被命令行参数覆盖。
jvm.options
jvm相关参数,比如heap、size等。
pipeline配置文件
定义数据处理流程的文件,一般是用户自定义,以.conf结尾。
logstash.yml常见配置项
logstash命令行配置
pipeline配置
pipeline用于配置input、filter、output插件,框架如下:
配置语法
数值类型
注释
引用logstash event的属性(字段)
在配置中可以引用logstash event的属性(字段),方式如下:
1、直接引用字段
2、在字符串中以sprintf方式引用
条件判断
支持条件判断语法,从而扩展了配置的多样性
其中表达式操作符如下:
配置示例: