简介
Logstash也是一个数据收据的工具,但是它会比beats占用更多的资源,同时更能也更强大。
Logstash会对数据进行提取、转换和输出。
官方定义是:一个数据处理流,能够同时从多个源提取、转换、发送数据。
处理流程
Input
支持从file,redis,beats,kafka等读取数据。
Filter
这一环是远强于Beats的地方,它支持:
- grok:基于正则可以将非格式化的数据转化成格式化数据的语法
- mutate:对于结构化的数据字段进行增删改查
- drop
- date
Output
支持向标准输出、es、redis、kafka等输出
Logstash Filter、Input和Output配置
Input
input {file{path => "/tmp/abc.log"}}
它的格式不是yml语法,这里指定了输入的是文件类型,并且说明了文件的位置。
Output
output {stdout{codec => rubydebug}}
指定了项标准输出输出,并且使用rubydebug进行编码
Filter
Grok
这个是基于正则表达式,提供了丰富可重用的模式的语法。基于此可以将非结构化的数据转化成结构化数据进行处理。
假设有一个nginx日志的内容如下:
1.1.1.1 GET /index.html 1000 0.05
分别表示请求ip,请求方式,请求内容,文件大小,响应时间
使用Grok处理的方式如下:
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
%指明这是一个Grok,IP这种大写的表示Grok内置的正则表达式,只需要指定这种名称就可以调用内置正则了。后面小写的如method表示结构化后的字段名。
Date
可以将字符串类型的字段转换成时间戳类型,方便后续的处理。
Mutate
进行增删改查等字段相关处理。
Logstash收集Nginx log
下载logstash
可以使用命令下载:
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.4.tar.gz
解压并设置属主
tar zxf logstash-5.6.4.tar.gz
mv logstash-5.6.4 /usr/local/
chown -R elastic:elastic /usr/local/logstash-5.6.4/
设置配置文件
input {
stdin { }
}
filter {
grok {
match => {
"message" => '%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
}
}
date {
match => [ "time", "dd/MM/YYYY:HH:mm:ss Z" ]
locale => en
}
geoip {
source => "remote_ip"
target => "geoip"
}
useragent {
source => "agent"
target => "user_agent"
}
}
output {
stdout {
codec => rubydebug
}
}
配置文件中通过grok将log文件的一行转化成为了结构化数据,date将字符串时间转化为时间戳。
运行
head -3 /var/log/nginx/access.log | bin/logstash -f nginx_logstash.conf