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


    首先必须指出的是,在我之前的文章 “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
    2. # Transport Protocol (inter-node communication)
    3. # note: production nodes won't start without this feature
    4. xpack.security.transport.ssl.enabled: true
    5. xpack.security.transport.ssl.verification_mode: certificate
    6. xpack.security.transport.ssl.key: certs/es/es.key
    7. xpack.security.transport.ssl.certificate: certs/es/es.crt
    8. xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt
    9. # HTTP Protocol (communication between ES and Kibana / Logstash)
    10. xpack.security.http.ssl.enabled: true
    11. xpack.security.http.ssl.verification_mode: certificate
    12. xpack.security.http.ssl.key: certs/es/es.key
    13. xpack.security.http.ssl.certificate: certs/es/es.crt
    14. xpack.security.http.ssl.certificate_authorities: certs/ca/ca.crt

    kibana.yml

    1. # in kibana.yml
    2. ## Communications between Kibana and Elasticsearch
    3. ## see https://www.elastic.co/guide/en/kibana/current/configuring-tls.html#configuring-tls-kib-es
    4. 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 进行愉快的测试!希望对你学习之旅有所帮助! 

  • 相关阅读:
    C++&QT 作业9
    云备份——初步认识及环境搭建
    API接口:概述、设计、应用与未来趋势
    加速释放传统企业业务潜力,S2B2B商城建设方案引领电商模式新风向
    【Mac】KeyKey — Typing Practice for mac软件介绍及安装
    docker存储驱动
    如何生成osg的动画路径文件
    【SQL Server + MySQL二 】SQL: DDL数据定义【定义、修改、删除基本表】,DML【憎删改查】,DCL数据控制语言
    【Maven教程】(七)聚合与继承:多模块项目实用特性介绍,反应堆构建及裁剪 ~
    Java代码规范
  • 原文地址:https://blog.csdn.net/UbuntuTouch/article/details/130598609