Project Icon

docker-elk

Docker化的Elastic Stack部署和管理解决方案

docker-elk项目基于Elastic官方Docker镜像,提供了一种使用Docker和Docker Compose运行Elastic Stack最新版本的方法。用户可以利用Elasticsearch的搜索聚合功能和Kibana的可视化能力分析数据。该项目配置简单灵活,适合快速搭建开发环境。它还包含TLS加密和Search Guard变体,并提供了详细的配置和扩展说明。

Docker上的Elastic栈(ELK)

Elastic Stack版本 构建状态 加入聊天

使用Docker和Docker Compose运行最新版本的Elastic栈

它使您能够利用Elasticsearch的搜索/聚合功能和Kibana的可视化能力分析任何数据集。

基于Elastic的官方Docker镜像

其他可用的栈变体:

  • tls:在Elasticsearch、Kibana(可选)和Fleet中启用TLS加密
  • searchguard:支持Search Guard

[!重要] 白金版功能默认启用,30天试用期。试用期结束后,您将无缝保留Open Basic许可证中包含的所有免费功能的访问权限,无需手动干预,也不会丢失任何数据。请参阅如何禁用付费功能部分以选择退出此行为。


简要说明

docker-compose up setup
docker-compose up

动画演示


理念

我们旨在为任何想要尝试这个强大技术组合的人提供最简单的Elastic栈入门方式。本项目的默认配置是刻意最小化和无偏见的。它不依赖任何外部依赖,并且使用尽可能少的自定义自动化来让一切正常运行。

相反,我们相信良好的文档,以便您可以将此存储库用作模板,对其进行调整,并使其成为您自己的。sherifabdlnaby/elastdocker是基于这一理念构建的项目之一。


目录

  1. 要求
  2. 使用方法
  3. 配置
  4. 可扩展性
  5. JVM调优
  6. 进一步探索

要求

主机设置

[!注意] 特别是在Linux上,确保您的用户拥有与Docker守护进程交互所需的权限

默认情况下,栈暴露以下端口:

  • 5044: Logstash Beats 输入
  • 50000: Logstash TCP 输入
  • 9600: Logstash 监控 API
  • 9200: Elasticsearch HTTP
  • 9300: Elasticsearch TCP 传输
  • 5601: Kibana

[!警告] Elasticsearch的引导检查被特意禁用,以便在开发环境中轻松设置Elastic栈。对于生产设置,我们建议用户按照Elasticsearch文档中的说明设置主机:重要系统配置

Docker Desktop

Windows

如果您使用的是Windows版Docker Desktop的传统Hyper-V模式,请确保为C:驱动器启用了文件共享

macOS

Mac版Docker Desktop的默认配置仅允许挂载来自/Users//Volume//private//tmp/var/folders的文件。确保将存储库克隆到这些位置之一,或按照文档中的说明添加更多位置。

使用方法

[!警告] 每当切换分支或更新已存在栈的版本时,您必须使用docker-compose build重新构建栈镜像。

启动栈

使用以下命令将此存储库克隆到将运行栈的Docker主机上:

git clone https://github.com/deviantony/docker-elk.git

然后,通过执行以下命令来初始化docker-elk所需的Elasticsearch用户和组:

docker-compose up setup

如果一切顺利且设置没有错误完成,启动其他栈组件:

docker-compose up

[!注意] 您也可以通过在上述命令后附加-d标志在后台运行所有服务(分离模式)。

给Kibana大约一分钟初始化,然后通过在网络浏览器中打开http://localhost:5601访问Kibana Web UI,并使用以下(默认)凭据登录:

  • 用户名:elastic
  • 密码:changeme

[!注意] 在初次启动时,Elasticsearch用户elasticlogstash_internalkibana_system使用.env文件中定义的密码值(默认为_"changeme"_)进行初始化。第一个是内置超级用户,其他两个分别由Kibana和Logstash用于与Elasticsearch通信。此任务仅在栈_初次_启动时执行。要在初始化_之后_更改用户密码,请参阅下一节中的说明。

初始设置

设置用户认证

[!注意] 参考Elasticsearch中的安全设置以禁用认证。

[!警告] 从Elastic v8.0.0开始,不再可能使用引导特权的elastic用户运行Kibana。

所有上述用户默认设置的_"changeme"_密码是不安全的。为了提高安全性,我们将把所有上述Elasticsearch用户的密码重置为随机密码。

  1. 重置默认用户的密码

    以下命令重置elasticlogstash_internalkibana_system用户的密码。请记下这些密码。

docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user elastic
docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user logstash_internal
docker-compose exec elasticsearch bin/elasticsearch-reset-password --batch --user kibana_system

如果需要(例如,如果您想通过 Beats 和其他组件收集监控信息),可以随时为其余的内置用户重复此操作。

  1. 替换配置文件中的用户名和密码

    .env 文件中 elastic 用户的密码替换为上一步生成的密码。其值不会被任何核心组件使用,但扩展使用它来连接到 Elasticsearch。

    [!注意] 如果您不打算使用任何提供的扩展,或者更喜欢创建自己的角色和用户来验证这些服务,那么在堆栈初始化后,可以安全地从 .env 文件中完全删除 ELASTIC_PASSWORD 条目。

    .env 文件中 logstash_internal 用户的密码替换为上一步生成的密码。其值在 Logstash 管道文件(logstash/pipeline/logstash.conf)中被引用。

    .env 文件中 kibana_system 用户的密码替换为上一步生成的密码。其值在 Kibana 配置文件(kibana/config/kibana.yml)中被引用。

    有关这些配置文件的更多信息,请参阅下面的配置部分。

  2. 重启 Logstash 和 Kibana,以使用新密码重新连接到 Elasticsearch

    docker-compose up -d logstash kibana
    

[!注意] 在 Elastic Stack 安全性 中了解更多关于 Elastic 堆栈的安全性。

注入数据

通过在网络浏览器中打开 http://localhost:5601 来启动 Kibana Web UI,并使用以下凭据登录:

  • 用户:elastic
  • 密码:<您生成的 elastic 密码>

现在堆栈已完全配置,您可以继续注入一些日志条目。

提供的 Logstash 配置允许您通过 TCP 端口 50000 发送数据。例如,您可以使用以下命令之一(取决于您安装的 nc(Netcat)版本)通过 Logstash 将日志文件 /path/to/logfile.log 的内容注入到 Elasticsearch 中:

# 执行 `nc -h` 以确定您的 `nc` 版本

cat /path/to/logfile.log | nc -q0 localhost 50000          # BSD
cat /path/to/logfile.log | nc -c localhost 50000           # GNU
cat /path/to/logfile.log | nc --send-only localhost 50000  # nmap

您还可以加载 Kibana 安装提供的示例数据。

清理

默认情况下,Elasticsearch 数据会持久化到卷中。

要完全关闭堆栈并删除所有持久化数据,请使用以下 Docker Compose 命令:

docker-compose down -v

版本选择

此仓库与 Elastic 堆栈的最新版本保持一致。main 分支跟踪当前主要版本(8.x)。

要使用核心 Elastic 组件的不同版本,只需更改 .env 文件中的版本号。如果您正在升级现有堆栈,请记得使用 docker-compose build 命令重新构建所有容器镜像。

[!重要] 在执行堆栈升级之前,请务必注意每个单独组件的官方升级说明。

较旧的主要版本也在单独的分支上得到支持:

配置

[!重要] 配置不会动态重新加载,任何配置更改后都需要重启单个组件。

如何配置 Elasticsearch

Elasticsearch 配置存储在 elasticsearch/config/elasticsearch.yml 中。

您还可以通过在 Compose 文件中设置环境变量来指定要覆盖的选项:

elasticsearch:

  environment:
    network.host: _non_loopback_
    cluster.name: my-cluster

有关如何在 Docker 容器中配置 Elasticsearch 的更多详细信息,请参阅以下文档页面:使用 Docker 安装 Elasticsearch

如何配置 Kibana

Kibana 的默认配置存储在 kibana/config/kibana.yml 中。

您还可以通过在 Compose 文件中设置环境变量来指定要覆盖的选项:

kibana:

  environment:
    SERVER_NAME: kibana.example.org

有关如何在 Docker 容器中配置 Kibana 的更多详细信息,请参阅以下文档页面:使用 Docker 安装 Kibana

如何配置 Logstash

Logstash 配置存储在 logstash/config/logstash.yml 中。

您还可以通过在 Compose 文件中设置环境变量来指定要覆盖的选项:

logstash:

  environment:
    LOG_LEVEL: debug

有关如何在 Docker 容器中配置 Logstash 的更多详细信息,请参阅以下文档页面:为 Docker 配置 Logstash

如何禁用付费功能

您可以在试用期到期日之前取消正在进行的试用(从而恢复到基本许可证),可以通过 Kibana 的许可证管理面板,或使用 Elasticsearch 的 start_basic 许可 API 来实现。请注意,如果在试用期到期日之前未将许可证切换为 basic 或升级,第二种选择是恢复对 Kibana 访问的唯一方法。

通过将 Elasticsearch 的 xpack.license.self_generated.type 设置从 trial 切换为 basic(请参阅许可设置)来更改许可证类型只有在初始设置之前完成才会生效。在试用开始后,从 trialbasic 的功能损失必须使用第一段中描述的两种方法之一来确认。

如何扩展 Elasticsearch 集群

请按照 Wiki 中的说明操作:扩展 Elasticsearch

如何重新执行设置

要再次运行设置容器并重新初始化 .env 文件中定义了密码的所有用户,只需再次 "up" setup Compose 服务:

$ docker-compose up setup
 ⠿ Container docker-elk-elasticsearch-1  Running
 ⠿ Container docker-elk-setup-1          Created
Attaching to docker-elk-setup-1
...
docker-elk-setup-1  | [+] User 'monitoring_internal'
docker-elk-setup-1  |    ⠿ User does not exist, creating
docker-elk-setup-1  | [+] User 'beats_system'
docker-elk-setup-1  |    ⠿ User exists, setting password
docker-elk-setup-1 exited with code 0

如何以编程方式重置密码

如果由于任何原因无法使用 Kibana 更改用户的密码(包括内置用户),您可以使用 Elasticsearch API 来实现相同的结果。

在下面的示例中,我们重置了 elastic 用户的密码(注意 URL 中的 "/user/elastic"):

curl -XPOST -D- 'http://localhost:9200/_security/user/elastic/_password' \
    -H 'Content-Type: application/json' \
    -u elastic:<您当前的 elastic 密码> \
    -d '{"password" : "<您的新密码>"}'

可扩展性

如何添加插件

要向任何 ELK 组件添加插件,您需要:

  1. 在相应的 Dockerfile 中添加 RUN 语句(例如 RUN logstash-plugin install logstash-filter-json
  2. 将相关的插件代码配置添加到服务配置中(例如 Logstash 输入/输出)
  3. 使用 docker-compose build 命令重新构建镜像

如何启用提供的扩展

extensions 目录中提供了几个扩展。这些扩展提供了一些不属于标准 Elastic 堆栈的功能,但可用于丰富额外的集成。

这些扩展的文档在每个单独的子目录中提供,按扩展逐个说明。其中一些需要对默认的 ELK 配置进行手动更改。

JVM 调优

如何指定服务使用的内存量

Elasticsearch 和 Logstash 的启动脚本可以从环境变量的值中附加额外的 JVM 选项,允许用户调整每个组件可以使用的内存量:

服务环境变量
ElasticsearchES_JAVA_OPTS
LogstashLS_JAVA_OPTS

为了适应内存稀缺的环境(Docker Desktop for Mac 默认只有 2 GB 可用),docker-compose.yml 文件中默认将堆大小分配限制为 Elasticsearch 512 MB,Logstash 256 MB。如果要覆盖默认的 JVM 配置,请编辑 docker-compose.yml 文件中相应的环境变量。

例如,要增加 Logstash 的最大 JVM 堆大小:

logstash:

  environment:
    LS_JAVA_OPTS: -Xms1g -Xmx1g

当未设置这些选项时:

  • Elasticsearch 启动时的 JVM 堆大小自动确定
  • Logstash 启动时使用固定的 1 GB JVM 堆大小。

如何启用服务的远程 JMX 连接

与 Java 堆内存类似(见上文),您可以指定 JVM 选项来启用 JMX 并在 Docker 主机上映射 JMX 端口。

使用以下内容更新 {ES,LS}_JAVA_OPTS 环境变量(我已将 JMX 服务映射到端口 18080,您可以更改)。不要忘记使用 Docker 主机的 IP 地址更新 -Djava.rmi.server.hostname 选项(替换 DOCKER_HOST_IP):

logstash:

  environment:
    LS_JAVA_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18080 -Dcom.sun.management.jmxremote.rmi.port=18080 -Djava.rmi.server.hostname=DOCKER_HOST_IP -Dcom.sun.management.jmxremote.local.only=false

深入探索

插件和集成

请参阅以下 Wiki 页面:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号