ELK部署安装以及配置

发现了一篇不错的关于ELK安装部署的文章,这里作个记录。php

1、什么是ELKhtml

ELK是Elasticsearch + Logstash + Kibana 这种架构的简写。这是一种日志分平台析的架构。从前咱们用shell三剑客(grep, sed, awk)来分析日志, 虽然也能对付大多数场景,但当日志量大,分析频繁,而且使用者可能不会shell三剑客的状况下, 配置方便,使用简单,而且分析结果更加直观的工具(平台)就诞生了,它就是ELK。 ELK是开源的,而且社区活跃,用户众多。固然国内也有一些收费的,比较好用的日志分析平台,好比日志易(日志易的同事赶忙给我打钱,毕竟这广告打的好)。java

2、ELK常见的几种架构node

1 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,经过logstash收集日志,Elasticsearch分析日志,而后在Kibana(web界面)中展现。这种架构虽然是官网介绍里的方式,可是每每在生产中不多使用。linux

2 Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增长了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优点是消耗很是少的资源(较logstash), 因此生产中,每每会采起这种架构方式,可是这种架构有一个缺点,当logstash出现故障, 会形成日志的丢失。nginx

3 Elasticsearch + Logstash + filebeat + redis(也能够是其余中间件,好比kafka) + Kibana
这种架构是上面那个架构的完善版,经过增长中间件,来避免数据的丢失。当Logstash出现故障,日志仍是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。目前我司使用的就是这种架构,我我的也比较推荐这种方式。web

架构图:
在这里插入图片描述
说明: logstash节点和elasticsearch节点能够根据日志量伸缩数量, filebeat部署在每台须要收集日志的服务器上。redis

3、安装部署shell

1. redis安装部署json

这个不作介绍,可是由于redis在这里充当中间件,因此最好先安装redis,而且启动

2. filebeat安装部署

filebeat是一款轻量级的数据采集器,须要部署在每台须要收集日志的机器上。安装和配置过程很方便,若是机器不少,能够配合使用批量部署工具进行安装。

1) 安装

linux 平台使用 rpm安装

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-x86_64.rpmsudo rpm -vi filebeat-5.2.2-x86_64.rpm

上面安装的是5.2.2版本。这个版本要和后面的其余组件版本保持一致,不然可能会出现兼容性问题。其余平台的安装方法,能够在官方文档中找到 filebeat安装

2) 配置

配置文件是yml格式的,对格式有严格的要求,由于简书排版的问题,我就直接贴图片了。
在这里插入图片描述
典型filebeat.yml配置

1)日志输入:

filebeat.prospectors模块用来指定日志文件的来源。在这个配置文件中, 总共接收三个日志文件,分别是

/data/logs/php/errors.log   /data/logs/nginx/www_error.log /data/logs/php/www.slow.log

input_type 指定日志类型,在这里是log, 应该也能够是json。
paths指定日志文件路径。
document_type:这个字段是用来给日志打标记的。
fields: 也是打标记,主要为了后面日志分析查找的方便,存储的时候也会根据fields分类存储,相同fields的数据存在同一个redis key中
fields_under_root: 若是该选项设置为true, 则该fields会存储在top-level中。
tail_files: 这个选项若是设置为true,则读取日志文件的新内容,而忽略原有的内容,通常要设置为true

2)日志输出

output.redis:指定输出到redis
hosts:指定redis主机,能够指定多台。
password:redis密码,redis默认没有密码,在这里设为空就行
fields_under_root: 和前面对应,top-level的存储key
tail_files: 和前面对应
keys:指定存入redis中的key, 在这个配置文件中,不一样的日志文件被存到不一样的key。
db: 指定存在redis中的db编号(redis默认安装有16个databases,0~15, 默认是存储在db0中的)

3)启动

配置完成后,就能够启动filebeat了,可是若是日志量很大的话,千万要注意redis可能会被撑爆,由于如今还未配置Logstash,即如今只有filebeat往redis中写数据,有生产者,没有消费者,就会形成数据积压。因此若是日志量很大,先不要启动。

咱们生产环境是用supervisor管理fielbeat的,配置好supervisisor以后,执行

supervisorctl start filebeat

启动filebeat 。若是你对supervisor不熟,又想用它的话,能够去了解下,这是一个不错的任务管理工具。supervisor的配置

[program:filebeat]
command=/data/app/filebeat/filebeat -e -c filebeat.yml
directory=/data/app/filebeat
logfile=/data/app/filebeat/run.log
autorestart=true

3 logstash 安装配置

1)环境准备

安装logstash须要依赖于java环境,具体须要安装哪一个版本的jdk,请参考官方文档。 我这边logstash版本是5.2. 查看官方文档,须要的是jdk1.8.0

在这里插入图片描述

如何安装jdk,不在这里介绍,网上一大堆教程。

2) 安装

先下载指定版本

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz

解压到指定目录

tar xf logstash-5.2.0.tar.gz -C /data/app/

值得一提的是,这种安装方式无需编译,解压后就可使用。你也可使用yum安装。

解压后查看一下目录结构

在这里插入图片描述logstash目录结构
其中config通常用来存放日志文件, bin用来存放logstash启动文件或者二进制文件。

logstash启动方式

bin/log -f config/你的配置文件

-f用来指定配置文件。ok, 那接下来咱们来写一个配置文件。

在这里插入图片描述
logstash典型配置

logstash配置文件最基本的须要指定日志的输入和日志的输出。能够把logstash理解成一个处理日志的中间件,因此须要input和output

在这个配置文件里:

input是redis, 须要指定redis的host 和port以及db,还要指明数据的类型,list表示这是一个redis的list对象。key指明redis中的key名称。

output 是elasticsearch, hosts指明elasticsearch的ip和端口,index指明这个日志存在elasticsearch中的索引名称。

这是最简单的配置,这样配置便可启动logstash,但若是你想针对日志作一些预处理,或者一些信息的过滤,可使用logstash提供的模块,具体参见官方文档。

这里介绍下filter模块
在这里插入图片描述
带filter的logstash配置文件

input和output和上面同样,不作介绍。 filter模块中有个grok,能够用来匹配日志。根据你日志的格式来编写match规则。怎么书写规则,能够参考官方文档,这里大概讲下。 使用%{} 这种形式匹配一个变量,DATA匹配任何字符, 好比上面的 %{DATA:timestamp} 表示这个日志第一域是时间, 大括号后面有个空格,空格前面表示第一域) 将时间赋值给timestamp变量(名称能够自定义), 后面同理, 第二域是表明告警级别(赋值给level), 第三域是告警信息(赋值给msg), 第四域是客户ip地址(赋值给client_ip)…

这个匹配规则刚开始写起来可能有些费劲,须要调试。我当时调试也花了很多时间。

ok,如今咱们有了配置文件,便可启动logstash。

./bin/logstash -f ./config/conf.d/error.log.nginx

建议使用supervisor管理进程。

在这里插入图片描述
supervisor中的logstash配置

若是启动有报错,根据报错一步步解决问题。

4 elasticsearch安装

1)依赖

和logstash同样,elasticsearch 一样须要依赖jdk,由于前面已经安装jdk环境,因此这一步能够跳过。

2)下载安装包并解压

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
tar -xvf elasticsearch-5.2.2.tar.gz -C  /data/app/

和logstash同样,不须要编译,解压后既可使用。但须要配置文件

3)配置

在这里插入图片描述
elasticsearch典型配置文件

配置文件说明:

cluster.name: 指定elasticsearch 集群的名称,集群内的全部elasticsearch须要配置相同的cluster.name

node.name: 当前节点名称,须要集群内惟一。

path.data: 数据存放位置

path.logs: elasticsearch的日志存放位置

http.port: 端口

discovery.zen.ping.unicast.hosts: elasticsearch节点。

下面两个应该是elasticsearch处理相关的配置,能够参考官方文档。

关于elasticsearch节点,这里说明下,最好配置成单数,且数量要大于等于3. 由于集群须要选举主从。

4)启动

配置完以后,启动elasticsearch。 注意,若是你使用root用户启动elasticsearch,就会报错,启动失败,这是由于elasticsearch不容许用root用户启动。能够建立一个用户,用来启动elasticsearch

groupadd elasticsearch

useradd -g elasticsearch elasticsearch

上面命令用来建立elasticsearch组和用户。建立完以后,由于默认对刚才的elasticsearch安装目录没有相关权限,还须要权限赋值(更改目录所属组和用户)。

chown -R elasticsearch:elasticsearch  /data/app/elasticsearch/

ok,如今能够启动了。

/data/app/elasticsearch/bin/elasticsearch -d

-d 表示后台运行。

仍是同样,若是有报错,就解决报错。

5 kibana安装配置

1) 下载安装包并解压

和上面的logstash以及elasticsearch同样,无需编译,下载并解压便可使用。

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz
 tar -xzf kibana-5.2.2-linux-x86_64.tar.gz -C /data/app/

2) 配置

解压后,进入到kibana目录,修改配置文件
在这里插入图片描述
kibana典型配置

server.host:指明服务运行的地址

elasticsearch.uri: 指明elasticsearch运行的地址和端口

kibana.index: 指明kibana使用的索引,这个是自定义的。

tilemap.uri:指明了使用地图api, 在这里使用了高德地图的api

配置完成。

  1. 启动
/data/app/kibana/bin/kibana

若是正常启动,则能够经过默认的5601端口访问kibana 的web界面。

6 nginx

上一步,当kibana安装启动以后,而且能够正常访问,ELK的架构算是完成了。可是,若是是生产环境,个人建议是用nginx代理kibana web。 nginx安装配置很简单,网上一大堆,请自行安装配置。

至此,咱们完成了filebeat + redis + logstash + elasticsearch + kibana + nginx 的这种架构。经过访问网页, 便可查询相关日志。

至于kibana怎么使用,如何建立索引,这个该教程就不做介绍了,能够参考网上的一些资料,或者若是你英文水平过关,直接看官方文档吧。

在这里插入图片描述

原文连接:https://www.jianshu.com/p/e7362ccfe7e3?tdsourcetag=s_pctim_aiomsg