在微服务架构下,服务的数量以及服务集群等,日志散落在各个服务器里,这样不管是运维还是查找问题,都是一件非常困难的事情,这时候日志的统一管理就显得非常重要,ELK就是为了解决日志管理的问题,ELK被称为日志分析系统,是三款开源软件的简称,分别是Elasticsearch+Logstash+Kibana,本篇文章还会用到一个叫FileBeat的软件,用来负责收集日志的,下面是ELK的部署图:

简单介绍一下各个软件的功能:
Elasticsearch:是基于Lucene的开源全文搜索引擎,在这里充当日志存储的角色
Logstash:日志搜集、过滤的软件,在这里接收FileBeat传过来的日志,充当过滤日志角色
Kibana:是一个开源的分析和可视化平台,从Elasticsearch里把日志查询展现出来。
FileBeat:负责日志收集,传输到Logstash进行过滤处理后,再录入到Elasticsearch。

Logstash就具备日志收集功能,为何还需要FileBeat呢?因为FileBeat相比Logstash更加轻量级和易部署,对系统资源开销更小,Filebeat适合部署在收集的最前端,Logstash相比Filebeat功能更强,可以在Filebeat收集之后,由Logstash进一步做日志的解析,所以这里就是使用FileBeat来进行收集日志,然后交给Logstash来进行过滤分析等。
下面开始安装,环境是Centos7,ELK版本都是6.4.2,JDK1.8。

下载:
JDK8:https://www.oracle.com/technetwork/java/javase/downloads/index.html Elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz 下载Logstash:https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.zip 下载Filebeat:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.2-linux-x86_64.tar.gz 下载Kibana:https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz

以上软件下载统一放到/usr/local/elk目录,分别解压所有软件,目录如下:

配置JDK环境变量:

vi /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

安装Elasticsearch

由于Elasticsearch不能用root用户启动,所以创建一个叫es的用户,命令如下:
adduser es

修改密码:
passwd es 回车后输入es的密码。

更改目录权限:
sudo chmod 777 -R /usr/local/elk

更改文件:

vi /etc/security/limits.conf

* hard nofile 65536
* soft nofile 65536
vi /etc/sysctl.conf

vm.max_map_count=655360

更新完上面两个文件后执行:
sysctl -p

修改Elasticsearch的配置文件:

vi elasticsearch-6.4.2/config/elasticsearch.yml

network.host: 10.211.55.9
http.port: 9200

切换到es用户,cd到Elasticsearch的bin目录下,启动Elasticsearch:
./elasticsearch -d

在浏览器访问:http://ip:9200/ 出现Elasticsearch相关信息就说明Elasticsearch已经正确启动了。

安装Kibana

编辑kibana配置文件:

vi kibana-6.4.2/config/kibana.yml

server.port: 5601
server.host: "10.211.55.9"
elasticsearch.url: "http://10.211.55.9:9200"

上面是配置kibana的端口为5601,host是10.211.55.9,以及连接Elasticsearch的信息。
启动kibana:
kibana-6.4.2/bin/kibana &

访问:http://10.211.55.9:5601 出现kibana的界面说明kibana已经成功启动。

安装Logstash

在logstash-6.4.2/config目录下,把logstash-sample.conf重命名为logstash.conf,然后更改里面的内容:

vi logstash-6.4.2/config/logstash.conf

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://10.211.55.9:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" 
  }
}

port=>5044:这个是Logstash监听的端口,filebeat到时发送的日志就是发送到Logstash的5044端口
host:意思是Logstash把日志发送到这个host的Elasticsearch上。
index:发送到Elasticsearch的时候创建的index命名规则
user和password:Elasticsearch有设置相关的用户名密码,这里不用,注释掉。

启动Logstash:
./logstash -f ../config/logstash.conf &

安装FileBeat

FileBeat是安装到需要收集日志的服务器上,收集当前服务器的日志发给Logstash。
更改配置文件:

vi filebeat-6.4.2/filebeat.yml

- type: log
   enabled: true
   paths:
    - /usr/local/log/*.log
   multiline.pattern: ^\d{4}
   multiline.negate: true
   multiline.match: after
   scan_frequency: 60

output.logstash:
   hosts: ["10.211.55.9:5044"]

paths:
- usr/local/log/*.log#收集该目录下的以.log后缀结尾的文件

hosts:这个就是Logstash的host和端口。

启动FileBeat:
filebeat-6.4.2/filebeat -e -c filebeat.yml &

访问Kibana:http://10.211.55.9:5601

在FileBeat能扫描到日志后,可以在Kibana里可以看到日志传输到Elasticsearch里了。

整个ELK的搭建步骤已完成。