在微服务架构下,服务的数量以及服务集群等,日志散落在各个服务器里,这样不管是运维还是查找问题,都是一件非常困难的事情,这时候日志的统一管理就显得非常重要,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的搭建步骤已完成。