相关名词:
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