十二、用Logstash和Beats构建数据管道
1. Logstash入门
1.1 Logstash架构介绍
Logstash是一款开源的etl工具,可以对采集到的数据进行一系列的加工和处理,支持从多种不同的数据源采集数据(文件、HTTP、数据库、kafka),将处理后的数据发送到不同的地方。
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处理流程架构简介
Codec(Code/Decode): 之前我们说了,在Logstash内部,数据是以Event的方式进行流转的,那将原始数据转换为Event,再将Event转为目标格式的数据,这些操作就是Codec来完成的Decode: 将原始数据decode成EventCode: 将Event encode成目标数据
1.4 Logstash配置文件结构
之前我们说了,在
Logstash中我们将某一个数据处理的流程称作Pipeline,那Pipeline具体是一个什么东西呢?我们又该如何来创建一个Pipeline呢?
Pipeline是包含了Input/Filter/Output(不需要全部包含) 处理流程的一个配置文件- 我们在用的时候,只需要编写这个配置文件就ok了,我们在第一节的时候不就使用了吗
1.5 Logstash的Input Plugins(输入插件)
- 一个
Pipeline可以有多个input插件Stdin(控制台输入)/File(文件输入)Beats/Log4J/Elasticsearch/JDBC/Kafka/Rabbitmq/RedisJMX/HTTP/Websocket/UDP/TCPGoogle Cloud Storage/S3GitHub/Twitter
1.6 Logstash的Output Plugins(输出插件)
- 将
Event发送倒排特定的目的地,是Pipeline的最后一个阶段 - 常见
Output Plugins(https://www/elastic.co.guide/en/logstash/7.1/output-plugins.html)ElasticsearchEmail/PagedutyInfluxdb/Kafka/Mongodb/Opentsdb/ZabbixHttp/TCP/Websocket
1.7 Codec Plugins(数据转换)
- 将原始数据
decode成Event;将Eventencode成目标数据 - 内置的
Codec PluginsLine/MultilineJSON/Avro/Cef(ArcSight Common Event Format)Dots/Rubydebug
1.8 Filter Plugins(数据处理)
- 处理
Event - 内置的
Filter PluginsMutate: 操作Event的字段Metrics:Aggregate metricsRuby: 执行Ruby代码
1.9 Queue(队列)
我们现在知道,一个
Logstash是可以支持多个Input的,那为了防止Logstash重启的时候数据不会丢失,Logstash引入了Queue的概念,所有Input采集到的数据经过Codec转为Event后就会将Event发送到Queue当中,经过Queue再丢给Filter处理
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实例
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}}"
1.11.2 Codec Plugin-dots:输出处理进度
[root@hadoop101 logstash-7.1.0]# bin/logstash -e "input{stdin{codec=>line}}output{stdout{codec=> dots}}"
1.11.3 Codec Plugin-json:输入Json
[root@hadoop101 logstash-7.1.0]# bin/logstash -e "input{stdin{codec=>json}}output{stdout{codec=> rubydebug}}"
1.11.4 Codec Plugin-Multiline:多行匹配(异常日志处理)
- 设置参数
Pattern: 设置行匹配的正则表达式What: 如果匹配成功,那么匹配行属于上一个事件还是下一个事件Previous/Next
Negate true/false: 是否对pattern结果取反True/False
input {
stdin {
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
output {
stdout {
codec => "rubydebug"
}
}
1.12 Input plugin的实战
1.12.1 Input plugin:File(通过文件读取数据)
- 支持从文件中读取数据,如日志文件
- 文件读取需要解决的问题
- 只被读取一次。重启后需要从上次读取的位置继续(通过
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
就是用来收集数据的,可以很方便的和Logstash或ES集成。ElasticSearch公司开发了很多开箱即用的Beats
Light weight data shippers- 以搜集数据为主
- 支持与
Logstash或ES集成
- 全品类/轻量化/开箱即用/可插拔/可扩展/可视化
2.2 Metricbeat
2.2.1 简介
- 用来定期搜集操作系统,软件的指标数据
MetricvsLogsMetric: 可聚合的数据,定期搜集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定制
学习地址为极客时间《Elasticsearch核心技术与实战》,这只是我做的笔记,仅供参考;