一.架构一览:
所谓ELK,分别指代的是Elasticsearch、Logstash、Kibana; 官网:https://www.elastic.co/products;
三者角色分明:Elasticsearch负责索引(创建索引,搜索数据),相当于数据库;Logstash负责上传日志,在上传日志的过程中,可以对日志做规整,将规整后的日志塞进Elasticsearch中;Kibana负责可视化展现Elasticsearch中的数据。在实际应用中,如果实时上传的日志量过大,索引速度跟不上上传速度,则需要在Logstash到Elasticsearch中间加一个缓存层,通常我们选用redis做为一个纯粹的缓存队列用。
部署情况:四台机器 A B C D
A 部署redis + Logstash +Elasticsearch +Kibana
B C D 部署Elasticsearch
A B C D 组成 Elasticsearch集群
需要收集日志的四台机器N1 ,N2 ,N3,N4 为四台担当负载的nginx机器,分别在这4台机器上部署logstash,过滤规整nginx日志上传到A机器的redis中去。然后由A机器上的logstah从redis中获取数据输出到elasticsearch集群中去,由kibana展现elasticsearch集群中数据。
二.版本选用:
java环境:jdk1.8.0_65
日志收集,上传:Logstash1.5.4 下载地址:https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
Elasticsearch集群:Elasticsearch1.7.3 下载地址:https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
日志展现:kibana4.1.2 下载地址:https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
队列缓存:redis3.0.4 下载地址:http://download.redis.io/releases/redis-3.0.4.tar.gz
三.具体搭建
机器环境为:Centos6.7
1.安装java环境:
推荐选用当前最新的java环境,并且elasticsearch集群的jdk版本一致,这里我们的选用的是jdk1.8.0_65。
本机环境中,默认的其实是装了openjdk的,而且各台机器的环境乱七八槽,所以在安装java环境之前我把默认的openjdk的环境给干掉了。
1.1卸载openjdk
#java -version 发现是openjdk环境
#rpm -qa|grep java或者#rpm -qa | grep jdk 找到rpm安装的java 可能输出如下:
tzdata-java-2015g-2.el6.noarch
依次卸载以上java:
1.2 安装jdk1.8.0_65
到 http://www.oracle.com/technetwork/java/javase/downloads/找到自己需要的java版本 wget下来
解压: #tar zxvf jdk-8u65-linux-x64.tar.gz -C /usr/local/java
设置环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.6_65
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.: ${JAVA_HOME}/lib: ${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin: $PATH
保存,立即生效环境变量
#source /etc/profile
验证环境是否ok:
#java -version出现jdk1.8.0_65说明java环境ok了
2.redis安装
#wget http://download.redis.io/releases/redis-3.0.4.tar.gz
解压:tar -xzvf redis-3.0.4.tar.gz 到你需要的目录
#cd redis-3.0.4
#make
#make install
在make的过程中可以会出错,一般安装提示yum安装即可,可参考如下:
#yum install vim unix2dos wget curl curl-devel expect expect-devel
#yum install gcc glibc glib2 libgcc glibc-devel glib2-devel
#yum install m4 automake autoconf cmake cpp
#yum install gcc-c++ libstdc++ libstdc++-devel libstdc++-docs
如果出现如下错误:
zmalloc.h:55:2: error: #error 'Newer version of jemalloc required'
可以执行: make MALLOC=libc
修改daemonize yes
运行redis:
#./src/redis-server redis.conf
#ps -ef | grep redis查看进程
或者 #redis-3.0.4/src/redis-cli
>set a b
>get a
#b
redis ok啦!
3.安装elasticsearch 集群
elasticsearch集群的安装配置非常简单,只要在同一个局域网内,集群名称一致,es会自动发现其他机器,并加入集群内,但是在实际环境中使用时,由于网络环境问题,常常出现节点掉线,或者长时间无法加入集群的情况,需要我们更改配置,优化相关参数,已达到实际需求,本文紧紧以默认配置为例,后续的优化会在另一篇文章分享。
# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
# 解压 tar -xzvf elasticsearch-1.7.3 -C 到你需要的目录
在 A B C D四台机器上分别下载安装
# elasticsearch-1.7.3/bin/elasticsearch -d 启动
访问各台机器的9200端口,返回200说明ok了,如果返回503,可以稍微再等一会,这种情况下大多是因为节点正在尝试加入集群,我曾经遇到过等了10分钟,状态才由503变成200。如果状态一直不对,不要-d 启动,直接启动,会打出启动日志,看看是否报错。
elasticsearch的相关插件有很多,我主要安装了两种:elasticsearch-head 和 kopf ,head的界面稍微粗糙了点,kopf界面风格更geek一点,相关其他插件可参考:http://www.cnblogs.com/huangfox/p/3541300.html
4.安装Logstash
# wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
#解压 tar –xvzf logstash-1.5.4.tar.gz 到你的目录
5.安装Kibana4
# wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
#解压 tar -xzvf kibana-4.1.2 到你的目录
现在kibana4已经自带web能力了,默认端口是5601,直接在kibana/bin/kibana 即可启动kibana4了
四.相关配置
1.配置logstash
N1~N4机器上的logstash的配置:
1.1在logstash下mkdir两个文件夹:conf和logs 分别存储logstash的配置文件和日志文件
1.2#cd conf
#vi nginx_access.conf
内容如下:
- input {
- file {
- type => "XXX"
- path => "/xxx/nginx/access.log"
- }
- }
- output {
- redis {
- host => "xxx.xxx.xx.xx"
- port => xx
- data_type => 'list'
- key => 'logstash:redis'
- }
- input {
- redis {
- host => "xxx.xx.xxx.xx"
- port => 6379
- data_type => 'list'
- key => 'logstash:redis'
- type => 'redis-input'
- }
- }
- filter {
- }
- output {
- elasticsearch {
- host => "xxx.xx.xxx.xx"
- port => 9200
- codec => "json"
- protocol => "http"
- }
- }