网络资源Linux

ELK部署安装以及配置

2018-08-20  本文已影响4177人  哥本哈根月光

一、什么是ELK

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

二、ELK常见的几种架构

1 Elasticsearch + Logstash + Kibana

这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。

2 Elasticsearch + Logstash + filebeat + Kibana

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如kafka) + Kibana

这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。目前我司使用的就是这种架构,我个人也比较推荐这种方式。

架构图:

ELK架构图

说明: logstash节点和elasticsearch节点可以根据日志量伸缩数量, filebeat部署在每台需要收集日志的服务器上。

三、安装部署

1. redis安装部署

    这个不做介绍,但是因为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环境

如何安装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

配置完成。

3) 启动

/data/app/kibana/bin/kibana

如果正常启动,则可以通过默认的5601端口访问kibana 的web界面。

6 nginx 

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

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

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

kibana截图
上一篇下一篇

猜你喜欢

热点阅读