Elasticsearch核心技术与实践四

1,632 阅读5分钟

十二、用LogstashBeats构建数据管道

1. Logstash入门

1.1 Logstash架构介绍

  • Logstash是一款开源的etl工具,可以对采集到的数据进行一系列的加工和处理,支持从多种不同的数据源采集数据(文件、HTTP、数据库、kafka),将处理后的数据发送到不同的地方。

image

1.2 Logstash Concepts(Logstash中的一些概念解释)

  • Pipeline(管道的意思)
    • 包含了 input-filter-output三个阶段的处理流程(我们把这种标准化的处理流程叫做Pipeline
    • 插件生命管理周期(Logstash目前支持200多个插件)
    • 队列管理(Logstash有一个自己的消息队列)
  • Logstash Event
    • 数据在内部流转时的具体表现形式。数据在input阶段被转换为Event,在output阶段被转换为目标格式数据
    • Event其实是一个Java Object,在配置文件中,对Event的属性进行增删改查

1.3 Logstash处理流程架构简介

image

  • Codec(Code/Decode): 之前我们说了,在Logstash内部,数据是以Event的方式进行流转的,那将原始数据转换为Event,再将Event转为目标格式的数据,这些操作就是Codec来完成的
    • Decode: 将原始数据decodeEvent
    • Code: 将Event encode成目标数据

1.4 Logstash配置文件结构

之前我们说了,在Logstash中我们将某一个数据处理的流程称作Pipeline,那Pipeline具体是一个什么东西呢?我们又该如何来创建一个Pipeline呢?

  • Pipeline是包含了Input/Filter/Output(不需要全部包含) 处理流程的一个配置文件
  • 我们在用的时候,只需要编写这个配置文件就ok了,我们在第一节的时候不就使用了吗

image

1.5 LogstashInput Plugins(输入插件)

  • 一个Pipeline可以有多个input插件
    • Stdin(控制台输入)/File(文件输入)
    • Beats/Log4J/Elasticsearch/JDBC/Kafka/Rabbitmq/Redis
    • JMX/HTTP/Websocket/UDP/TCP
    • Google Cloud Storage/S3
    • GitHub/Twitter

1.6 LogstashOutput Plugins(输出插件)

1.7 Codec Plugins(数据转换)

  • 将原始数据decodeEvent;将Event encode成目标数据
  • 内置的Codec Plugins
    • Line/Multiline
    • JSON/Avro/Cef(ArcSight Common Event Format)
    • Dots/Rubydebug

1.8 Filter Plugins(数据处理)

  • 处理Event
  • 内置的Filter Plugins
    • Mutate: 操作Event的字段
    • Metrics: Aggregate metrics
    • Ruby: 执行Ruby代码

1.9 Queue(队列)

我们现在知道,一个Logstash是可以支持多个Input的,那为了防止Logstash重启的时候数据不会丢失,Logstash引入了Queue的概念,所有Input采集到的数据经过Codec转为Event后就会将Event发送到Queue当中,经过Queue再丢给Filter处理

image

1.9.1 In Memory Queue(内存队列)

  • 进程如果Crash,机器宕机,都会引起数据的丢失

1.9.2 Persistent Queue(持久化队列)

  • Queue.type.persisted(默认是memory
    • Queue.max_bytes: 4gb
  • 机器宕机,数据也不会丢失;数据保证会被消费;可以代替Kafka等消息队列等消息队列缓冲区的作用
  • https://www.elastic.co/guide/en/logstash/7.1/persistent-queues.html

1.10 多Pipeline实例

image

  • Pipeline.works: Pipeline线程数,默认是CPU核数
  • Pipeline.batch.size: Batcher一次批量获取等待处理的文档数,默认125。需结合jvm.options调节
  • Pipeline.batch.delay: Batch等待时间

1.11 Codec plugin的实战

1.11.1 Codec Plugin-line:单行输入

[root@hadoop101 logstash-7.1.0]# bin/logstash -e "input{stdin{codec=>line}}output{stdout{codec=> rubydebug}}"

image

1.11.2 Codec Plugin-dots:输出处理进度

[root@hadoop101 logstash-7.1.0]# bin/logstash -e "input{stdin{codec=>line}}output{stdout{codec=> dots}}"

image

1.11.3 Codec Plugin-json:输入Json

[root@hadoop101 logstash-7.1.0]# bin/logstash -e "input{stdin{codec=>json}}output{stdout{codec=> rubydebug}}"

image image

1.11.4 Codec Plugin-Multiline:多行匹配(异常日志处理)

  • 设置参数
    • Pattern: 设置行匹配的正则表达式
    • What: 如果匹配成功,那么匹配行属于上一个事件还是下一个事件
      • Previous/Next
    • Negate true/false: 是否对pattern结果取反
      • True/False

image

input {
	stdin {
		codec => multiline {
			pattern => "^\s"
			what => "previous"
		}
	}
}
output {
	stdout {
		codec => "rubydebug"
	}
}

image image

1.12 Input plugin的实战

1.12.1 Input pluginFile(通过文件读取数据)

  • 支持从文件中读取数据,如日志文件
  • 文件读取需要解决的问题
    • 只被读取一次。重启后需要从上次读取的位置继续(通过sincedb实现,将位置信息保存到sincedb中)
  • 读取到文件新内容,发现新文件
  • 文件发生归档操作(文档位置发生变化,日志rotation),不能影响当前的内容读取

1.12 Filter plugin的实战(重要)

  • Filter Plugin可以对Logstash Event进行各种处理,例如解析,删除字段,类型转换
    • Date: 日期解析
    • Dissect: 分隔符解析
    • Grok: 正则匹配解析器
    • Mutate: 处理字段。重命名,删除,替换
    • Ruby: 利用Ruby代码来动态修改Event

1.12.1 Filter Plugin: Mutate(重要)

  • 对字段做各种操作
    • Convert: 类型转换
    • Gsub: 字符串替换
    • Split/Join/Merge: 字符串切割,数组合并字符串,数组合并数组
    • Rename: 字段重命名
    • Update/Replace: 字段内容更新替换
    • Remove_field: 字段删除

2. Beats介绍

2.1 什么是Beats

就是用来收集数据的,可以很方便的和LogstashES集成。ElasticSearch公司开发了很多开箱即用的Beats

  • Light weight data shippers
    • 以搜集数据为主
    • 支持与LogstashES集成
  • 全品类/轻量化/开箱即用/可插拔/可扩展/可视化

image

2.2 Metricbeat

2.2.1 简介

  • 用来定期搜集操作系统,软件的指标数据
    • Metric vs Logs
      • Metric: 可聚合的数据,定期搜集
      • Logs: 文本数据,随机搜集
  • 指标存储在Elasticsearch中,可以通过Kibana进行实时的数据分析

2.2.2 Metricbeat组成

  • Module
    • 搜集的指标对象,例如不同的操作系统,不同的数据库,不同的应用系统
  • Metricset
    • 一个Moudle可以有多个metricset
    • 具体的指标集合。以减少调用次数为原则进行划分
      • 不同的 metricset 可以设置不同的抓取时长

2.2.3 Module

  • Metricbeat提供了大量的开箱即用的Module
  • 通过执行metricbeat module list查看
  • 通过执行metricbeat module enable module_name定制

blog.csdn.net/fenglixiong…

学习地址为极客时间《Elasticsearch核心技术与实战》,这只是我做的笔记,仅供参考;