美文网首页网络资源Linux
ELK部署安装以及配置

ELK部署安装以及配置

作者: 哥本哈根月光 | 来源:发表于2018-08-20 16:24 被阅读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截图

    相关文章

      网友评论

        本文标题:ELK部署安装以及配置

        本文链接:https://www.haomeiwen.com/subject/dhdliftx.html