目录

    本文主要简单介绍了 ELK 的技术栈,并给出了 Docker compose 的编排配置。阅读本文,可在本地通过 Docker 将 ELK 跑起来。后续会将 ELK 在服务器上进行部署,相关的配置再补充。

    1. ELK 技术栈介绍

    ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,简称为 ELK 协议栈。

    ELK 已经成为目前最流行的集中式日志解决方案。

    基本流程是 Logstash 负责从各种数据源里采集数据,然后发送到 Elasticsearch,Elasticsearch 对这些数据创建索引,然后由 Kibana 对其进行各种分析并以图表的形式展示。

    Logstash 在服务器上占用过多系统资源,通常会引入 Beats 作为日志的收集器。Beats 所占系统的 CPU 和内存几乎可以忽略不计。

    2. Elasticsearch

    Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

    主要特点

    • 实时分析
    • 分布式实时文件存储,并将每一个字段都编入索引
    • 文档导向,所有的对象全部是文档
    • 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)
    • 接口友好,支持 JSON

    3. Logstash

    Logstash 是一个具有实时渠道能力的数据收集引擎,使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)。

    主要特点

    • 几乎可以访问任何数据
    • 可以和多种外部应用结合
    • 支持弹性扩展

    它由三个主要部分组成:

    • Shipper-发送日志数据
    • Broker-收集数据,缺省内置 Redis
    • Indexer-数据写入

    4. Kibana

    Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch 一起使用的。Kibana 可以使用搜索、查看、交互存放在 Elasticsearch 索引里的数据,能够很轻松地进行高级数据分析与数据可视化。

    Kibana 能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。

    5. Filebeat

    Fielbeat 是基于 logstash-forwarder 的源码改造而来,换句话说:Filebeat 就是最新版的 logstash-forwarder。它负责从当前服务器获取日志然后转发给 Logstash 或 Elasticserach 进行处理。

    Filebeat 包含两个部分 prospectors 和 harversters。 harversters 负责从文件中收集日志;prospectors 负责管理 harversters。

    6. 实践

    docker-compose.yml

    version: '2'
    services:
      elasticsearch:
        image: elasticsearch:5.6
        container_name: elasticsearch
        restart: always
        network_mode: "bridge"
        ports:
          - "9200:9200"
          - "9300:9300"
        volumes:
           - ./data:/usr/share/elasticsearch/data
    
      kibana:
        image: kibana:5.6
        container_name: kibana
        restart: always
        network_mode: "bridge"
        ports:
          - "5601:5601"
        depends_on:
          - elasticsearch
        external_links:
          - elasticsearch:elasticsearch
    
      logstash:
        image: logstash:5.6
        container_name: logstash
        restart: always
        network_mode: "bridge"
        ports:
          - "5044:5044"
          - "8080:8080"
        volumes:
          - ./conf:/config-dir
          - ./patterns:/opt/logstash/patterns
        depends_on:
          - elasticsearch
        external_links:
          - elasticsearch:elasticsearch
        command: logstash -f /config-dir
    
      filebeat:
        image: olinicola/filebeat:1.0.1
        container_name: filebeat
        restart: always
        network_mode: "bridge"
        extra_hosts:
          - "logstash:127.0.0.1"
        volumes:
          - ./filebeat.yml:/etc/filebeat/filebeat.yml
          - ./data/logs:/data/logs
          - /var/log:/var/host/log
          - ./registry:/etc/registry
    

    以 CentOS 为例,首先需要安装 Docker 和 Docker compose。

    yum install docker
    yum install epel-release
    yum install python-pip
    pip install --upgrade pip
    pip install docker-compose
    

    启动 Docker。

    service docker start
    docker-compose up
    

    本地通 http://127.0.0.1:5601 即可访问 Kibana 页面了。

    7. 参考