如何搭建ELK
搭建 ELK(Elasticsearch、Logstash、Kibana)栈是一个多步骤的过程,涉及多个组件的部署和配置。以下是详细的搭建步骤,适用于在 Linux 服务器(如 CentOS 7/8、Ubuntu 20.04/22.04)上部署生产或开发/测试环境。
🎯 一、架构概述
典型的 ELK 栈核心组件:
- Filebeat(可选但推荐):轻量级日志收集器,部署在客户端节点。
- Logstash:日志处理管道(接收、解析、过滤、输出)。
- Elasticsearch:分布式搜索引擎,存储和索引数据。
- Kibana:数据可视化 Dashboard。
- Kafka(可选,高并发场景):作为日志缓冲队列。
⚠️ 最小化部署:可将 Logstash + ES + Kibana 装在同一台服务器(测试环境)。生产环境建议分离部署。
📦 二、环境准备
服务器要求:
- OS: Linux (CentOS 7+, Ubuntu 18.04+)。
- Java:至少 OpenJDK 11(Elasticsearch 依赖)。
# 安装 OpenJDK 11 sudo apt update && sudo apt install openjdk-11-jdk # Ubuntu sudo yum install java-11-openjdk-devel # CentOS
资源规划:
- 内存:ES 单独占用 ≥4GB(生产建议 ≥16GB),禁用 Swap。
- 磁盘:SSD 高性能磁盘,预留足够空间(日志量 x 副本数)。
- 网络:开放端口:
- ES:
9200
(HTTP),9300
(集群通信) - Kibana:
5601
- Logstash:
5044
(Beats),9600
(管理)
- ES:
🔧 三、分步安装配置
🔹 步骤 1:安装 Elasticsearch
添加 Elastic 仓库:
# Ubuntu/Debian wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list# CentOS/RHEL sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo tee /etc/yum.repos.d/elastic.repo <<EOF [elasticsearch] name=Elasticsearch baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
安装并启动 ES:
sudo apt update && sudo apt install elasticsearch # Ubuntu sudo yum install elasticsearch # CentOS# 修改配置文件 /etc/elasticsearch/elasticsearch.yml cluster.name: my-elk-cluster # 集群名(所有节点一致) node.name: node-1 # 节点名 network.host: 0.0.0.0 # 监听所有IP(生产环境建议绑定内网IP) discovery.type: single-node # 单节点模式(集群需注释此项) # 集群配置示例(多节点): # discovery.seed_hosts: ["192.168.1.10", "192.168.1.11"] # cluster.initial_master_nodes: ["node-1", "node-2"]# 启动服务 sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch
验证 ES:
curl -X GET http://localhost:9200 # 应返回JSON,包含"cluster_name"等信息
🔹 步骤 2:安装 Logstash
安装 Logstash:
sudo apt install logstash # Ubuntu sudo yum install logstash # CentOS
配置 Pipeline:
创建配置文件/etc/logstash/conf.d/my-pipeline.conf
:input {beats {port => 5044 # 接收 Filebeat 数据}# 可选:直接监听文件# file {# path => "/var/log/*.log"# start_position => "beginning"# } }filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}" } # 示例:解析日志格式}date {match => [ "timestamp", "ISO8601" ]} }output {elasticsearch {hosts => ["http://localhost:9200"] # ES地址index => "app-logs-%{+YYYY.MM.dd}" # 索引命名规则} }
启动 Logstash:
sudo systemctl enable logstash sudo systemctl start logstash
🔹 步骤 3:安装 Kibana
安装并配置 Kibana:
sudo apt install kibana # Ubuntu sudo yum install kibana # CentOS# 编辑配置 /etc/kibana/kibana.yml server.port: 5601 server.host: "0.0.0.0" # 允许外部访问 elasticsearch.hosts: ["http://localhost:9200"] # ES地址
启动 Kibana:
sudo systemctl enable kibana sudo systemctl start kibana
访问
http://<your-server-ip>:5601
,进入Kibana界面。
🔹 步骤 4:安装 Filebeat(在客户端服务器)
安装 Filebeat:
# Ubuntu sudo apt install filebeat # CentOS sudo yum install filebeat
配置 Filebeat:
修改/etc/filebeat/filebeat.yml
:filebeat.inputs:- type: filestreamenabled: truepaths:- /var/log/*.log # 收集的日志路径output.logstash:hosts: ["logstash-server-ip:5044"] # Logstash地址
启动并验证:
sudo systemctl enable filebeat sudo systemctl start filebeat # 检查状态:sudo filebeat test output
🛡 四、重要优化与安全设置
Elasticsearch 安全(免费版基础安全):
- 启用 TLS 加密传输(
xpack.security.enabled: true
)。 - 设置内置用户密码:
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
- 在 Kibana 和 Logstash 配置中使用用户名密码连接 ES。
- 启用 TLS 加密传输(
性能调优:
- ES 内存:调整
-Xms
和-Xmx
(不超过物理内存50%):# /etc/elasticsearch/jvm.options -Xms4g -Xmx4g
- Logstash Worker 线程(根据 CPU 核心数):
# /etc/logstash/logstash.yml pipeline.workers: 4
- ES 内存:调整
索引生命周期管理 (ILM):
- 通过 Kibana > Stack Management 创建策略:
- 自动删除旧数据(如保留7天)。
- 优化分片数量(推荐单分片大小20-50GB)。
- 通过 Kibana > Stack Management 创建策略:
🔍 五、验证日志流程
- 在客户端生成日志:
echo "Test log entry" >> /var/log/test.log
- 在 Kibana 中操作:
- Management > Stack Management > Data Views:创建
app-logs-*
数据视图。 - Analytics > Discover:选择数据视图查看日志。
- Management > Stack Management > Data Views:创建
⚙️ 六、可选:集群化部署(生产推荐)
组件 | 集群化方案 |
---|---|
Elasticsearch | 部署 ≥3 节点(奇数),配置 discovery.seed_hosts 和 cluster.initial_master_nodes |
Logstash | 多实例部署,通过负载均衡器分发数据(如 Nginx、HAProxy) |
Kibana | 无状态服务,可多实例 + Nginx 反向代理 |
🚨 避坑指南
- 防火墙未开放端口:检查
firewall-cmd
或ufw
。 - Java 版本不兼容:必须使用 JDK 11(ES 7.x/8.x)。
- 磁盘空间不足:监控 ES 磁盘使用率,避免只读状态。
- 日志未解析:在 Kibana 的 Discover 中检查字段是否被正确解析(Grok 调试器好用!)。
通过以上步骤,您可搭建一个功能完备的 ELK 栈。建议初次使用从单节点测试开始,熟悉后再扩展集群。如需容器化部署(Docker/K8s),可参考 Elastic 官方 Helm Charts 或 Docker Compose 模板。