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、filteroutput插件,框架如下所示:

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

猜你喜欢

转载自blog.csdn.net/wfs1994/article/details/80862225