能否将ELK以Docker服务形式运行?Docker新手的技术咨询
当然可以将ELK以Docker服务(Swarm服务)形式运行!
作为Docker新手,你已经成功用docker run跑起了一体化的sebp/elk镜像,现在切换到Docker Swarm服务完全可行,还能获得Swarm带来的服务编排、自动恢复、滚动更新等能力。下面给你一步步说明怎么做:
1. 先确保Docker Swarm已初始化(单节点也可以)
如果你的机器还没加入Swarm集群,先执行初始化命令:
docker swarm init
(如果是多节点集群,记得把其他节点加入进来,不过单节点Swarm完全满足你的需求)
2. 创建ELK Swarm服务
用docker service create命令来创建服务,这里要注意数据卷的处理——你原来用的是绑定挂载到本地的/var/lib/docker/volumes/elk-data,在Swarm里更推荐使用Docker命名卷(单节点下和你原来的方式效果一致,多节点的话可以扩展为分布式存储)。命令如下:
docker service create \ --name elk-service \ # 挂载数据卷到elasticsearch的数据目录 --mount type=volume,source=elk-data,target=/var/lib/elasticsearch \ # 挂载同一个卷到日志目录(和你原来的配置保持一致) --mount type=volume,source=elk-data,target=/var/log/elasticsearch \ # 发布Kibana端口 --publish published=5601,target=5601 \ # 发布ElasticSearch端口 --publish published=9200,target=9200 \ # 发布Logstash的Beats端口 --publish published=5044,target=5044 \ # 使用你原来的sebp/elk镜像 sebp/elk
3. 关键注意事项
- 资源限制:ELK栈非常吃内存和CPU,建议给服务加上资源限制,避免把机器资源耗尽,比如在命令里加上:
--limit-cpu 2 --limit-memory 4g(根据你的机器配置调整数值) - 多节点集群的特殊处理:如果是多节点Swarm集群,elasticsearch的数据存储需要用分布式存储(比如NFS、GlusterFS或者Docker的卷插件),不然每个节点上的服务实例会访问各自本地的数据,导致数据不一致。单节点的话就不用操心这个问题
- 日志查看:查看Swarm服务的日志用
docker service logs -f elk-service(-f是实时跟踪日志) - Journalbeat适配:你已经把Journalbeat做成了服务,只要确保Journalbeat配置里的ElasticSearch地址指向Swarm服务的名称
elk-service(Swarm内部服务可以通过服务名自动DNS解析),就能正常转发指标
4. 服务管理小技巧
- 查看服务状态:
docker service ls - 查看服务实例:
docker service ps elk-service - 更新服务(比如换镜像版本):
docker service update --image sebp/elk:latest elk-service - 删除服务:
docker service rm elk-service
如果是单节点Swarm,上面的命令直接就能跑起来,和你原来的docker run效果几乎一致,但多了Swarm的服务自愈能力——比如容器意外挂了,Swarm会自动重启它。要是之后你想把ELK拆分成ElasticSearch、Logstash、Kibana各自独立的Swarm服务,也可以慢慢探索~
内容的提问来源于stack exchange,提问作者Aswin
相关产品推荐
相关产品推荐

