Docker Compose 快速部署 ELK,避坑指南 + 全配置
核心前提:部署前必须调整内核参数,否则 ES 启动失败。配置关键ES 核心配置:禁用安全认证(新手)、设置单机模式、绑定 0.0.0.0 允许外部访问;Logstash 核心:管道配置(input/filter/output)需指向 ES 服务名;Kibana 核心:指定 ES 地址、开启中文界面(可选)。验证步骤:优先检查 ES 可用性,再验证 Kibana 访问,最后测试 Logstash 数
一、部署前置准备
1.1 环境要求
-
操作系统:Linux(CentOS 7+/Ubuntu 20.04+),推荐 2C8G 及以上配置(ES 对内存要求高)
-
已安装:Docker 20.10+、Docker Compose V2+
- 系统参数调整(必须,否则 ES 启动失败):
# 临时调整内核参数(重启失效)
sysctl -w vm.max_map_count=262144
# 永久调整(重启生效)
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
# 生效配置
sysctl -p
1.2 目录结构规划
先创建统一的 ELK 部署目录,确保文件挂载和持久化:
# 创建核心目录
mkdir -p /opt/elk/{es/config,es/data,es/plugins,logstash/config,logstash/pipeline,kibana/config}
# 授权(避免容器权限不足)
chmod -R 777 /opt/elk
最终目录结构:
/opt/elk/
├──docker-compose.yml # 核心编排文件
├──es/
│ ├──config/elasticsearch.yml# ES 配置文件
│ ├──data/ # ES 数据持久化目录
│ └──plugins/ # ES 插件目录
├──logstash/
│ ├──config/logstash.yml # Logstash 主配置
│ └──pipeline/logstash.conf # Logstash 管道配置(数据采集规则)
└──kibana/
└──config/kibana.yml # Kibana 配置文件
二、编写核心配置文件
2.1 Elasticsearch 配置文件
路径:/opt/elk/es/config/elasticsearch.yml
# 集群名称(ELK 集群统一)
cluster.name:elk-cluster
# 节点名称(单机单节点)
node.name:es-node-1
# 数据存储路径(对应容器内路径)
path.data:/usr/share/elasticsearch/data
# 日志路径
path.logs:/usr/share/elasticsearch/logs
# 绑定地址(允许所有IP访问)
network.host:0.0.0.0
# HTTP端口(默认9200)
http.port:9200
# 集群发现(单机模式,禁用自动发现)
discovery.type:single-node
# 关闭安全认证(新手部署简化,生产需开启)
xpack.security.enabled:false
xpack.security.enrollment.enabled:false
# 关闭HTTPS(新手简化)
xpack.security.http.ssl.enabled:false
xpack.security.transport.ssl.enabled:false
# JVM内存限制(根据服务器配置调整,默认1G,推荐2G)
# 注:此配置也可在docker-compose中通过环境变量设置
# ES_JAVA_OPTS: "-Xms2g -Xmx2g"
2.2 Logstash 主配置文件
路径:/opt/elk/logstash/config/logstash.yml
# 节点名称
node.name:logstash-node-1
# Logstash监听端口(用于Kibana管理)
http.host:0.0.0.0
http.port:9600
# 管道配置自动加载
config.reload.automatic:true
# 配置文件编码
config.support_escapes:true
# 日志级别
log.level:info
# 禁用安全认证(新手简化)
xpack.monitoring.enabled:false
xpack.security.enabled:false
2.3 Logstash 管道配置(核心)
路径:/opt/elk/logstash/pipeline/logstash.conf
# 输入:监听5044端口(接收Filebeat数据)+ 标准输入(测试用)
input {
beats {
port => 5044
}
stdin {
codec => "json"
}
}
# 过滤:可选(示例:解析Nginx日志,新手可注释)
filter {
# 示例:解析Nginx access.log
# grok {
# match => { "message" => "%{COMBINEDAPACHELOG}" }
# }
# date {
# match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
# }
}
# 输出:发送到Elasticsearch
output {
elasticsearch {
hosts => ["es:9200"] # 对应docker-compose中ES的服务名
index => "logstash-%{+YYYY.MM.dd}" # 按日期分索引
}
# 控制台输出(测试用,生产可注释)
stdout {
codec => rubydebug
}
}
2.4 Kibana 配置文件
路径:/opt/elk/kibana/config/kibana.yml
# 服务器绑定地址
server.host: 0.0.0.0
# Elasticsearch地址(对应docker-compose中ES的服务名)
elasticsearch.hosts: ["http://es:9200"]
# 禁用安全认证(新手简化)
xpack.security.enabled: false
xpack.encryptedSavedObjects.encryptionKey: "a_random_string_at_least_32_characters"
# 中文界面(可选)
i18n.locale: "zh-CN"
2.5 Docker Compose 核心编排文件
路径:/opt/elk/docker-compose.yml
version: '3.8'
services:
# Elasticsearch 服务
es:
image:elasticsearch:8.14.0# 版本可替换为7.17.x
container_name:elk-es
restart:always
environment:
-"ES_JAVA_OPTS=-Xms2g -Xmx2g"# JVM内存限制(关键)
-"TZ=Asia/Shanghai"# 时区
ports:
-"9200:9200"# HTTP端口
-"9300:9300"# 集群通信端口
volumes:
-./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-./es/data:/usr/share/elasticsearch/data
-./es/plugins:/usr/share/elasticsearch/plugins
networks:
-elk-network
# Logstash 服务
logstash:
image:logstash:8.14.0
container_name:elk-logstash
restart:always
environment:
-"LS_JAVA_OPTS=-Xms1g -Xmx1g"
-"TZ=Asia/Shanghai"
ports:
-"5044:5044"# beats输入端口
-"9600:9600"# 监控端口
volumes:
-./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
-./logstash/pipeline:/usr/share/logstash/pipeline
depends_on:
-es# 依赖ES,先启动ES
networks:
-elk-network
# Kibana 服务
kibana:
image:kibana:8.14.0
container_name:elk-kibana
restart:always
environment:
-"TZ=Asia/Shanghai"
ports:
-"5601:5601"# Kibana访问端口
volumes:
-./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
depends_on:
-es
networks:
-elk-network
# 自定义网络(隔离ELK服务)
networks:
elk-network:
driver:bridge
三、部署与管理命令
3.1 启动 ELK 集群
# 进入部署目录
cd /opt/elk
# 后台启动(推荐)
docker-compose up -d
# 前台启动(查看实时日志,调试用)
# docker-compose up
3.2 查看启动状态
# 查看容器状态
docker-compose ps
# 查看指定服务日志(如ES)
docker-compose logs -f es
# 查看所有服务日志
docker-compose logs -f
3.3 验证部署结果
-
验证 Elasticsearch:
curl http://localhost:9200正常输出(示例):
{
"name":"es-node-1",
"cluster_name":"elk-cluster",
"version":{
"number":"8.14.0",
"build_flavor":"default",
"build_type":"docker"
},
"tagline":"You Know, for Search"
} -
验证 Kibana: 浏览器访问
http://服务器IP:5601,能看到 Kibana 中文界面即成功。 -
测试 Logstash:
# 进入Logstash容器
docker exec -it elk-logstash /bin/bash
# 输入测试数据
echo '{"message":"test elk log","level":"info"}'查看 ES 索引:
curl http://localhost:9200/_cat/indices,能看到logstash-YYYY.MM.dd索引即成功。
3.4 停止/重启/删除
# 停止ELK
docker-compose stop
# 重启ELK
docker-compose restart
# 停止并删除容器(数据卷保留)
docker-compose down
# 停止并删除容器+数据卷(谨慎,数据会丢失)
docker-compose down -v
四、常见问题解决
-
ES 启动失败:检查
vm.max_map_count参数是否设置为 262144,或内存不足(调小ES_JAVA_OPTS)。 -
Kibana 提示无法连接 ES:检查
kibana.yml中elasticsearch.hosts是否为http://es:9200(对应docker-compose服务名)。 -
Logstash 无输出:检查管道配置
logstash.conf语法,可通过docker exec -it elk-logstash logstash -f /usr/share/logstash/pipeline/logstash.conf --config.test_and_exit验证配置语法。
总结
-
核心前提:部署前必须调整内核参数
vm.max_map_count=262144,否则 ES 启动失败。 -
配置关键:
-
ES 核心配置:禁用安全认证(新手)、设置单机模式、绑定 0.0.0.0 允许外部访问;
-
Logstash 核心:管道配置(input/filter/output)需指向 ES 服务名;
-
Kibana 核心:指定 ES 地址、开启中文界面(可选)。
-
-
验证步骤:优先检查 ES 可用性,再验证 Kibana 访问,最后测试 Logstash 数据输出。
更多推荐
所有评论(0)