前言
本教程为什么第三节才说到Logstash?
因为本人在阅读其他网络上的相关资料的时候,很多第一篇都是先安装Logstash,最后运行输出elasticsearch没法看出效果,请看下一节之类!到了下一节又没有相关说明,直接又截图出效果,感觉让人懵逼!所以本教程特意把顺序调整了一下。
Logstash安装和使用
Logstash的独立性很强,它的用途就是一个内容的转存系统,通过灵活的插件可以做到很多种类数据的读取和很多种类数据的写入。
Logstash在ELK系统中处在哪个位置?请看下面两种部署方式:
最简单的部署方式:L-E-K
第二种方式:由于IO压力问题,我们可以在L-E之间添加一层redis辅助,减轻服务器的压力。
第三种方式:随着业务的增长,服务器部署集群,redis单点故障问题等等,上面的方案已满足不了我们的需求,这个时候我们可以使用Kafka来代替Redis,Kafka相关部署这里不详述,可查看相关资料。
安装Logstash
#下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.2.tar.gz
#解压到指定目录
tar -xzvf logstash-5.5.2.tar.gz -c /usr/local/
#最终结果/usr/local/logstash-5.5.2/
输入数据源
在bin目录新建配置文件std_std.conf
cd /usr/local/logstash-5.5.2/bin/
vi std_std.conf
配置内容
input {
stdin{
}
}
output {
stdout{
}
}
在bin目录执行命令:./logstash -f std_std.conf
然后输入 hello world
效果如下图:
nginx日志数据源
以上是以用户输入作为数据源
下面我们使用nginx的日志作为数据源
nginx站点创建本教程不作说明,不懂的同学可以先查看相关资料部署好nginx web站点
如日志内容:
192.168.1.131 - - [30/Aug/2017:17:32:04 +0800] "GET /index.html?a=aaaa HTTP/1.1" 200 230 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; LCTE)" "-"
192.168.1.131 - - [30/Aug/2017:17:32:15 +0800] "GET /index.html?appid=1001 HTTP/1.1" 200 230 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; LCTE)" "-"
192.168.1.131 - - [30/Aug/2017:17:32:22 +0800] "GET /index.html?appid=1001&platform=1 HTTP/1.1" 200 230 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; LCTE)" "-"
......
在bin目录新建配置文件file_std.conf
文件内容如下,path日志路径自行修改
input{
file{
path =>"/usr/local/openresty-1.11.2.5/nginx/logs/test.elk.access.log"
start_position=>"beginning"
}
}
filter{
grok{
match=>{
"message"=>"%{IPV4:clientip} - - \[%{HTTPDATE:accessTime}\] \"%{DATA:method} %{DATA:requestUri} %{DATA:httpVersion}\" %{DATA:httpCode} %{DATA:size} \"%{DATA:httpReferer}\" \"%{DATA:useragent}\""
}
remove_field=>"message"
}
date{
match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output{
stdout{
codec=>rubydebug
}
}
在bin目录执行命令:./logstash -f file_std.conf
就会看到文件中的内容被逐条的显示出来
Logstash默认提供了能分析包括java堆栈日志、apache日志在内的120种形式,可查看以下资料。
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok使用
%{匹配规则:输出key}
如上方的
%{IPV4:clientip}
最终匹配输出
clientip:109.12.24.188
更多使用方法可查看相关资料
输出到elasticsearch
在bin目录新建配置文件es_std.conf
文件内容如下:
input{
file{
path =>"/usr/local/openresty-1.11.2.5/nginx/logs/test.elk.access.log"
start_position=>"beginning"
}
}
filter{
grok{
match=>{
"message"=>"%{DATA:clientIp} - - \[%{HTTPDATE:accessTime}\] \"%{DATA:method} %{DATA:requestPath} %{DATA:httpversion}\" %{DATA:retcode} %{DATA:size} \"%{DATA:fromHtml}\" \"%{DATA:useragent}\""
}
remove_field=>"message"
}
date{
match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output{
elasticsearch {
hosts => "192.168.1.138"
}
stdout{
codec=>rubydebug
}
}
首先我们运行elasticsearch (参考前两节内容)
su elk
cd /usr/local/elasticsearch-5.5.2
./bin/elasticsearch
确保elasticsearch已启动成功,再运行Logstash
在bin目录执行命令:./logstash -f es_std.conf
最后启动elasticsearch-head插件
cd /usr/local/elasticsearch-5.5.2/elasticsearch-head
grunt server
在浏览器中打开 http://192.168.1.138:9100/
可以看到效果:
这时去访问我们搭建好的nginx站点,如:
http://test.elk.com/index.html?appid=3010&platform=2&channel=10000
那么我们在http://192.168.1.138:9100/中可以实时看到效果(刷新页面)