经历了无数次的失败之后,终于把ELK安装到centos上了。首先呢,ELK的版本配套问题是个坑。。。。这个必须注意,因为不同版本的ELK及时安装配置对了也不一定能好使。

1  概述

ELK套件(ELK stack)是指ElasticSearch、Logstash和Kibana三件套。这三个软件可以组成一套日志分析和监控工具。

由于三个软件各自的版本号太多,建议采用ElasticSearch官网推荐的搭配组合:http://www.elasticsearch.org/overview/elkdownloads/

下载地址:sudo wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz  

sudo wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz

 sudo wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz  

sudo wget https://github.com/elasticsearch/elasticsearch-servicewrapper/archive/master.tar.gz

2 环境准备

2.1软件要求

本文把ELK套件部署在一台CentOS单机上。

具体的版本要求如下:

操作系统版本:CentOS 6.4及以上;

JDK版本:1.7.0及以上;

Logstash版本:1.4.2;

ElasticSearch版本:1.4.2;

Kibana版本:3.1.2;


2.2 防火墙配置

1.防火墙如果未开启,则不用执行以下步骤,直接执行第三步安装elasticsearch。

 

2.为了正常使用HTTP服务等,要在iptables中打开相关的端口:# vim /etc/sysconfig/iptables  

在-A INPUT -p tcp -m state--state NEW -m tcp --dport 22 -j ACCEPT下面添加如下三句:-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9200 -j ACCEPT  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9292 -j ACCEPT  
如图所示:



之后重启防火墙:#systemctl restartiptables.service


3安装ElasticSearch

ElasticSearch默认的对外服务的HTTP端口是9200,节点间交互的TCP端口是9300。

3.1安装ElasticSearch

1.创建存放目录并且换到该目录下:

#mkdir -p /opt/software && cd /opt/software  

2.将资源包导入该目录下,资源包为elasticsearch-1.4.2.tar.gz,kibana-3.1.2.tar.gz,logstash-1.4.2.tar.gz,master.tar.gz。

3.解压

#sudo tar -zxvf elasticsearch-1.4.2.tar.gz -C /usr/local/

4.创建连接

# ln -s /usr/local/elasticsearch-1.4.2 /usr/local/elasticsearch  

3.2安装Elasticsearch-servicewrapper

1.解压
#sudo tar -zxvf master.tar.gz
2.将elasticsearch-servicewrapper-master的service拷贝到elasticsearch的bin目录下 
#cp /opt/software/elasticsearch-servicewrapper-master/service /usr/local/elasticsearch/bin/  
3.修改ElasticSearch的配置文件,追加两行内容,并重启ElasticSearch服务:
# vim/usr/local/elasticsearch/config/elasticsearch.yml
 
http.cors.allow-origin:"/.*/"
http.cors.enabled:true
 
4.启动ElasticSearch
#/usr/local/elasticsearch/bin/service/elasticsearch start  如下图:
 
5.测试
#curl -X GET http://localhost:9200       出现下图样式,代表基本成功

 

4安装与配置Logstash

Logstash默认的对外服务的端口是9292。

4.1安装Logstash

1. 解压

# sudo tar -zxvf logstash-1.4.2.tar.gz -C /usr/local/  

2.创建连接

# ln -s /usr/local/logstash-1.4.2 /usr/local/logstash  

3.简单测试Logstash服务是否正常,预期可以将输入内容以简单的日志形式打印在界面上:# /usr/local/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'  

 

示例:

 

4.1配置Logstash(本例的logstash配置只是针对我自己的需求配置的,每个人都应该根据自己的需求进行配置。主要就三项,一个输入文件,一个正则表达式,一个输出地址)

Logstash的配置主要关注三个变量,下面将分别介绍三个变量。

         type:该变量为输入日志的类型。通过type的配置可以方便在界面上通过索引进行查找。如本系统目前有processor,manager,ffmpeg三种类型需要在界面上进行显示。而为了区分是哪个服务器上的日志,可以在type的值后面加上Logstash所在服务器IP。

         path:该变量表示输入日志的路径,为日志的绝对路径。

         host:该变量为存储Logstash收集到的日志的ElasticSearch所在服务器的IP

例:配置文件如下:
input {
 file {
   type => "manager_192.168.32.41"
   path => ["/home/houmr/et/liang/mgr/log/et_manager.log"]
  }
 filter {
  grok {
  pattern =>"(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(?<level>\w*)\s"
  }
}
output {
 elasticsearch {
   host => "192.168.32.41"
   port => 9300
  }
}

本例中,输入日志的类型是manager,Logstash所在服务器IP为192.168.32.41。

日志的路径是:/home/houmr/et/liang/mgr/log/et_manager.log。

host配置的192.168.32.41就是ElasticSearch所在服务器的IP。

 

创建Logstash配置文件,这里将processor和manager的日志作为输入,输出直接传给ElasticSearch,不再打印在界面上:

# mkdir -p /usr/local/logstash/et&& vim /usr/local/logstash/etc/logstash_agent.conf

 

下面给出几种不同情况下配置文件的例子。
1)  服务器上只部署了processor:
input {
 file {
   type => "processor_192.168.32.41"
   path =>["/home/houmr/et/liang/pro/log/et_taskprocessor.log"]
  }
 file {
   type => "ffmpeg_192.168.32.41"
   path => ["/home/houmr/et/liang/pro/processlog/*.log"]
  }
}
 
 filter {
  grok {
  pattern =>"(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(?<level>\w*)\s"
  }
}
output {
 elasticsearch {
    host=> "192.168.32.41"
   port => 9300
  }
}
 
2)只部署了manager:
input {
 file {
   type => "manager_192.168.32.41"
   path => ["/home/houmr/et/liang/mgr/log/et_manager.log"]
  }
}
 
 filter {
  grok {
  pattern => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(?<level>\w*)\s"
  }
}
output {
 elasticsearch {
   host => "192.168.32.41"
   port => 9300
  }
}
 
3)服务器上同时部署了manager和processor
input {
 file {
   type => "manager_192.168.32.41"
   path => ["/home/houmr/et/liang/mgr/log/et_manager.log"]
  }
 
 file {
   type => "processor_192.168.32.41"
   path =>["/home/houmr/et/liang/pro/log/et_taskprocessor.log"]
  }
 file {
   type => "ffmpeg_192.168.32.41"
   path => ["/home/houmr/et/liang/pro/processlog/*.log"]
  }
}
 
 filter {
  grok {
  pattern =>"(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s(?<level>\w*)\s"
  }
}
output {
 elasticsearch {
   host => "192.168.32.41"
   port => 9300
  }
}
 
后台启动logstash
#nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/etc/logstash_agent.conf &

 

5安装Kibana

kibana3是纯粹JavaScript+html的客户端还需装个Nginx去访问,这里我们选择的是Ngixn。

 

1.解压
# sudo tar -zxvf kibana-3.1.2.tar.gz
2.移动到web服务器的发布目录
# cp -r kibana-3.1.2/* /usr/share/nginx/html/
3.修改kibana的配置文件,把elasticsearch所在行的内容替换成如下:
#vim /usr/share/nginx/html/config.js
 
elasticsearch: "http://192.168.32.41:9200",   #注:(IP为elasticsearch服务器对应的IP,自行更改) 
4.重启nginx服务
# systemctl restart nginx.service

 

5.然后就可以通过浏览器访问Kibana了:

在浏览器网址栏中输入kibana服务器的IP192.168.32.41            显示如下所示:

 

选择右下角的Sample Dashboard即可进入页面。




如果有什么不明白的,可以qq82889290联系我。我看到了有时间会解答一下。禁止无聊骚扰。