docker部署elk核心是用docker-compose统一编排三服务,确保同网络通信、版本一致(如7.17.21)、配置协同:elasticsearch绑定0.0.0.0并设single-node,logstash配置beats输入与elasticsearch输出,kibana通过https://www.php.cn/link/df1587ed91223bcb29b80f5bdcb9f3fa连接。

用 Docker 部署 ELK(Elasticsearch + Logstash + Kibana)系统,核心是让三个组件网络互通、配置对齐、职责分明。不建议手动逐个 run 容器硬编码 IP,推荐用 Docker Compose 统一编排,既清晰又易维护。
准备基础环境
确保宿主机已安装:
- Docker(建议 20.10+)和 Docker Compose(v2.x)
- 配置好国内镜像源(如阿里云或中科大),加速 elasticsearch、logstash、kibana 镜像拉取
- 关闭 SELinux 或设为 permissive 模式(CentOS/RHEL 环境下避免挂载失败)
编写 docker-compose.yml 文件
在项目目录下创建 docker-compose.yml,内容如下(适配 7.x–8.x 版本,兼容性好):
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.21
container_name: es-node01
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- xpack.security.enabled=false
volumes:
- es_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- elk
<p>logstash:
image: docker.elastic.co/logstash/logstash:7.17.21
container_name: logstash-server
volumes:</p>
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro depends_on:
- elasticsearch networks:
- elk ports:
- "5044:5044" # Filebeat 默认端口
- "3456:3456" # 可选:log4j 输入监听端口
kibana: image: docker.elastic.co/kibana/kibana:7.17.21 container_name: kibana-server environment:
- ELASTICSEARCH_HOSTS=https://www.php.cn/link/df1587ed91223bcb29b80f5bdcb9f3fa
- I18N_LOCALE=zh-CN depends_on:
- elasticsearch ports:
- "5601:5601" networks:
- elk
volumes: es_data:
networks: elk: driver: bridge
注意:所有服务必须在同一个自定义网络(elk)中,才能通过服务名(如 elasticsearch)互相访问,无需写死 IP。
配置 Logstash 数据管道
在同级目录新建 logstash.conf,定义日志来源与去向:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
input {
beats {
port => 5044
}
# 可选:接收 log4j 日志(需应用主动推送)
# log4j {
# mode => "server"
# host => "0.0.0.0"
# port => 3456
# }
}
<p>filter {
if [log][file][path] =~ "json" {
json {
source => "message"
skip_on_invalid_json => true
}
}
mutate {
remove_field => ["@version", "host", "agent"]
}
}</p><p>output {
elasticsearch {
hosts => ["<a href="https://www.php.cn/link/df1587ed91223bcb29b80f5bdcb9f3fa">https://www.php.cn/link/df1587ed91223bcb29b80f5bdcb9f3fa</a>"]
index => "logs-%{+YYYY.MM.dd}"
}
}
</p>
该配置支持 Filebeat 推送的结构化日志,并自动按天建索引;若只处理纯文本日志,可删掉 json 插件部分。
启动并验证服务
执行以下命令一键启动:
docker-compose up -d
检查状态:
-
docker-compose ps—— 查看各容器是否 healthy -
curl http://localhost:9200/_cat/indices?v—— 应看到 logs- 开头的索引 - 浏览器访问 http://localhost:5601,首次进入会提示配置 Index Pattern,填入
logs-*即可开始查看日志
如需采集宿主机 Docker 容器日志,再部署 Filebeat 容器并指向 logstash:5044;若只是测试,可用 echo '{"msg":"test"}' | curl -XPOST http://localhost:5044 -H 'Content-Type: application/json' -d @- 模拟发送。










