Logstash 基础知识整理
相关名词:
Pipeline:
input-filter-output的三阶段处理流程
队列管理
插件生命周期管理
Logstash Event:
内部流转的数据表现形式
原始数据在input被转换为Event,在output event被转换为目标格式数据
在配置文件中可以对Event中的属性进行增删改查
Logstash架构图:
Batcher负责批量的从queue中取数据
Queue分类:
- In Memory : 无法处理进程Crash、机器宕机等情况,会导致数据丢失
- Persistent Queue In Disk:可处理进程Crash等情况,保证数据不丢失,保证数据至少消费一次,充当缓冲区,可以替代kafka等消息队列的作用
性能分析:
持久队列的基本配置:
queue.type:persisted #默认是memory queue.max_bytes:4gb #队列存储最大数据量
线程:
相关配置:
pipeline.worksers | -w # pipeline线程数,即filter_output的处理线程数,默认是cpu核数 pipeline.batch.size | -b #Batcher一次批量获取的待处理文档数,默认是125,可以根据输出进行调整,越大会占用越多的heap空间,可以通过jvm.options调整 pipeline.batch.delay | -u #Batcher等待的时长,单位为ms
Logstash配置文件:
logstash设置相关的配置文件(在conf文件夹中,setting files)
- logstash.yml:logstash相关配置,比如node.name、path.data、pipeline.workers、queue.type等,这其中的配置可以被命令行参数中的相关参数覆盖
- jvm.options:修改jvm的相关参数,比如修改heap size等
pipeline配置文件:定义数据处理流程的文件,以.conf结尾
logstash.yml配置项:
node.name: 节点名称,便于识别 path.data: 持久化存储数据的文件夹,默认是logstash home目录下的data path.config: 设定pipeline配置文件的目录(如果指定文件夹,会默认把文件夹下的所有.conf文件按照字母顺序拼接为一个文件) path.log: 设定pipeline日志文件的目录 pipeline.workers: 设定pipeline的线程数(filter+output),优化的常用项 pipeline.batch.size/delay: 设定批量处理数据的数据和延迟 queue.type: 设定队列类型,默认是memory queue.max_bytes: 队列总容量,默认是1g
logstash命令行配置项:
--node.name -f --path.config #pipeline路径,可以是文件或者文件夹 --path.settings #logstash配置文件夹路径,其中要包含logstash.yml -e --config.string #指明pipeline内容,多用于测试使用 -w --pipeline.workers -b --pipeline.batch.size --path.data --debug -t --config.test_and_exit
建议:线上环境推荐采用配置文件的方式来设定logstash的相关配置,这样可以减少犯错的机会,而且文件便于进行版本化管理;命令行形式多用来进行快速的配置测试、验证、检查等
logstash多实例运行方式:
bin/logstash --path.settings instance1 bin/logstash --path.settings instance2 不同instance中修改logstash.yml,自定义path.data,确保其不相同即可
pipeline配置简介:
Pipeline用于配置input、filter和output插件,框架如下所示:
input { ... } filter { ... } output { ... }
Pipeline配置语法:
主要有如下的数值类型:
布尔类型Boolean:
IDFailed => true
数值类型Number:
port => 33
字符创类型String:
name => "Hello world"
数组Array/List:
users => [{id => 1,name => bod},{id => 2,name => jane}] path => ["/var/log/messages","/var/log/*.log"]
哈希类型Hash:
match => { "field1" => "value1" "field2" => "value2" }
在配置中可以引用Logstash Event的属性(字段),主要有如下两种方式:
- 直接引用字段值
使用[]即可,嵌套字段写多层[]即可 if [path] =~ "access" if [ua][os] =~ "windows"
- 在字符串中以sprintf方式引用
使用%{}来实现 req => "request is %{request}" us => "ua is %{[ua][os]}"
支持条件判断语法,从而扩展了配置的多样性,主要格式如下:
if EXPRESSION{ ... }else if EXPRESSION{ ... }else{ ... }
表达式主要包含如下操作符:
- | 操作符 |
---|---|
比较 | ==、!=、<、>、<=、>= |
正则是否匹配 | =~、!~ |
包含(字符串或者数组) | in、not in |
布尔操作符 | and、or、nand、xor、! |
分组操作符 | () |
logstash监控运维:
API
x-pack
API:Logstash提供了丰富的api来查看Logstash的当前状态
http://192.168.20.101:9600 http://192.168.20.101:9600/_node http://192.168.20.101:9600/_node/stats http://192.168.20.101:9600/_node/hot_threads # curl http://192.168.20.101:9600/_node/stats?pretty
原文:https://blog.csdn.net/wfs1994/article/details/80862225