【ELK初探】-Centos6.7下搭建篇

来源:互联网 发布:淘宝昵称大全霸气 编辑:程序博客网 时间:2024/05/21 15:45

     一.架构一览:

所谓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.6.0-openjdk-1.6.0.37-1.13.9.4.el6_7.x86_64
    java-1.7.0-openjdk-1.7.0.91-2.6.2.2.el6_7.x86_64

依次卸载以上java:

 #yum -y remove java-1.7.0-openjdk-1.7.0.91-2.6.2.2.el6_7.x86_64
     #yum -y remove java-1.6.0-openjdk-1.6.0.37-1.13.9.4.el6_7.x86_64
     #yum -y remove  tzdata-java-2015g-2.el6.noarch

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

设置环境变量

#vi /etc/profile
    在文件的最后加入 

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'
  •    }
说明:从文本读取日志文件,输出到A机器上的redis中去。
1.3 # cd logs/  新建logstash.log 
1.4 #nohup ./logstash -f ./conf/nginx_access.conf -l ./logs/logstash.log &运行 ,可以在实际运行前./logstash -f ./conf/nginx_access.conf -t 检测一下配置文件是否正确

 A机器上logstash的配置:
  •  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"
  •   }
  • }
说明:从A机器上的redis中获取数据,输出到elasticsearch集群中去

2.配置elasticsearch

cluster.name: elasticsearch
discovery.zen.ping.timeout: 120s
     discovery.zen.ping.retries: 6
     discovery.zen.ping.interval: 30s
说明: elasticsearch的优化配置有很多东西可以说,这里简单配置一下,在同一个局域网下统一集群名称,elasticsearch就可以自动发现并加入集群了,上面的参数表示每隔30s,去心跳主节点,尝试6次,超时为120s,在这种情况下还无法与主节点通信就认为该节点已经脱离主节点。



3.配置kibana

port: 5601  
host: "xxx.xx.xxx.xx" 本机ip地址  
elasticsearch_url: "http://xxx.xx.xxx.xx:9200"  ip地址为elasticsearchip地址 这个地址就是kibana去查询索引数据时候的访问地址

访问5601端口,能够成功访问到数据,就说明成功了!














    












 



0 0