背景介绍
随着软件行业的发展,软件系统的生产部署结构日趋复杂。对于一个分布式的系统,同一应用通常部署在不同的节点上,通过负载均衡的方式将请求分发到各个不同的节点进行处理。此时就会相对增加生产运维的复杂度,在进行问题查询的时候很难判断本次请求是在哪台机器上执行的,也就无法快速的对日志进行查询从而定位问题,因此,就需要对日志进行统一的处理和分析,以便方便开发和运维人员的问题处理速度。
本文介绍的是elastic stack开源的ELK组件,主要包括elasticsearch(简称es),logstash,kibana三个核心组件。
es是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,对外提供REST和java api,可扩展性的分布式系统。
Logstash是一个用来搜集、分析、过滤日志的工具,几乎支持所有类型的日志,能够接收多种来源的日志,包括syslog、mq,并且能够输出到多种介质中,包括es,邮件等等。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户定制仪表板视图,还允许用户使用es语法进行操作。
但是,在实际使用的过程中发现,logstash会占用很多系统资源,因此决定加入一个更轻量的日志收集组件(也是elastic stack的组件之一)filebeat。因此在加入filebeat之后,整个部署架构变成了如下图所示。
部署步骤
1.准备工作(ELK 三个组件必须使用同一个版本,其他边缘组件可以不使用)
安装包:
elasticsearch-6.6.2.tar.gz
kibana-6.6.2-linux-x86_64.tar.gz
logstash-6.6.2.tar.gz
filebeat-6.6.0-linux-x86_64.tar.gz
jdk-8u192-linux-x64.tar.gz
机器:
192.168.45.174,192.168.45.175,192.168.45.176(ES集群)
192.168.45.2(logstash,kibana)
192.168.45.136(应用服务器,安装filebeat)
2.开始安装ES集群
注(1):由于ELK组件都是使用java开发的,因此需要安装1.8以上版本的jdk
jdk的安装方法:https://www.cnblogs.com/kuoAT/p/7555298.html
注(2):Elasticsearch不能使用root用户运行,需要单独创建用户
1)为es创建一个目录
mkdir elasticsearch
2)创建一个elk用户,并为elk用户授权elasticsearch目录
groupadd elk
useradd elk -g elk -p elk
chown -R elk:elk elasticsearch
3)上传es的安装包,并解压到elasticsearch目录
tar -zxvf elasticsearch-6.6.2.tar.gz
4)切换到root用户,修改以下文件
vi /etc/security/limits.conf
添加如下四行
@elk hard nofile 65536
@elk soft nofile 65536
@elk hard nproc 4096
@elk soft nproc 4096
vi /etc/sysctl.conf
添加以下内容
vm.max_map_count=655360
5)执行sysctl –p ,使配置生效
6)切换回elk用户,进入 elasticsearch/config/目录下,修改es的配置文件elasticsearch.yml
cluster.name: my-application
node.name: node-1
node.master: true
node.data: true
path.data: elasticsearch/data
path.logs: elasticsearch/logs
network.host: 192.168.45.174
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.45.174", "192.168.45.175","192.168.45.176"] // 配置ES集群各个节点
discovery.zen.minimum_master_nodes:2 // 防止脑裂
3.开始安装filebeat
1)将filebeat上传到要进行日志收集的服务器上192.168.45.136,并解压
tar -zxvf filebeat-6.6.0-linux-x86_64.tar.gz
2)修改配置文件
vi filebeat-6.6.0-linux-x86_64/filebeat.yml
a. 修改其中的enabled为true,并配置paths(要收集的日志路径,可以使用* 代替)。也可以根据exclude_lines和include_lines来做一些过滤日志的行为。
b. filebeat的配置文件路径,以及是否允许重新加载配置文件。并设置索引的分片数量
c. 配置kibana地址
d. 配置logstash地址
4.开始安装logstash
1)将logstash安装包上传到192.168.45.2服务器并解压
tar -xvf logstash-6.6.2.tar.gz
2)修改logstash输入输出的配置文件logstash-sample.yml
a.input中配置filebeat的监听端口
b.filter中可以增加过滤条件对所有或者指定索引进行过滤
c.output中可以配置filebeat输出之后的索引
5.开始安装kibana
1)将kibana安装包kibana-6.6.2-linux-x86_64.tar.gz上传到192.168.45.2,并解压
tar -xvf kibana-6.6.2-linux-x86_64.tar.gz
2)修改配置文件
vi kibana-6.6.2-linux-x86_64/config/kibana.yml
修改下列内容
server.port:5601
server.host:"192.168.45.2"
elasticsearch.host:["http://192.168.45.174", "192.168.45.175","192.168.45.176"]
6.分别启动ES集群,logstash,filebeat,kibana
1)分别在对应的bin目录下执行下列操作
nohup ./elasticsearch >elasticsearch.log 2>&1 & //ES启动服务
nohup ./logstash >logstash.log 2>&1 & //logstash启动服务
nohup ./filebeat -e -c filebeat.yml >filebeat.log 2>&1 & // filebeat启动服务
nohup ./kibana >kibana.log 2>&1 & //kibana启动服务
2)启动后可以在浏览器中输入192.168.45.2:5601来进入kibana界面进行日志查询