前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >logstash pipleline 高级属性

logstash pipleline 高级属性

作者头像
Kevin song
发布2021-09-15 10:41:15
1.6K0
发布2021-09-15 10:41:15
举报

logstash pipleline

默认logstash只有一个管道,该管道由一个输入、若干个过滤器和一个输出组成。默认情况下当conf.d下有多个配置文件时,其实默认走的都是一个管道,这时处理多个数据流可能出现数据紊乱的情况。如果要处理多个数据流,就要使用条件判断。logstash 6.0 引入了Multiple Pipelines ,通过在配置文件pipelines.yml 中声明多个管道,实现针对不同业务场景和类型的数据流,配置不同管道进行数据流互相隔离。

logstash pipleline 三个部分

  • input插件:提取数据。这可以来自日志文件,TCP或UDP侦听器,若干协议特定插件(如syslog或IRC)之一,甚至是排队系统(如Redis,AQMP或Kafka)。此阶段使用围绕事件来源的元数据标记传入事件。
  • filter 插件:插件转换并丰富数据
  • output插件: 将已处理的事件加载到其他内容中,例如ElasticSearch或其他文档数据库,或排队系统,如Redis,AQMP或Kafka。它还可以配置为与API通信。也可以将像PagerDuty这样的东西连接到Logstash输出。

logstash 支持多个input、output ,同时多个worker可以处理filter及output。

logstash.yml文件详解

代码语言:javascript
复制
#使用分层表单来设置管道的批处理大小和批处理延迟
   pipeline:
     batch:
       size: 125        #管道批处理大小
       delay: 5             #管道批处理延迟
#若要表示与平面键相同的值:pipeline.batch.size: 125
   pipeline.batch.delay: 5
#节点名称,在集群中具备唯一性,默认为logstash主机的主机名
node.name: 
#logstash及其插件所使用的数据路径,默认路径为logstash家目录下的data目录
path.data: 
#管道的ID,默认为main
pipeline.id: main
#输入、输出及过滤器的总工作数量,也就是logstash的工作进程,此工作进程默认为主机的cpu核心数量
pipeline.workers: 16 
#在输入阶段,单个工作线程将从输入中收集的最大事件数,此事件数堆内存开销较大,内存开销可在jvm.options中设置堆内存大小来优化此选项
pipeline.batch.size: 125
#在将一个较小的批发送到filters+output之前,轮询下一个事件时等待的时间(以毫秒为单位)
pipeline.batch.delay: 50
#设置为true时,在强制关闭logstash期间,即使内存中还有事件,那么为true将会强制关闭,导致数据丢失;默认为false,false在强制关闭logstash期间,将拒绝退出,直到所有在管道中的事件被安全输出,再关闭。pipeline.unsafe_shutdown: false
#指定管道配置的目录,在此目录下的所有管道配置文件都将被logstash读取,除管道配置外,不要放任何文件
path.config: 
#在启动时,测试配置是否有效并退出,检测配置文件是否正确,包括检测管道配置文件,默认为false
config.test_and_exit: true
#定期检查配置是否更改并重新加载管道,默认为false
config.reload.automatic: true
#logstash间隔多久检查一次配置中的更改,默认为3秒
config.reload.interval: 600s
#设置为true时,将完全编译的配置显示为调试日志消息
config.debug: false
#用于事件缓冲的内部排队模型;可以指定内存memory或者磁盘persisted,内存处理速度相对磁盘来说效率要高,默认为内存
queue.type: memory
#启用持久队列时将存储数据文件的目录路径,默认为logstash路径下的queue
path.queue: 
#启用持久队列时使用的页面数据文件的大小(queue.type: persisted)队列数据由分成页面的仅附加数据文件组成
queue.page_capacity: 64mb
#启用持久队列时队列中未读事件的最大数量(queue.type: persisted),默认为0,0为无限制
queue.max_events: 0
#队列的总容量,以字节数表示,默认为1G,根据业务需求而定
queue.max_bytes: 1024mb
#启用持久队列时强制检查点之前最大的ACK事件数量(queue.type: persisted),设置为0,表示无限制,默认为1024
queue.checkpoint.acks: 1024
#启用持久队列时强制检查点之前写入事件的最大数量(queue,type: persisted),设置为0,表示无限制,默认为1024
queue.checkpoint.writes: 1024
#启用持久队列(queue,type: persisted),强制在头部页面上设置检查点的间隔(以毫秒为单位),有周期性检查点的默认值是1000毫秒
queue.checkpoint.interval: 1000
#用于指示logstast启用插件支持DLQ功能的标志,默认为false
dead_letter_queue.enable: false
#每个死信队列的最大大小,如果条目超过此设置会增加死信队列的大小,则会删除条目,默认为1024mb
dead_letter_queue.max_bytes: 1024mb
#为死信队列存储数据文件的目录路径
#path.dead_letter_queue: 
#度量标准REST端点的绑定地址,默认为127.0.0.1
http.host: "127.0.0.1"
#度量标准REST端点的绑定端口,默认为9600
http.port: 9600
#日志级别,可以设置为以下几种级别,默认为info
log.level: info
           fatal
           error
           warn
           info (default)
           debug
           trace
#logstash日志目录位置,默认为logstash路径下的logs
path.logs: /var/log/logstash
#logstash插件路径
path.plugins: []

条件地狱(Conditional hell)

logstash在一个管道中实现多个独立流的方法是使用条件判断。主要方式是在输入部分通过标签标记事件,然后在过滤器中和输出阶段创建条件分支,对贴有不同标签的事件,应用不同的插件集。

代码语言:javascript
复制
input {
  beats { 
port => 3444  
tag => apache  
 }
  tcp {
 port => 4222  
 tag => firewall   
}
}
filter {
   if "apache" in [tags] {  
    dissect { ... }
   } 
else if "firewall" in [tags] {  
    grok { ... }
   }  
}
output {
   if "apache" in [tags] {  
    elasticsearch { ... }
   } 
else if "firewall" in [tags] {  
    tcp { ... }
   }  
}

对应的 Logstash 管道配置已经被条件语句包裹的十分臃肿,而它们的唯一目的是保持数据流的独立性。虽然使用条件实现独立的多个流是可行的,但是很容易看出,由于存在单个管道和处理的单个阶段,随着复杂性的增加,配置会变得非常冗长,很难管理。

Multiple Pipelines

pipelines.xml 声明多个管道

vim /etc/logstash/pipelines.yml

代码语言:javascript
复制
- pipeline.id: main
  path.config: "/etc/logstash/conf.d/*.conf"
- pipeline.id: id-logstash-syslog
  pipeline.workers: 2
  pipeline.batch.size: 8000
  pipeline.batch.delay: 10
  path.config: "/etc/logstash/pipeline/syslog.conf"
- pipeline.id: id-logstash-system
  pipeline.workers: 1
  pipeline.batch.size: 8000
  pipeline.batch.delay: 10
  path.config: "/etc/logstash/pipeline/system.conf"

其中 pipeline.id 为 main 的管道是默认的配置,新添加了两个管道并指定了对应的配置文件路径。

参数介绍

id 管道名词

workers 处理线程数(Filter、Output使用)

batch.size 每个线程批处理大小

batch.delay 每个线程批处理事件最大等待时间(默认50ms)

检测文件格式正确与否

代码语言:javascript
复制
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf  -t

启动logstash

代码语言:javascript
复制
systemctl   start logstash
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档