Elasticsearch是个基于Lucene实现的开源、分布式、restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分析功能的搜索引擎,能够扩展至数以百计的节点实时处理PB级别的数据。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。Elasticsearch集群采用主从模式,通过获取Logstash客户端收集来的日志信息同步到Elasticsearch集群节点中,再由Kibana的Web界面获取到日志信息进行搜索查询工作,当Elasticsearch主节点挂掉之后,Elasticsearch从节点的数据仍就正常,需要变更Kibana的elasticsearch.url参数去指定Elasticsearch节点IP,保证ELK日志系统的正常运行。

 

  Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的“存储库”中。而当下最常用的存储库就是Elasticsearch。需要在所有需要搜集日志的客户端中安装Logstash或者Filebeat等日志搜集工具,对Logstash配置文件进行修改,指定input上下文,即搜集的日志路径(最好为绝对路径)。output上下文,指定Logstash从input搜集到的日志内容输出到哪里保存,一般指向Elasticsearch的主节点IP地址。

  Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。


  ELK日志系统配置:

       三台CentOS7.3虚拟机

           node-2  192.168.175.130  Elasticsearch

           node-3  192.168.175.131  Logstash

           node-4  192.168.175.132  Kibana

          

  源代码包:

           wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz

           wget https://download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz
           wget https://download.elasticsearch.org/kibana/kibana/kibana-4.5.3-linux-x64.tar.gz

  分别在对应的虚拟机中下载。

  ①ELK需要在Java环境中部署,最好是在Java8以上。

 

 

  ②关闭所有虚拟机的防火墙

  #iptables -F

  #setenforce 0


  ③安装Elasticsearch

  #tar -xf elasticsearch-2.3.4.tar.gz -C /usr/local

  #mv /usr/local/elasticsearch-2.3.4 /usr/local/elasticsearch

  #cd /usr/local/elasticsearch/config

  #vim elasticsearch.yml

 

  elasticsearch配置如上

    cluster.name:集群名称,若有多个elasticsearch节点,则每个节点都需要相同集群节点名称。

    node.name:节点名称,集群节点名称。

    node.master:指定该节点是否为主节点。

    node.data:指定该节点是否为均衡器节点,true为数据节点,存储日志数据,false为均衡器节点。

    path.data:存储日志数据的路径。

    path.logs:elasticsearch节点的日志路径。

    network.host:该主机IP。

    http.port:集群中Kibana以及Logstash的访问端口,9300位Elasticsearch节点中交流的端口。

    bootstrap.memory_lock:锁定堆内存。

    http.cors.enabled:如果启用了 HTTP 端口,那么此属性会指定是否允许跨源 REST 请求。

    http.cors.allow-orign:如果 http.cors.enabled 的值为true,那么该属性会指定允许 REST 请求来自何处。

    discovery.zen.ping.unicast.hosts:elasticsearch集群节点的IP地址。


       注意事项:

              ① 需要创建一个elasticsearch用户,并授权给Elasticsearch集群中的path.data,path.logs数据与日志路径

       ② max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536](报错信息)

       需要修改/etc/security/limits.conf

      

③ max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144](报错信息)

 需要修改内核参数vm.max_map_count=655360

               #sysctl -w vm.max_map_count=65536

               也可以直接写入到/etc/sysctl.conf(永久)

              ④运行elasticsearch的时候不能以root身份运行,需要以创建的elasticsearch用户的身份运行。

    运行elasticsearch

   


  ④安装Logstash

    #tar -xf logstash-2.3.4.tar.gz -C /usr/local

    #mv /usr/local/logstash-2.3.4 /usr/local/logstash

    #cd /usr/local/logstash

    

    修改配置文件,使Logstash能够收集当前虚拟机的日志信息(需要指定),并输出到elasticsearch master主机。

    

     input上下文表示拉取本机/var/log/test.log中的日志

     output上下文表示将Logstash拉渠道的日志内容放到elasticsearch集群中,指定IP及端口,设置索引可以在Kibana上添加索引进行查询。

   

     启动Logstash

    


   ⑤安装Kibana

    #tar -xf kibana-4.5.3-linux-x64.tar.gz -C /usr/local

    #cd /usr/local/kibana

   配置如下:

   

   启动Kibana

  

 

  在本机访问http://192.168.175.132:5601

  可以在Kibana的虚拟机上安装nginx进行反代,将所有数据反代给192.168.175.132的5601端口

  实现结果:

    搜索在Logstash中指定的索引作为在Kibana的日志分类

   

    给/var/log/test.log传入数据

    #cat /var/log/boot.log >> /var/log/test.log

   这时候在Kibana中的Discover刷新一下即可查看到对应的日志信息。