本文作者:罗海鹏,叩丁狼高级讲师。原创文章,转载请注明出处。
前言
在第九章节中,我们已经安装好Logstash组件了,并且启动实例测试它的数据输入和输出,但是用的是最简单的控制台标准输入和标准输出,那这节我们就来深入的学习Logstash的详细使用。
常用启动参数
我们在上一节中演示了启动Logstash的实例,其中我们启动的时候给Logstash脚本传入了-e的参数,但实际上,Logstash的启动参数有很多,我们来看一下各个启动参数的作用:
- -e #立即启动实例,例如:
./logstash -e "input {stdin {}} output {stdout {}}"
- -f #指定启动实例的配置文件,例如:
./logstash -f config/test.conf
- -t #测试配置文件的正确性,例如:
./logstash -f config/test.conf -t
- -l #指定日志文件名称,例如:
./logstash -f config/test.conf -l logs/test.log
- -w #指定filter线程数量,不指定默认是5,例如:
./logstash-f config/test.conf -w 8
配置文件语法
我们刚刚知道,启动参数可以指定一个配置文件,那么接下来就有必要来了解一下配置文件的结构:
Logstash通过{}来定义区域,区域内可以定义插件,一个区域内可以定义多个插件,如下:
input {
#标准输入源插件
stdin {
}
#普通文件源插件
file {
path => ["/var/log/*.log", "/var/log/message"]
....
}
......
}
filter {
#grok过滤插件
grok {
match => ["message", "%{HTTPDATE:logdate}"]
.....
}
#date过滤插件
date {
match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
.....
}
.....
}
output {
stdout {
}
elasticsearch {
hosts => ["127.0.0.1:9200"]
....
}
.....
}
我们先大概了解一下配置文件的结构,接下来我们再详细看这些插件的配置。
Logstash配置文件支持的数据类型有:
1、Boolean,例如:ssl_enable => true
2、Number,例如:port => 33
3、String,例如:name => “Hello world”
4、hash,例如:options => {key1 => “value1”, key2 => “value2”}
5、array,例如:match => [“datetime”, “UNIX”, “ISO8601”]
Logstash数据流中的数据被称之为Event对象,Event以JSON结构构成,Event的属性被称之为字段,如果你想在配置文件中引用这些字段,只需要把字段的名字写在中括号[]
里就行了,如[type]
,对于嵌套字段每层字段名称都写在[]
里就可以了,比如:[tags][type]
;除此之外,对于Logstash的arrag类型支持下标与倒序下表,如:[tags][type][0]
和[tags][type][-1]
以下的内容就是一个Event对象:
{
"message" => "hello logstash",
"@version" => "1",
"@timestamp" => 2018-08-13T17:32:01.122Z,
"host" => "localhost.localdomain"
}
Logstash支持下面的操作符:
1、==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
2、=~(匹配正则), !~(不匹配正则)
3、in(包含), not in(不包含)
4、and(与), or(或), nand(非与), xor(非或)
5、()(复合表达式), !()(对复合表达式结果取反)
例如以下的条件判断:
if "_grokparsefailure" not in [tags] {
}
else if [status] !~ /^2\d\d/ or ( [url] == "/noc.gif" nand [geoip][city] != "beijing" ) {
}
else {
}
Logstash支持引用系统环境变量,环境变量不存在时可以设置默认值,例如:
export TCP_PORT=12345
input {
tcp {
port => "${TCP_PORT:54321}"
}
}
常用输入插件
在第九章中,我们已经使用是标准输入,以键盘的输入数据作为Logstash数据源,但实际上我们也知道,Logstash的数据源有很多,每种数据源都有相应的配置,在Logstash中,这些数据源的相应配置称为插件,我们常用的输入插件有:file、jdbc、redis、tcp、syslog,这些输入插件会监听数据源的数据,如果新增数据,将数据封装成Event进程处理或者传递,更多的输入插件大家可以看Logstash官网,接下来我们以file和jdbc两个输入插件作为例子,来学习输入插件的使用,其他输入插件使用起来大同小异,大家自行扩展。
读取文件插件主要用来抓取文件的数据变化信息,以此作为Logstash的数据源。
- 配置示例:
input{ file { path => ["/var/log/*.log", "/var/log/message"] type => "system" start_position => "beginning" } } output{ stdout{} }
- 常用参数
参数名称 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
path | array | 无 | 用于匹配被监控的文件,如”/var/logs\/*.log”或者 “/var/log/message”,必须使用绝对路径 |
type | string | 无 | Event的type字段,如果采用elasticsearch做store,在默认情况下将作为elasticsearch的type |
sincedb_path | string | “$HOME/.sincedb*” | 文件读取记录,必须指定一个文件而不是目录,文件中保存没个被监控的文件等当前inode和byteoffset |
sincedb_write_interval | number | 15 | 间隔多少秒写一次sincedb文件 |
start_position | string | “end” | 值为“beginning”和“end”,从文件等开头还是结尾读 |