
手把手教你用 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 监控 API9200: Elasticsearch HTTP API9300: 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 天白金版试用。想提前结束试用,切回免费基础版?有两种方法:
- 通过 Kibana 界面:进入
许可证管理面板操作。 - 通过 Elasticsearch API:调用
start_basic许可 API。这是试用到期后恢复 Kibana 访问权限的唯一方法!
📌 注意:直接改配置文件里的
xpack.license.self_generated.type从trial改成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 装个新插件?
- 修改对应服务的
Dockerfile,加上RUN命令,例如:RUN logstash-plugin install logstash-filter-json - 在服务的配置文件中添加插件相关的配置。
- 用
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
微信扫一扫