只需一个选项,以简洁的中文进行释义:尝试使用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执行查询
打开开发工具界面




集群的状态检查 de
GET /_cluster/health

根据”number_of_nodes”:3,我们可以得知Elasticsearch有3个节点(3个Docker容器)。
获取节点和索引信息的_cat API
查询可以继续写在下一行。而且,通过添加?v,每条信息将以带有头部的形式输出。
GET /_cat/nodes?v

我们可以看出,es01作为主节点正在运行。
查询索引
GET /_cat/indices?v

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