docker-elk

docker-elk

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

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

Elastic StackDockerElasticsearchKibanaLogstashGithub开源项目

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 页面:

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多