简介
在上一次的数据平台实践①中,对基于Flume,Kafka和Spark Streaming的数据平台组合做了介绍,这一次对业界流行的ELK组合进行学习与实践。
关于ELK,网上已有大量相关介绍,深入了解的话,可以去官网学习。这里只做基本介绍。
Logstash——数据采集
Logstash在ELK组合中起着数据采集的作用。它负责读取数据,并传递数据。类似于Flume,但功能比Flume相对较多,它包括正则解析,数据处理等等,通过简单配置,可以在采集数据的同时,对数据做简单处理。
Elasticsearch——数据存储与搜索
Elasticsearch,顾名思义,即为弹性搜索。当然搜索的前提是要有数据的存储,故其主要功能是为数据提供存储,然后建立索引,再提供快速搜索。
Kibana——展示
对于海量数据,无论是数量,还是维度,都处在一个较高的层次上。然而,数据分析平台在经过一段时间的发展之后,都会形成了一定的固有模式,从而,数据得以通过多种方式进行呈现,比如折线图,条形图,饼图等等。Kibana就是这样一种数据管理界面
实践
ELK的搭建比较简单,搞清楚运行机制,按顺序配置启动一下即可。
【版本均为5.1.1】
log-redis.conf(从日志到redis)
input {
file {
path => [ "/home/wwwlogs/access.log" ]
start_position => "end"
}
}
filter {
mutate {
replace => { "type" => "nginx_access" }
}
grok {
match => { "message" => "%{IPORHOST:http_host} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:time_local}\] \"%{WORD:method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}" }
}
date {
match => [ "time_local" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
geoip {
source => "http_host"
}
}
output {
redis { host => "127.0.0.1" data_type => "list" key => "nginx-access-log" }
}
该文件的作用是指出输入方nginx的access日志,如何使用过滤插件及输出对象,非常简单直观。
以上配置均可在官网中查到使用细则。值得一提的是grok这个工具,它属于filter下的一个插件,提供正则匹配功能。这里提供一个grok debug网站,它可以实时对你写的正则表达式进行验证,甚至根据你提供的字符串给出相应的grok正则式,相当赞!
redis-elastic.conf(从redis到elastic)
input {
redis {
host => "127.0.0.1"
port => "6379"
key => "nginx-access-log"
data_type => "list"
type => "redis-nginx-access-log"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "e-nginx-access-log-%{+YYYY.MM.dd}"
}
}
该文件的作用是将数据从redis输出到Elasticsearch。
#依照log-redis.conf开启logstash
/usr/local/mybin/logstash-5.1.1/bin/logstash -f /usr/local/mybin/logstash-5.1.1/config/log-redis.conf --config.reload.automatic
#开启elasticsearch
/usr/local/mybin/elasticsearch-5.1.1/bin/elasticsearch
#依照redis-elastic.conf开启logstash
/usr/local/mybin/logstash-5.1.1/bin/logstash -f /usr/local/mybin/logstash-5.1.1/config/redis-elastic.conf --config.reload.automatic
#开启kibana(按以上过程开启进程,监听的端口都是默认,所以要注意是否启动正确)
/usr/local/mybin/kibana-5.1.1-linux-x86_64/bin/kibana
现在通过浏览器打开IP:5061,就可以看到以下界面。
有些人想外网也能看到(不安全),当然也可以,不过需要修改conf下的kibana.yml。
另外,如果需要密码登录,可以给Kibana安装插件x-pack。安装之后,默认用户名和密码分别是elastic和changeme。
小结
ELK适合日志数据分析等类似平台的快速搭建。当业务相对平稳,需求相对明确时,可以采用这个组合进行快速开发。