Please enable Javascript to view the contents

ELK 日志搜索实践

 ·  ☕ 3 分钟

本文主要简单介绍了 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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。

1
2
3
4
5
yum install docker
yum install epel-release
yum install python-pip
pip install --upgrade pip
pip install docker-compose

启动 Docker。

1
2
service docker start
docker-compose up

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

7. 参考


微信公众号
作者
微信公众号