一、         介绍

Elasticsearch :开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash: 对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

Kibana: 以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

elk开启认证 elk._Elastic

 

 

二、         安装过程

首先装好jdk,配置好环境变量

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

1、启动Elasticsearch: Elasticsearch的bin目录,双击elasticsearch.bat,浏览器访问http://localhost:9200/,有返回信息表示成功

elk开启认证 elk._搜索_02

 

2、启动Logstash: logstash的bin目录下,新建文件logstash.conf

内容: input {

    tcp {                        //输入,诸如插件有 tcp、log4j、beats、redis等等

        host => "localhost"

        port => 4560

        codec => json

    }

    stdin {

    }

}

filter { }                   //过滤器

output {                              //输出

    stdout {

      codec => rubydebug

    }

    elasticsearch {      

        action => "index"              

        codec  => rubydebug

        hosts  => "127.0.0.1:9200"    

        index  => "logstash-%{+YYYY.MM.dd}"     

    }

}

启动方式: D:\ELK\logstash-5.4.3\bin>logstash -f logstash.conf

若只需要收集显示nginx的访问日志,则可以建立一个名为nginx+时间的索引 
若是需要收集一个服务器下的多个服务日志,则可以在一个conf下添加多个input并根据type来区分和实现

手动设置索引:filebeat 添加document_type配置 设置标识号,

                            Logstash配置对应的Type, if else输出不同的索引

 

且在kibana上也建立上述索引即可查看

 

3、启动kibana:进入kibana的config目录,修改kibana.yml文件,修改配置为:

elasticsearch.url: "http://127.0.0.1:9200"

server.port: 5601 

然后进入bin目录下,双击kibana.bat,启动成功后 访问http://localhost:5601/

 

注:以上启动方式为cmd窗口启动,当cmd窗口关闭服务也关闭,可以使用注册为windows服务

使用教程:

为Elasticsearch安装head插件

 

安装node和grunt

下载地址:https://nodejs.org/en/download/

安装到elasticsearch目录下

 

 

elk开启认证 elk._elasticsearch_03

 

 

同一目录下执行 npm install -g grunt-cli

 

注:出现xxx不是内部指令 自行修改你的环境变量

安装head

修改elasticsearch.yml文件

 

在文件最后加入

http.cors.enabled: true 
http.cors.allow-origin: "*"
node.master: true
node.data: true

放开network.host: 192.168.0.1的注释并改为network.host: 0.0.0.0

放开cluster.name;node.name;http.port的注释

双击elasticsearch.bat重启es

Head下载地址:https://github.com/mobz/elasticsearch-head 

解压然后修改:E:\elasticsearch-5.4.1\elasticsearch-head-master\Gruntfile.js

elk开启认证 elk._elk开启认证_04

 

elk开启认证 elk._搜索_05

 

cmd进入E:\elasticsearch-5.4.1\elasticsearch-head-master文件夹

执行 npm install

安装完成执行grunt server 或者npm run start(以后每次)

安装完成查看结果127.0.0.1:9100

 

elk开启认证 elk._Elastic_06

 

elk开启认证 elk._elk开启认证_07

 

复制文件

修改相应的conf/elasticsearch.yml

elk开启认证 elk._elk开启认证_08

 

elk开启认证 elk._elasticsearch_09

 

elk开启认证 elk._Elastic_10

 

再启动相应的elasticsearch.bat,即可

Lo4j到ELK

方式一、利用filebeat中转

注:由于logstash逐渐不支持log4j插件 可以考虑使用filebeat做中间件,获取log4j的数据再传到logstash

修改 filebeat.yml 配置文件内容如下:

filebeat.prospectors:

- type: log

enabled: true

paths:

- E:\myCat_log\*

filebeat.config.modules:

path: ${path.config}/modules.d/*.yml

reload.enabled: false

setup.template.settings:

index.number_of_shards: 3

setup.kibana:

output.logstash:

hosts: ["localhost:5544"]

 

注:path为读取文件路径,host对应logstash的input的IP端口

filebeat启动 在安装目录中启动cmd,执行 filebeat -c filebeat.yml -e

logstash新文件建logstash_filebeat.conf 

内容

input {

beats {

port => 5544

}

}

 

output {

elasticsearch {

hosts => ["localhost:9200"]

index => "log4j2-%{+YYYY.MM}"

}

}

logstash启动方法:在bin目录中启动cmd,执行 logstash -f logstash_filebeat.conf 

 

方式二、利用tcp

logstash.conf文件

input {

  tcp{

       host =>"127.0.0.1"

    port => 4560

 

 

  }

 

}

 

output {

elasticsearch {

hosts => ["localhost:9200"]

 

}

}

项目配置文件

#Appender to logstash

log4j.rootLogger=DEBUG,socket

log4j.appender.socket=org.apache.log4j.net.SocketAppender

log4j.appender.socket.RemoteHost=localhost

log4j.appender.socket.port=4560

log4j.appender.socket.Encoding=UTF-8

log4j.appender.socket.application=localclient

log4j.appender.server.ReconnectionDelay=10000

 

 

 

 

关键

主要关键在于收集日志这个层面,也就是log4j到logstash这个过程,在5.xx版本的logstash的input中使用lo4j插件无法成功接收信息,logstash返回(This plugin is deprecated. Please use filebeat instead to collect logs from log4j applications.)只有2.xx版本才能使用,而且使用过会有乱码现象,而且elasticsearch也要求版本统一5.xx。

那么使用5.xx版本logstash里面tcp插件去接收log4j的信息,但是由于tcp的序列化读信息会造成乱码(需要相应的配置或者无法配置?),同时信息之多无法直观查看日志。所以可以考虑使用logstash推荐使用的filebeat.

Filebeat的好处:、轻量级传输转发,用logstash直接获取会很占用内存

                            、反压力敏感协议,高负荷数据量时放慢读取速度。压力解除,恢复


                                                 个人预想ELK使用情况

Phone----占用2台服务器(server1、server2)

Portal-----占用2台服务器(server3、server4)

为每个server配置一个filebeat(filebeat、filebeat2、filebeat3、filebeat4)

为每个server配置一个logstash(logstash1、logstash2、logstash3、logstash4)

每个server同时开启n套程序

filebeat1读取server1所有套程序的日志(filebeat2->server2如此类推)存放到logstash1, 大方向:logstash根据source路径区分出每套程序的日志,小方向:logstash利用(filter)再细分过滤出信息里面(message)的重要信息或者说你想要的信息,再建立相关索引如(server1-msg-%{+YYYY.MM.dd}")放到elasticserach集群上面,且在kibana上也建立上述索引即可查看,kiana上也可检索。

kiana使用

{

  "query": {

    "match": {

      "source": {

        "query": "D:\\GoXML\\readme.txt",

        "type": "phrase"

      }

    }

  }

}

关键信息查找直接在search输入即可