只需一个选项,以简洁的中文进行释义:尝试使用Docker镜像来运行Elasticsearch和Kibana

首先

Elasticsearch 是一個分散式的 RESTful 搜尋/分析引擎。Kibana 則是一個使用 Elasticsearch 索引數據並提供搜尋和可視化功能的前端應用程式。

要完全使用它,需要建立一個由多個節點組成的 Elasticsearch 叢集,但也可以在本地環境中試用執行。

通過與 Kibana 一起建立,您可以輕鬆執行針對 Elasticsearch 的查詢。

在本次操作中,我們將使用 Elasticsearch 和 Kibana 的 Docker 映像,在本地環境中運行 Elasticsearch 和 Kibana。

2. (参考) 执行环境

已安装 Docker 和 Docker Compose.

每个人都必须在安装的基础上实施。

$ docker -v
Docker version 19.03.6, build 369ce74a3c
$ docker-compose -v
docker-compose version 1.17.1, build unknown
2-2. 规格

我使用了一台安装了总共8GB内存的机器。(为了启动4个容器,4GB可能有点不够)

$ cat /etc/issue
Ubuntu 18.04.2 LTS
$ cat /proc/meminfo | grep Mem
MemTotal:        8168284 kB
MemFree:         6812556 kB
MemAvailable:    7545960 kB

3. 创建Docker网络

使用专用的 Docker 网络,并通过以下命令指定分配给容器的固定 IP 地址。

$ docker network create spark-nw --subnet=172.30.0.0/16 --gateway=172.30.0.254

考虑到将来需要与 Apache Spark 应用程序进行协作,我个人给它取名为 “spark-nw”,但事实上任何名称都可以。

4. 准备 docker-compose

请准备以下类似的文件(docker-compose.yml)。
由于Elastic公司正式提供Elasticsearch和Kibana的Docker镜像,我们将使用官方提供的镜像。
虽然此时指定了最新的7.8.1版本,但最近的Elasticsearch经常更新。
当版本变为8.x.x等时,接口等规格可能会有大幅变化。

version: '2'
services:
    elasticsearch1:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
        hostname: doc-elastic101
        container_name: es01
        environment:
            - cluster.name=es-docker-cluster
            - network.host=0.0.0.0
            - node.name=es01
            - node.master=true
            - node.data=true
            - discovery.seed_hosts=es02,es03
            - cluster.initial_master_nodes=es01,es02,es03
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        mem_limit: 1g
        ports:
            - "9200:9200/tcp"
        networks:
            spark-nw:
                ipv4_address: 172.30.10.1
        volumes:
            - elasticsearch1-data:/usr/share/elasticsearch/data
        extra_hosts:
            - "doc-elastic102:172.30.10.2"
            - "doc-elastic103:172.30.10.3"
            - "doc-kibana101:172.30.20.1"

    elasticsearch2:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
        hostname: doc-elastic102
        container_name: es02
        environment:
            - cluster.name=es-docker-cluster
            - network.host=0.0.0.0
            - node.name=es02
            - node.master=true
            - node.data=true
            - discovery.seed_hosts=es01,es03
            - cluster.initial_master_nodes=es01,es02,es03
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        mem_limit: 1g
        networks:
            spark-nw:
                ipv4_address: 172.30.10.2
        volumes:
            - elasticsearch2-data:/usr/share/elasticsearch/data
        extra_hosts:
            - "doc-elastic101:172.30.10.1"
            - "doc-elastic103:172.30.10.3"
            - "doc-kibana101:172.30.20.1"

    elasticsearch3:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
        hostname: doc-elastic103
        container_name: es03
        environment:
            - cluster.name=es-docker-cluster
            - network.host=0.0.0.0
            - node.name=es03
            - node.master=true
            - node.data=true
            - discovery.seed_hosts=es01,es02
            - cluster.initial_master_nodes=es01,es02,es03
            - bootstrap.memory_lock=true
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        mem_limit: 1g
        networks:
            spark-nw:
                ipv4_address: 172.30.10.3
        volumes:
            - elasticsearch3-data:/usr/share/elasticsearch/data
        extra_hosts:
            - "doc-elastic101:172.30.10.1"
            - "doc-elastic102:172.30.10.2"
            - "doc-kibana101:172.30.20.1"

    kibana:
        image: docker.elastic.co/kibana/kibana:7.8.1
        hostname: doc-kibana101
        container_name: kibana1
        environment:
            SERVER_NAME: "kibana"
            ELASTICSEARCH_HOSTS: "http://doc-elastic101:9200"
            ELASTICSEARCH_REQUESTTIMEOUT: "60000"
        ports:
            - "5601:5601/tcp"
        mem_limit: 1g
        networks:
            spark-nw:
                ipv4_address: 172.30.20.1
        extra_hosts:
            - "doc-elastic101:172.30.10.1"
            - "doc-elastic102:172.30.10.2"
            - "doc-elastic103:172.30.10.3"
        depends_on:
            - elasticsearch1
            - elasticsearch2
            - elasticsearch3

volumes:
    elasticsearch1-data:
        driver: local
    elasticsearch2-data:
        driver: local
    elasticsearch3-data:
        driver: local

networks:
    spark-nw:
        external: true

从这个docker-compose.yml文件中,将生成3个elasticsearch容器和一个kibana容器。
通常情况下,我们会使用elasticsearch.yml和kibana.yml作为配置文件,但为了省去准备配置文件的麻烦,本次使用docker-compose内部的environment进行定义。

5. 容器的构建和启动

在存放docker-compose.yml文件的目录中执行以下命令。

$ docker-compose up --build -d
Pulling elasticsearch1 (docker.elastic.co/elasticsearch/elasticsearch:7.8.1)...
7.8.1: Pulling from elasticsearch/elasticsearch
(省略)
Creating es03 ... 
Creating es01 ... 
Creating es02 ... 
Creating es03
Creating es02
Creating es01 ... done
Creating kibana1 ... 
Creating kibana1 ... done

如果通过命令进行确认,可以确认在 docker-compose.yml 文件中指定的 Docker 镜像已经成功下载到本地。

$ docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
docker.elastic.co/kibana/kibana                 7.8.1               22bc1dd9a48a        3 weeks ago         1.3GB
docker.elastic.co/elasticsearch/elasticsearch   7.8.1               a529963ec236        3 weeks ago         811MB

默认情况下,Kibana 的大小似乎比 Elasticsearch 的镜像要大。如果包含插件等内容,大小可能会有很大的变化。

同时,可以确认每个容器(3个elasticsearch和1个kibana)都已成功启动。

$ docker ps --format "{{.Names}}"
kibana1
es01
es02
es03

我们可以通过Web浏览器或curl命令访问Elasticsearch,cluster_name(“es-docker-cluster”)和Elasticsearch的版本(“7.8.1”)等返回正确。

$ curl http://localhost:9200/
{
  "name" : "es01",
  "cluster_name" : "es-docker-cluster",
  "cluster_uuid" : "FYnfjxEpQ6OFvFc5_NdT5A",
  "version" : {
    "number" : "7.8.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "b5ca9c58fb664ca8bf9e4057fc229b3396bf3a89",
    "build_date" : "2020-07-21T16:40:44.668009Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

6. 从Kibana执行查询

打开开发工具界面
kibana001.PNG
kibana002.PNG
kibana003.PNG
kibana004.PNG
集群的状态检查 de
GET /_cluster/health
kibana005.PNG

根据”number_of_nodes”:3,我们可以得知Elasticsearch有3个节点(3个Docker容器)。

获取节点和索引信息的_cat API

查询可以继续写在下一行。而且,通过添加?v,每条信息将以带有头部的形式输出。

GET /_cat/nodes?v
kibana006.PNG

我们可以看出,es01作为主节点正在运行。

查询索引
GET /_cat/indices?v
kibana007.PNG

最后

Elasticsearch是一个被称为RESTful搜索/分析引擎的工具,它提供了多种API。虽然可以使用curl命令执行查询,但是Kibana开发工具为我们提供了一个更直观的查询执行环境。
本次只执行了GET请求,但是也可以使用PUT请求插入样例数据,并立即用GET请求获取其内容等操作。
Kibana不仅仅是一个数据可视化工具,还可以作为开发时的辅助工具来使用。
通过使用Docker镜像,你可以在最短的时间内(约5分钟)准备好Elasticsearch和Kibana的执行环境。

bannerAds