logstash是金牌搭档ELK中的“L”,它主要负责数据的收集、解析整理、传输。这对应体现在它的配置文件中的input、filter、output这三段配置。下面仅针对本次项目中需要使用到的地方做一个讲解,其他方面读者可自行到其官网查阅。
使用logstash非常简单,从官网下载压缩包,解压,执行bin目录下的logstash执行文件,即可:
启动命令:
bin/logstash agent -f logstash-simple.conf
logstash-simple.conf是logstash启动时指定的配置文件,该文件是logstash的核心。
logstash的conf文件中定义了数据来源,过滤条件,输出目的地。另外logstash为这几个模块都提供了丰富的插件,可以使用这些插件实现自己的业务需求。其文件结构及插件的使用如下:
input {
file {
# file插件, 数据源来自日志文件test.log
# 指定文件路径
path => “/Users/admin/test/test.log”
# 起始位置,beginning会发送旧数据,end则不会
start_position => "end"
codec => plain {
# plain插件,指定文件解析相关配置
# 指定字符集为“GBK”
charset => "GBK"
}
}
}
filter {
grok {
# grok插件,用于解析非json格式日志时使用,可以自定义匹配模式
# 指定模式文件地址
patterns_dir => "/Users/admin/test/testlogpatterns"
# 对日志内容进行模式匹配
match => ["message", "%{TESTPATTERN}"]
# 移除不需要的一些字段
remove_field => ["@version","@timestamp",message,host,path]
}
}
output {
http {
# http插件,通过http发送给数据需求者
http_method => "post"
# url地址
url => "http://192.168.5.109:8011/log"
}
}
test.log示例文件内容如下:
method:method1,username:snailiu,age:20,message:my test log
testlogpatterns文件内容如下:
TESTPATTERN method:%{DATA:method-name},username:%{DATA:username},age:%{INT:user-age},message:%{DATA:msg}
其中,TESTPATTERN为该匹配模式的ID与filter中grok下的match => [“message”, “%{TESTPATTERN}”]相对应。
后面则是匹配模式,如 %{DATA:method-name} 会将匹配test.log文件中的“method1”字符串,并设别名为method-name,%{DATA:method-name} 会将匹配test.log文件中的20字符串,并设别名为user-age,且将20转为INT型。上述日志通过模式匹配之后应该返回为一个json结构:
{method-name: method1, username: snailiu, user-age: 20, message: my test log , host : $##$#$#$#$#, path: $#$#$#$#$#, @timestamp: XXXXXXXXXXX, @version: XXXX message: XXXXX}
而path,host这些是我们所不需要的,因此可用remove_field进行删除。如此,就完成了数据获取和整理流程。
最后,output中使用http插件,将获取到的数据发送给某一个第三方服务。