logstash系列-入门整理

定位:采集日志源和解析处理日志事件

一、理解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

原文地址:https://www.cnblogs.com/yb38156/p/13054004.html