定位:采集日志源和解析处理日志事件
一、理解input,queue,pipline运行的线程模型
简述:
(1)每个Input启动一个线程,从对应数据源获取数据
(2)Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性:
Persistent Queues:通过磁盘上的queue来防止数据丢失
Dead Letter Queues:保存无法处理的event(仅支持Elasticsearch作为输出源)
(3)Logstash会有多个pipeline worker, 每一个pipeline worker会从队列中取一批数据,然后执行filter和output(worker数目及每次处理的数据量由配置确定)
二、Persistent Queue说明
https://www.elastic.co/guide/en/logstash/current/persistent-queues.html
提供at-least-once保证消息不丢失,但不保证不重复
局限性:tcp,udp,ZeroMQ,以及没有ack机制的input类型,无法保证数据不丢失;持久化硬盘损坏,故障情况无法处理
三、配置处理三阶段
四、Reload过程
https://www.elastic.co/guide/en/logstash/current/reloading-config.html
命令:bin/logstash -f xxx.config --config.reload.automatic,(reload和-e命令不能同时使用)
可选参数:--config.reload.interval <interval>:指定检查时间间隔(单位s,参数值中需要带上单位s),logstash默认每3秒检查一次配置参数变化
如果启动logstash时未启用reload,在运行中想强制reload,可以使用SIGHUP(signal hangup)参数执行如下命令:
kill -SIGHUP <pid>
原理:
- 检测到配置文件变化
- 通过停止所有输入停止当前pipline
- 用新的配置创建一个新的管道
- 校验配置文件语法是否正确
- 校验所有的输入和输出是否可以初始化
- 校验成功使用新的pipeline替换当前的pipeline,
- 校验失败,使用旧的继续工作,将校验信息输出到控制台
在重载过程中,jvm不会重启
备忘:syslog的重载配置文件会崩溃
五、4类插件
Inputs:file,syslog,kafka,beats,log4j,jdbc 等
Filters:处理数据如格式转换,数据派生等,常见:grok, mutate, drop, clone等
Outputs:kafka, elastcisearch,file,
Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的如json,multiline