目前使用的是1.3.3版本 安装安装使用很简单。如果你安装好了java环境,使用下面命令就可以运行。

java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf – web

配置文件

logstash.conf 是配置文件

下面是一个简单的配置文件

1
2
3
4
5
6
input {
stdin { }
}
output {
elasticsearch { embedded => true }
}

input中是数据读入设置,一般有stdin(控制台)、file(文件)等等(有很多对应的文件格式读入比如log4j、redis等等)

output中主要是显示配置 一般很少配置这个采用默认就可以(需要调试信息的时候多数在这配置)

有时候读入文件不能满足logstash的格式要求,或读入的数据需要处理,这时候需要使用filter来进行修正。

一个有filter的配置文件类似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
input { stdin { } }
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
lasticsearch { embedded => true }
}

其中filter中的grokdate是对应的插件(插件不用安装默认包含在jar包中了),
filter中用的最多的是条件判断还有正则(filter中的插件也是很多,需要怎么处理使用对应的插件配置来处理,记得处理的内容是由input中录入的。是怎么读入而且是如何分割,在filter中有的插件会依赖于input录入的内容)

条件判断

有时候,你只想要一个过滤器只处理一定条件下的事件。对于这一点,你可以用一个条件判断!

语句类似于:

1
2
3
4
5
6
7
if EXPRESSION {
...
} else if EXPRESSION {
...
} else {
...
}

支持以下条件
判断是否相等:==, !=, <, >, <=, >=
正则判断是否相等: =~, !~
是否包含: in, not in

使用方式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
filter {
if [type] == "nginx-access" {
grok {
}
}
if [type] == "log4j" {
grok {
}
}
}

正则

在 filter中多数时候是采用正则来处理数据,处理后的数据才进入logstash。正则不多说。简单说一下如何使用。

logstash match中一般是使用正则来匹配,正则的格式类似于

  • %{TIMESTAMP_ISO8601}(系统预设的正则)
  • (?<agent>([\w\W]+?)(自定义的正则对应的匹配结果会放入agent变量可以使用%{agent}取得)。

很多时候不好调试,使用这个网站去调试logstash 正则它也可以查到系统有什么设置了的正则。

参考文档