一、安装Logstash
!注意,logstash至少要有1G内存才能执行
在安装Logstash之前,确保已经安装了Java的运行环境
2)在官网(https://www.elastic.co/)下载Logstash,目前最新版本是6.x
3)下载完成之后,加压(无须编译),并复制到local目录下,这个是我正式部署的目录:/usr/local/logstash-6.2.4
4)测试运行
[root@localhost download]# /usr/local/logstash-6.2.4/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 1
Pipeline main started
c++
2016-08-18T09:39:26.267Z localhost.localdomain c++
我们可以看到,我们输入什么内容logstash按照某种格式输出,其中-e参数参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。使用CTRL-C命令可以退出之前运行的Logstash。
使用-e参数在命令行中指定配置是很常用的方式,不过如果需要配置更多设置则需要很长的内容。这种情况,我们首先创建一个简单的配置文件,并且指定logstash使用这个配置文件。 例如:在 logstash 安装目录下创建一个“基本配置”测试文件 logstash-test.conf, 文件内容如下:
# cat logstash-simple.conf
input { stdin { } }
output {
stdout { codec=> rubydebug }
}
Logstash 使用 input 和 output 定义收集日志时的输入和输出的相关配置,本例中 input 定义了一个叫 “stdin” 的 input , output 定义一个叫 “stdout” 的 output 。无论我们输入什么字符, Logstash 都会按照某种格式来返回我们输入的字符,其中 output 被定义为 “stdout” 并使用了 codec 参数来指定 logstash 输出格式。
/usr/local/logstash-6.2.4/bin/logstash -f /usr/local/logstash-6.2.4/conf/logstash-simple.conf
{
"message" => "C++",
"@version" => "1",
"@timestamp" => "2016-08-18T10:05:47.352Z",
"host" => "localhost.localdomain"
}
5)后台运行Logstash
nohup /usr/local/logstash-6.2.4/bin/logstash -f /usr/local/logstash-6.2.4/conf/logstash-simple.conf & > /dev/null 2>&1
除了nohup之外,可以使用supervisor进行管理。
二、安装Elasticsearch
1)下载,并解压(无须编译),Elasticsearch
复制到local目录下,正式物理目录:/usr/local/elasticsearch-6.2.4
2)启动Elasticsearch
注意,我使用root权限来运行,但是Java抛出了Exception in thread “main” java.lang.RuntimeException: don’t run elasticsearch as root,因此必须使用普通帐号运行。
/usr/local/elasticsearch-6.2.4/bin/elasticsearch
如果需要后台执行,执行以下命令:
/usr/local/elasticsearch-6.2.4/bin/elasticsearch -d
检查是否成功运行:9200端口是Elasticsearch对外的HTTP协议的API
[lizhibin@localhost local]$ netstat -nat | grep 9200
tcp6 0 0 127.0.0.1:9200 :::* LISTEN
3)配置logstash,并将结果输出到elasticsearch
修改logstash 的配置文件:
input { stdin { } }
output {
elasticsearch {hosts => "localhost" }
stdout { codec=> rubydebug }
}
执行logstash:/usr/local/logstash-6.2.4/bin/logstash -f /usr/local/logstash-6.2.4/conf/logstash-simple.conf,并测试输入日志记录
使用curl命令发送请求elasticsearch是否接受到了数据:
[root@localhost conf]# curl 'http://localhost:9200/_search?pretty'
{
"took" : 47,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 4,
"max_score" : 1.0,
"hits" : [ {
"_index" : "logstash-2016.08.19",
"_type" : "logs",
"_id" : "AVah8wW7qomkeCHVJDgC",
"_score" : 1.0,
"_source" : {
"message" : "C++",
"@version" : "1",
"@timestamp" : "2016-08-19T08:37:46.727Z",
"host" : "localhost.localdomain"
}
}, {
"_index" : "logstash-2016.08.19",
三、安装Kibana
1)下载,解压(无须编译)
正式物理目录:/usr/local/kibana-6.2.4-linux-x86_64
2)配置和启动kibana
nohup /usr/local/kibana-6.2.4-linux-x86_64/bin/kibana & > /dev/null 2>&1
3)使用Kibana
使用 http://kibanaServerIP:5601 访问 Kibana 。登录后,先配置一个索引匹配。
操作步骤“Management”=>“Index Patterns”=>“Create Index Pattern”。logstash默认的索引名称是logstash-yyyy.mm.dd,比如logstash-2016.08.19,因此,我们在这里填写logstash-*即可。
填写后,提示找到了 Success! Your index pattern matches 10 indices。接下来点击Next Step,选择@timestamp来作为时间字段(注意,如果没选,我们就不能按照时间范围进行查询了)
点击“ Discover ”,可以搜索和浏览 Elasticsearch 中的数据,默认搜索的是最近 15分钟的数据。可以自定义选择时间。
OK,Logstash、Elasticsearch、Kibana就简单的部署好了。
ELK日志系统开发,Logstash收集nginx日志(二)
通过grok正则表达式,我们已经获取到我们想要的数据了,但是数据类型有些不对,比如upstream_time发送到es是String格式,我们需要转换为float。
这里需要使用到filter中的date和mutate插件,最终的config配置文件如下:
input {
file {
path => "/data0/log_receiver/nginx/access.log"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG} %{QS:http_x_forwarded_for} %{NUMBER:upstream_time}"}
}
mutate {convert => ["upstream_time", "float"]}
}
output {
elasticsearch {
hosts => "logview-es.yunshanpp.com:80"
index => "xinghuo-nginx-%{+YYYY.MM.dd}"
}
}