ELKB日志分析平台 部署
ElasticSearch ELKB 日志分析 介绍
docker-compose一键部署ELK(elasticsearch+logstash+kibana)
以下是使用 Docker Compose 部署 Elasticsearch、Logstash、Kibana 和 Beats(以 Filebeat 为例) 的完整方案,涵盖配置文件、关键参数说明及部署步骤,适用于日志采集、存储与分析场景:
一、核心组件与架构
- Elasticsearch:日志存储与搜索引擎,支持分布式扩展。
- Logstash:日志采集、解析与转发工具,支持多数据源输入。
- Kibana:数据可视化与仪表板工具,与 Elasticsearch 集成。
- Filebeat:轻量级日志采集器,用于从文件或系统日志中收集数据并发送至 Logstash/Elasticsearch。
架构流程:
Filebeat → Logstash → Elasticsearch → Kibana
二、Docker Compose 配置文件
创建 docker-compose.yml
文件,内容如下:
version: '3.8'services:# Elasticsearch 服务elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0container_name: elasticsearchenvironment:- discovery.type=single-node # 单节点模式(生产环境需改为集群配置)- ES_JAVA_OPTS=-Xms1g -Xmx1g # JVM 堆内存设置(根据主机内存调整)- xpack.security.enabled=false # 禁用安全认证(生产环境需开启)ulimits:memlock:soft: -1hard: -1volumes:- es_data:/usr/share/elasticsearch/data # 数据持久化ports:- "9200:9200" # REST API 端口- "9300:9300" # 节点间通信端口networks:- elk_network# Logstash 服务logstash:image: docker.elastic.co/logstash/logstash:8.15.0container_name: logstashvolumes:- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml # Logstash 配置文件- ./logstash/pipeline:/usr/share/logstash/pipeline # 管道配置目录depends_on:- elasticsearchports:- "5044:5044" # Beats 输入端口- "9600:9600" # 监控端口networks:- elk_network# Kibana 服务kibana:image: docker.elastic.co/kibana/kibana:8.15.0container_name: kibanaenvironment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 指定 Elasticsearch 地址depends_on:- elasticsearchports:- "5601:5601" # Kibana 访问端口networks:- elk_network# Filebeat 服务filebeat:image: docker.elastic.co/beats/filebeat:8.15.0container_name: filebeatuser: root # 需要 root 权限访问主机日志文件volumes:- ./filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml # Filebeat 配置文件- /var/log:/var/log:ro # 挂载主机日志目录(只读)depends_on:- logstashnetworks:- elk_networkvolumes:es_data: # Elasticsearch 数据卷networks:elk_network: # 自定义网络,确保容器间通信driver: bridge
三、关键配置文件说明
1. Logstash 管道配置 (logstash/pipeline/logstash.conf
)
input {beats {port => 5044 # 监听 Filebeat 发送的数据}
}filter {# 示例:解析 JSON 格式日志if [message] =~ "^{" {json {source => "message"}}
}output {elasticsearch {hosts => ["elasticsearch:9200"] # 输出到 Elasticsearchindex => "logstash-%{+YYYY.MM.dd}" # 按日期生成索引}stdout { codec => rubydebug } # 调试用,输出到控制台
}
2. Filebeat 配置 (filebeat/config/filebeat.yml
)
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/*.log # 采集主机日志目录下的所有 .log 文件fields:app: "my_application" # 自定义字段,用于标识日志来源output.logstash:hosts: ["logstash:5044"] # 发送到 Logstash
四、部署步骤
-
创建目录结构:
mkdir -p elk/{logstash/config,logstash/pipeline,filebeat/config} chmod -R 777 elk # 确保容器有权限访问目录
-
放置配置文件:
- 将上述
logstash.conf
和filebeat.yml
分别放入对应目录。
- 将上述
-
启动服务:
docker-compose up -d
-
验证部署:
- Elasticsearch:访问
http://localhost:9200
,返回 JSON 信息表示成功。 - Kibana:访问
http://localhost:5601
,登录后创建索引模式(如logstash-*
)查看日志。 - Logstash:检查日志输出(
docker logs logstash
)确认数据接收。 - Filebeat:检查日志输出(
docker logs filebeat
)确认日志采集。
- Elasticsearch:访问
五、生产环境优化建议
-
集群配置:
- Elasticsearch 改为多节点部署,修改
discovery.type
和cluster.initial_master_nodes
。 - 增加
vm.max_map_count
系统参数(通过sysctl -w vm.max_map_count=262144
)。
- Elasticsearch 改为多节点部署,修改
-
安全认证:
- 启用 Elasticsearch 的 X-Pack 安全功能,生成证书并配置 Kibana/Logstash 使用 HTTPS。
-
资源限制:
- 为每个容器设置 CPU/内存限制(如
resources.limits.memory: 2G
)。
- 为每个容器设置 CPU/内存限制(如
-
日志轮转:
- 配置 Filebeat 的
close_inactive
和clean_inactive
参数避免日志文件过多。
- 配置 Filebeat 的
六、常见问题排查
- 容器无法通信:检查是否加入同一自定义网络(
elk_network
)。 - Elasticsearch 启动失败:检查
vm.max_map_count
和memlock
配置。 - Logstash 无数据输入:确认 Filebeat 的
output.logstash.hosts
地址正确。 - Kibana 无法连接 Elasticsearch:检查
ELASTICSEARCH_HOSTS
环境变量是否指向正确的容器名称。