前言:随着硬件成本的不断低廉,我们可以存储更多数据内容,也会对各数据加以利用,其中一项很重要的数据内容便是日志文件,无论是访问日志还是系统日志或是应用日志,都显得十分重要,而怎么加以利用一直是一个难题,本文就着重于ELK三套件的搭建,是比较流行或者说可靠的日志分析组件,值得注意的说,本文暂时只考虑单机Elasticsearch,并且为了作为演示,就linux的系统日志收集作为演示。


版本说明:

ElasticSearch  1.7.1

Kibana      4..1

Logstash     1.5.2

JAVA      jdk-7u76

注: 最新的上面不一定是最新的版本,不同的版本之间可能有兼容问题,而上面的组合是本人已经验证过的了。


首先放一张图镇镇楼

ELK安装文档及相关优化_第1张图片

强调:不要用IE浏览Kibana!!!

ELK下载地址:https://www.elastic.co/downloads

JAVA环境的安装就不演示了!!!(推荐使用jdk-7u76-linux-x64.gz)

tar zxvf elasticsearch-1.7.1.tar.gz
tar zxvf kibana-4.1.1-linux-x64.tar.gz
tar zxvf logstash-1.5.2.tar.gz

 

值得注意的是,你可以通过elastic提供的rpm包直接安装,但是那对于一个运维人员太没挑战性了~~再者,对ELK的认识实在不够深刻。


下载elasticsearch-servicewrapper(是一个elasticsearch的启动脚本) 

#wget https://github.com/elastic/elasticsearch-servicewrapper/archive/master.zip

###通过这个脚本可以更简单执行Elasticsearch服务启动关闭等命令

其中包括

Console 在前台启动

Start     在后台启动

Stop     关闭

Install   装到启动项里面

Remove 移除卸载


开始安装

mv elasticsearch-1.7.1 /data/elasticsearch
unzip master.zip
mv elasticsearch-servicewrapper-master/*/data/elasticsearch/bin/
mv logstash-1.5.2 /data/logstash
mv kibana-4.1.1 /data/kibana


  ELK三套件都是依赖JAVA环境并不需要编译安装,所以安装其实非常简单,只是有版本兼容问题所以部分人总是装不上,再者ELK需要相关优化,不然就会总是抛出异常。

 ELK中的E,elasticsearch一个全文搜索引擎,存储着收集过来的所有数据并支持集群模式,你只用真正的会用的时候你才会体会到它的异常强大,虽然笔者也是刚刚深入,但是又一次通过Python调用API查询自安装使用至今,查询结果大于五万条数据,嗖的一下就返回,没有任何延迟,并且是结果聚合的数据,由此可见一斑,而且是单机版的。


配置elasticsearch

vi/data/elasticsearch/config/elasticsearch.yml

 

增加下面两行

http.cors.enabled:true
http.cors.allow-origin:http://ip(本机IP)


启动Elasticsearch

/data/elasticsearch/bin/service/elasticsearch start


本地测试Elasticsearch

curl -X GET http://localhost:9200/
{
  "status" : 200,
  "name" : "Jack Flag",
  "cluster_name" :"elasticsearch",
  "version" : {
    "number" : "1.7.1",
    "build_hash" :"927caff6f05403e936c20bf4529f144f0c89fd8c",
    "build_timestamp" : "2015-07-16T14:11:12Z",
    "build_snapshot" : false,
    "lucene_version" :"4.10.2"
  },
  "tagline" : "You Know, forSearch"
}

 

  ELK中的L指Logstash,是一个日志收集应用,本文主要用来收集系统日志,你当然也可以用来解析各种日志,如Tomcat,Nginx,MongoDB等相关应用日志,此文档作为安装文档就不做演示了。

    

配置logstash

mkdir /data/logstash/conf/
vi /data/logstash/conf/sys.conf

input {

    syslog{

    port => "514"

    type => "syslog"

  }

}

   

output {

  elasticsearch {

    host => "127.0.0.1"

  }

}


  上面的信息是说,以syslog作为输入,监听514端口,Type为syslog,将接收的信息输出到本机的elasticsearch。

  如果你执行/data/logstash/bin/logstash -f /data/logstash/conf/sys.conf 

你会发现本机监听514端口,但是没有用,因为没有配置任何机器的rsyslog,其他机器怎么会发信息过来~

 所以我们配置一下,需要收集系统日志的主机的rsyslog

 yum -y install rsyslog
 vi /etc/rsyslog.conf
 ##加入下面一行,ip填日志服务器的IP
 *.* @@ip:514


当你重启被收集日志主机的rsyslog,该主机就会往日志服务器的514端口以syslog的格式发送系统日志了。


因为是源码安装的,所以可能需要用& 或者nohup 或者自己写的启动脚本将logstash服务放到后台,这里推荐supverisor,后面的kibana也通过supervisor放到后台。


#修改kibana配置文件

# vi/data/kibana/config/kibana.yml
port: 80   ##改为80(默认监听5601端口)


 

然后启动kibana

/data/kibana/bin/kibana>/dev/null 2>&1 &


但是通过&或者nohup实在太不优雅了,我们使用supervisor

yum -y install supervisor

[program:kibana]
command=/data/kibana/bin/kibana
autorestart = true
redirect = true
stderr_logfile = /var/log/kibana/kibana.log
startsecs = 3

[program:logstash]
command=/data/logstash/bin/logstash -f /data/logstash/conf/logstash.conf -l /data/logstash/logstash_debug.log
autorestart = true
redirect = true
stderr_logfile = /var/log/logstash/logstash.log
startsecs = 3

至于supervisord的详细配置,请参考:http://youerning.blog.51cto.com/10513771/1714627


最后启动supervisord即可。


现在你就可以访问日志服务器了。


第一次登陆,应该是下面的页面

ELK安装文档及相关优化_第2张图片

因为我们没有创建索引,所以他会提示我们创建索引,点击create即可,如果你没有配置发送系统日志的rsyslog你会发现,输入框是红色,不能create,这是因为elasticsearch没有任何内容。


当然可以手工的创建一条信息。

创建一个配置文件

vi hello.conf
input {
  stdin {
    type => "human"
  }
}
 
output {
  stdout {
    codec => rubydebug
  }
 
  elasticsearch {
    host => "127.0.0.1"
  }
}


/data/logstash/bin/logstash -f hello.conf

在提示Completed之后,随便输入一条信息即可。


上面安装完成后,你会发现kibana总是会出现红色提示框"shards faild",所以需要相关优化


关于elasticsearch的优化

配置文件/data/elasticsearch/config/elasticsearch.yml增加一面内容


# Search pool

threadpool.search.type: fixed

threadpool.search.size: 20

threadpool.search.queue_size: 10000

 

系统优化

vi /etc/security/limits.conf 

elasticsearch soft  nofile 32000
elasticsearch hard  nofile 32000
root          hard nofile 32000
root          soft nofile  32000

 

后记:好吧,安装文档就到这里吧,关于Elasticsearch的API调用(主要通过Python)以及Kibana的使用在以后的内容文章会说到