Elasticsearch:使用 Docker-Compose 启动单节点 Elastic Stack

899 阅读4分钟

首先必须指出的是,在我之前的文章 “Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x”,我有详述根据官方文档如何创建一个带有三个节点的安全 Elasticsearch 集群。本文基于著名的 Deviatony 存储库和 Elastic 的官方说明。 建议先通读这些说明,如果你已经可以根据这些说明开始搭建你自己的 Elastic Stack,则可以跳过本指南。

1)为什么选择 Elastic Stack?

Elastic Stack(以前称为 ELK stack)是三个开放及免费产品的集合 —— Elasticsearch、Logstash 和 Kibana。

  • Elasticsearch 是一个全文搜索和分析引擎
  • Logstash 是一个日志聚合器,它从多个来源收集和处理数据,将其转换为通用格式,并将其发送到各种目的地,例如 Elasticsearch
  • Kibana 允许用户在 Elasticsearch 中使用图表和图形可视化数据。

使用 Elastic Stack 的好处:

  • 它是开放及免费的,这意味着它可以免费使用,并且可以根据你的需要进行定制。
  • 它是一个完整的日志分析平台,用于搜索、分析和可视化来自不同机器的日志生成数据。
  • 它可以安全地实时提取、分析和可视化来自任何来源和格式的数据。
  • 还有很多 …

2)概述

Deviatony 的 repo 相比,本文所使用的 Elastic Stack 有更多的附加功能:

  • 在 docker-compose.yml 中为容器环境变量提供默认值(请注意,仍然可以使用 .env 文件覆盖这些值)
  • 为每个服务定制 Dockerfile
  • 为每个服务定制入口点,使得在运行容器时可以执行额外的命令
  • 使用 Logstash 管道加载到 Elasticsearch 的一些日志条目

3)设置

将此存储库克隆到你的 Docker 主机并 check out 分支 single-node-cluster:



1.  git clone https://github.com/Uhuynh/elastic-stack-docker.git
2.  git checkout single-node-cluster


主项目结构如下:



1.  $ pwd
2.  /Users/liuxg/data/elastic-stack-docker
3.  $ tree -L 3
4.  .
5.  ├── LICENSE
6.  ├── Makefile
7.  ├── docker-compose.setup.yml
8.  ├── docker-compose.yml
9.  ├── elasticsearch
10.  │   ├── Dockerfile
11.  │   ├── config
12.  │   │   └── elasticsearch.yml
13.  │   └── entrypoint.sh
14.  ├── kibana
15.  │   ├── Dockerfile
16.  │   ├── config
17.  │   │   └── kibana.yml
18.  │   └── entrypoint.sh
19.  ├── logstash
20.  │   ├── Dockerfile
21.  │   ├── config
22.  │   │   ├── logstash.yml
23.  │   │   └── pipelines.yml
24.  │   ├── entrypoint.sh
25.  │   ├── log_files
26.  │   │   └── test.log
27.  │   └── pipeline
28.  │       └── test_logs.conf
29.  ├── markdown
30.  │   ├── login_page.png
31.  │   └── user-page.png
32.  └── setup
33.      └── elasticsearch
34.          ├── Dockerfile
35.          ├── certs.sh
36.          ├── entrypoint.sh
37.          ├── helpers.sh
38.          ├── initialize.sh
39.          └── roles


elasticsearch.yml、kibana.yml 和 logstash.yml 是 Elastic Stack 中每个服务的主要配置文件。

创建证书

从 Elasticsearch 8.0 开始,默认启用安全性。 启用安全性后,Elastic Stack 安全功能需要对传输网络层进行 TLS 加密,否则你的集群将无法启动。

要开始使用 Elasticsearch 安全性,你需要生成证书颁发机构 (CA),然后使用它为集群中的每个节点生成证书:

docker-compose -f docker-compose.setup.yml run --rm es_certs


1.  $ docker-compose -f docker-compose.setup.yml run --rm es_certs
2.  [+] Running 1/0
3.Network elastic-stack-docker_default  Create...                                        0.0s
4.  [+] Running 11/11
5.   ⠿ es_certs Pulled                                                                       40.2s
6.     ⠿ 95e9c9b381a6 Pull complete                                                           5.2s
7.     ⠿ 9a45f418de13 Pull complete                                                           5.3s
8.     ⠿ 00871d1ebcfa Pull complete                                                           5.4s
9.     ⠿ 89732bc75041 Pull complete                                                           5.4s
10.     ⠿ f2cd942089ee Pull complete                                                          33.1s
11.     ⠿ 311f3ae295d1 Pull complete                                                          33.1s
12.     ⠿ e0351d108cd0 Pull complete                                                          33.2s
13.     ⠿ a88cdf3ed11e Pull complete                                                          33.2s
14.     ⠿ c168e6f97f22 Pull complete                                                          33.3s
15.     ⠿ 81858e17f7f1 Pull complete                                                          33.3s
16.  Creating Certificate Authority...
17.  Archive:  /certs/ca.zip
18.     creating: /certs/ca/
19.    inflating: /certs/ca/ca.crt        
20.    inflating: /certs/ca/ca.key        
21.  Creating certs...
22.  Archive:  /certs/certs.zip
23.     creating: /certs/es/
24.    inflating: /certs/es/es.crt        
25.    inflating: /certs/es/es.key        
26.  Setting file permissions
27.  Setup certs done!


这将启动 es_certs 容器,然后执行 ./setup/elasticsearch/certs.sh 中的 Bash 脚本。 请注意,容器必须由 root 用户运行。

成功运行后,你应该会在项目目录的 ./certs 文件夹中看到生成的证书和密钥:



1.  $ ls
2.  LICENSE                  docker-compose.yml       markdown
3.  Makefile                 elasticsearch            setup
4.  certs                    kibana
5.  docker-compose.setup.yml logstash
6.  $ pwd
7.  /Users/liuxg/data/elastic-stack-docker
8.  $ tree certs -L 2
9.  certs
10.  ├── ca
11.  │   ├── ca.crt
12.  │   └── ca.key
13.  ├── es
14.  │   ├── es.crt
15.  │   └── es.key
16.  └── instances.yml


然后,你可以将 Elasticsearch 配置为在与其他节点通信时使用这些证书进行身份验证和加密。

elasticsearch.yml



1.  # in elasticsearch.yml

3.  # Transport Protocol (inter-node communication)
4.  # note: production nodes won't start without this feature
5.  xpack.security.transport.ssl.enabled: true
6.  xpack.security.transport.ssl.verification_mode: certificate
7.  xpack.security.transport.ssl.key: certs/es/es.key
8.  xpack.security.transport.ssl.certificate: certs/es/es.crt
9.  xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt

11.  # HTTP Protocol (communication between ES and Kibana / Logstash)
12.  xpack.security.http.ssl.enabled: true
13.  xpack.security.http.ssl.verification_mode: certificate
14.  xpack.security.http.ssl.key: certs/es/es.key
15.  xpack.security.http.ssl.certificate: certs/es/es.crt
16.  xpack.security.http.ssl.certificate_authorities: certs/ca/ca.crt


kibana.yml



1.  # in kibana.yml

3.  ## Communications between Kibana and Elasticsearch
4.  ## see https://www.elastic.co/guide/en/kibana/current/configuring-tls.html#configuring-tls-kib-es
5.  elasticsearch.ssl.certificateAuthorities: config/certs/ca/ca.crt.crt


4)把 Elastic Stack 运行起来

我们在 terminal 中打入如下的命令:

docker-compose up -d

除了用于 Elasticsearch、Logstash 和 Kibana 的 3 个主要容器之外,还有一个设置容器,它运行一个初始脚本来为系统用户(kibana_system、logstash_system)设置密码并创建一个 logstash_internal 用户以将数据写入 Elasticsearch。 

你应该从设置容器中看到以下日志:



1.  $ pwd
2.  /Users/liuxg/data/elastic-stack-docker
3.  $ ls
4.  LICENSE                  docker-compose.yml       markdown
5.  Makefile                 elasticsearch            setup
6.  certs                    kibana
7.  docker-compose.setup.yml logstash
8.  $ docker-compose up -d
9.  [+] Running 4/4
10.   ⠿ Container elastic-stack-docker-es-1        Ru...                                       0.0s
11.   ⠿ Container elastic-stack-docker-setup-1     Started                                     0.3s
12.   ⠿ Container elastic-stack-docker-kibana-1    Running                                     0.0s
13.   ⠿ Container elastic-stack-docker-logstash-1  Started                                     0.3s


最后我们看到如下的信息:



1.  $ docker ps
2.  CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS                   PORTS                                            NAMES
3.  de558e082f4a   elastic-stack-docker-logstash   "/opt/setup/entrypoi…"   41 seconds ago   Up 40 seconds            5044/tcp, 9600/tcp, 0.0.0.0:5100->5100/tcp       elastic-stack-docker-logstash-1
4.  78b590b1e6c7   elastic-stack-docker-kibana     "/opt/setup/entrypoi…"   3 minutes ago    Up 3 minutes             0.0.0.0:5601->5601/tcp                           elastic-stack-docker-kibana-1
5.  ef4e93ed4c16   elastic-stack-docker-es         "/opt/setup/entrypoi…"   3 minutes ago    Up 3 minutes (healthy)   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elastic-stack-docker-es-1


我们可以看到如上的三个容器正在运行。

注意:在没有定义 elastic 超级用户密码的情况下,它的默认密码是:elastic-pass。我们可以使用这个密码来登录 Kibana。

要自定义此初始脚本,你可以查看文件 ./setup/elasticsearch/initialize.sh

等待 1 到 2 分钟让堆栈完成设置,然后在浏览器中访问 Kibana localhost:5601 并使用 docker-compose.yml 中定义的用户 elastic 和密码登录

堆栈中已经配置了一个 Logstash 管道,用于将日志从 ./logstash/log_files/test.log 加载到 Elasticsearch 中。

导航到 Management -> Stack Management -> Kibana -> Data View 为这些日志条目创建 data view。

 

 

然后你可以导航到 Kibana Analytics -> Discover 以查看、搜索、分析日志条目并创建可视化。

 

 

使用 Elastic Stack 进行愉快的测试!希望对你学习之旅有所帮助!