手把手教你用 Docker 搞定 ELK Stack

IMG-20250918110255413

手把手教你用 Docker 搞定 ELK!零基础也能轻松上手,日志分析从未如此简单!

还在为服务器日志散落各处、排查问题如大海捞针而头疼?还在羡慕大厂酷炫的实时监控大屏?今天,这份保姆级教程,让你用 Docker 一键搭建属于自己的 ELK 日志分析平台!告别复杂配置,拥抱高效运维!

你没看错!只需几行命令,就能在你的电脑上运行起最新、最强大的 Elastic Stack(ELK)全家桶——Elasticsearch, Logstash, Kibana。无论你是想分析业务日志、监控系统性能,还是单纯想学习这个业界标杆的技术组合,这个基于 Docker 的方案都是你的最佳起点!

本项目来源于 Github 项目,此项目基于 Elastic 官方 Docker 镜像构建,开箱即用,配置极简。不是花里胡哨的自动化脚本,只提供最清晰的文档,让你能轻松理解每一步,并根据自己的需求进行定制。把它当作一个模板,玩出你的花样!

核心亮点:

  • 一键部署:Docker + Docker Compose,环境依赖?不存在的!
  • 安全默认:开箱即用的 TLS 加密通信,保护你的数据安全。
  • 功能强大:默认开启 30 天白金版试用,体验最全功能!
  • 高度可配:想改配置?想加插件?想调内存?统统满足你!

🚀 快速上手(三步走)

想立刻看到效果?没问题!终极懒人包命令奉上:

# 第一步:拉取代码(带TLS安全配置)
git clone --branch tls https://github.com/deviantony/docker-elk.git
cd docker-elk

# 第二步:生成安全证书 & 初始化用户
docker compose up tls
docker compose up setup

# 第三步:启动全家桶!
docker compose up

搞定!稍等一分钟,打开你的浏览器,访问 http://localhost:5601,用默认账号 elastic / changeme 登录 Kibana,你专属的数据可视化世界就此开启!


环境要求

  • Docker Engine: 18.06.0 或更高版本
  • Docker Compose: 2.0.0 或更高版本
  • 内存: 至少 1.5 GB RAM

📌 注意:在 Linux 上,请确保你的用户有权限操作 Docker 守护进程。

默认端口映射:

  • 5044: Logstash Beats 输入
  • 50000: Logstash TCP 输入 (方便你灌数据!)
  • 9600: Logstash 监控 API
  • 9200: Elasticsearch HTTP API
  • 9300: Elasticsearch 节点间通信
  • 5601: Kibana Web 界面

⚠️ 警告:为了方便开发环境搭建,Elasticsearch 的启动检查(bootstrap checks)默认是关闭的。生产环境请务必参考官方文档进行系统调优!

初始化设置:设置用户认证

⚠️ 警告:从 Elastic 8.0.0 开始,不能再用 elastic 超级用户直接启动 Kibana 了。而且默认密码 "changeme" 太不安全了!我们强烈建议你立刻重置为强密码!

1. 重置默认用户密码

执行以下命令,为关键用户生成随机强密码,并记下来

# 重置 elastic 用户密码
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user elastic --url https://localhost:9200

# 重置 logstash_internal 用户密码
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user logstash_internal --url https://localhost:9200

# 重置 kibana_system 用户密码
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user kibana_system --url https://localhost:9200

2. 更新配置文件

  • 用新生成的 elastic 用户密码,替换 .env 文件中的 ELASTIC_PASSWORD
  • 用新生成的 logstash_internal 用户密码,替换 .env 文件中的对应项(它在 logstash/pipeline/logstash.conf 里被引用)。
  • 用新生成的 kibana_system 用户密码,替换 .env 文件中的对应项(它在 kibana/config/kibana.yml 里被引用)。

3. 重启服务

让 Logstash 和 Kibana 用新密码重新连接 Elasticsearch:

docker compose up -d logstash kibana

注入你的数据

现在,用你新设置的 elastic 用户密码登录 Kibana (http://localhost:5601)。

想灌点数据进去玩玩?本项目的 Logstash 配置监听 50000 端口。你可以用 nc (Netcat) 命令把任意日志文件的内容发送过去:

# 根据你的 nc 版本选择一条命令
cat /path/to/your/logfile.log | nc -q0 localhost 50000          # BSD 版 nc
cat /path/to/your/logfile.log | nc -c localhost 50000           # GNU 版 nc
cat /path/to/your/logfile.log | nc --send-only localhost 50000  # nmap 版 nc

💡 小剧场:想象一下,你把 Nginx 的 access.log 灌进去,瞬间就能在 Kibana 里看到哪些 URL 访问最多,哪个 IP 在搞事情!是不是超酷?

或者,直接在 Kibana 里加载它自带的示例数据,体验一下强大的可视化功能!


清理环境

Elasticsearch 的数据默认是持久化存储的。如果你想彻底删除所有数据并关闭服务,请执行:

docker compose --profile=setup down -v

配置详解

⚠️ 重要:配置文件不是热加载的!改完配置后,需要重启对应的服务才能生效。

如何配置 Elasticsearch

配置文件路径:elasticsearch/config/elasticsearch.yml

你也可以在 docker-compose.yml 里用环境变量覆盖配置:

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

如何配置 Kibana

配置文件路径:kibana/config/kibana.yml

同样支持环境变量:

kibana:
  environment:
    SERVER_NAME: my-kibana.example.org

如何配置 Logstash

配置文件路径:logstash/config/logstash.yml

环境变量示例:

logstash:
  environment:
    LOG_LEVEL: debug

如何禁用付费功能

默认有 30 天白金版试用。想提前结束试用,切回免费基础版?有两种方法:

  1. 通过 Kibana 界面:进入许可证管理面板操作。
  2. 通过 Elasticsearch API:调用 start_basic 许可 API这是试用到期后恢复 Kibana 访问权限的唯一方法!

📌 注意:直接改配置文件里的 xpack.license.self_generated.typetrial 改成 basic只在首次初始化前有效。一旦试用开始,就必须用上面两种方法之一来切换。


进阶玩法

  • 如何重新生成 TLS 证书:修改 tls/instances.yml 文件,然后删除旧证书 rm -rf tls/certs/*,再运行 docker compose up tls
  • 如何重新执行初始化:直接再跑一遍 docker compose up setup
  • 如何编程式重置密码:用 Elasticsearch 的 Security API。
    curl -XPOST -D- 'https://localhost:9200/_security/user/elastic/_password' 
        --cacert tls/certs/ca/ca.crt 
        -H 'Content-Type: application/json' 
        -u elastic:<当前密码> 
        -d '{"password" : "<新密码>"}'
    

可扩展性

如何添加插件

想给 ELK 加点料?比如给 Logstash 装个新插件?

  1. 修改对应服务的 Dockerfile,加上 RUN 命令,例如:RUN logstash-plugin install logstash-filter-json
  2. 在服务的配置文件中添加插件相关的配置。
  3. docker compose build 重新构建镜像。

如何启用提供的扩展

项目 extensions 目录下提供了一些非官方的增强功能,比如额外的集成。每个扩展都有自己的说明文档,请按需查阅并手动配置。


JVM 调优

如何指定服务内存

Elasticsearch 和 Logstash 的 JVM 堆内存可以通过环境变量调整:

服务 环境变量
Elasticsearch ES_JAVA_OPTS
Logstash LS_JAVA_OPTS

默认在 docker-compose.yml 中,Elasticsearch 限制为 512MB,Logstash 限制为 256MB,以适应内存紧张的环境(如 Docker Desktop for Mac 默认只有 2GB)。

⚠️ 避坑提醒内存不是越大越好! 设置不当可能导致服务启动失败或主机卡死,请根据你的机器总内存谨慎调整。

想给 Logstash 分配 1GB 内存?就这么改:

logstash:
  environment:
    LS_JAVA_OPTS: -Xms1g -Xmx1g
  • 不设置时:Elasticsearch 会自动分配,Logstash 默认 1GB。

如何启用远程 JMX 连接

想用 JConsole 或 VisualVM 远程监控 JVM?可以这样配置:

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主机IP
      -Dcom.sun.management.jmxremote.local.only=false

记得把 你的Docker主机IP 替换成你电脑的真实 IP,并在主机防火墙开放 18080 端口。

🎉 结语:你的数据洞察之旅,从这里启航!

看到这里,相信你已经成功在本地搭建了一个功能完备的 ELK 平台!这不仅仅是一个玩具,更是你通往高效运维和深度数据洞察的大门。

别再让日志成为你工作的负担,用 ELK 把它们变成你的超级武器!无论是快速定位线上 Bug,还是分析用户行为,甚至是构建炫酷的实时监控大屏,ELK 都能帮你轻松搞定。

现在就动手试试吧!遇到任何问题,欢迎在评论区留言交流。觉得有用,别忘了点赞、在看、分享给你的小伙伴!我们下期技术爆款再见!

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/4186.htm

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2025年9月16日 下午1:45
下一篇 2025年9月22日 下午1:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注