文章目录
以下是在 CentOS 系统上部署 ELK Stack(Elasticsearch + Logstash + Kibana) 的 详细完整教程,适用于
CentOS 7/8
,采用官方 RPM 包安装,稳定可靠。
🚀 ELK Stack 部署详解(CentOS 7/8)
ELK 版本建议:8.11.3(本文以该版本为例,兼容性好)
目标:搭建一个可运行的 ELK 平台,用于收集、分析、可视化日志
服务器配置建议:2核4G以上,磁盘 ≥50GB
📦 一、环境准备
1. 关闭防火墙(或开放端口)
# 停止并禁用防火墙(生产环境建议只开放所需端口)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 或者开放 ELK 所需端口
sudo firewall-cmd --permanent --add-port=9200/tcp # Elasticsearch
sudo firewall-cmd --permanent --add-port=5601/tcp # Kibana
sudo firewall-cmd --permanent --add-port=5044/tcp # Logstash Beats 输入
sudo firewall-cmd --reload
2. 关闭 SELinux
# 临时关闭
sudo setenforce 0
# 永久关闭
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3. 安装基础依赖
sudo yum update -y
sudo yum install -y wget vim net-tools epel-release java-17-openjdk
✅ ELK 要求 Java 17+,OpenJDK 即可
4. 验证 Java
java -version
# 输出应包含:openjdk version "17.0.xx"
🔽 二、下载并安装 ELK 组件
我们使用 Elastic 官方 YUM 源进行安装。
1. 导入 Elastic GPG 密钥
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2. 创建 YUM 源文件
sudo tee /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
🟦 三、安装 Elasticsearch
1. 安装
sudo yum install -y elasticsearch
2. 修改配置文件
sudo vim /etc/elasticsearch/elasticsearch.yml
修改以下关键项:
# 节点名称
node.name: elk-node-1
# 集群名称(多个节点需一致)
cluster.name: elk-cluster
# 监听所有 IP(允许远程访问)
network.host: 0.0.0.0
# 设置初始主节点(单节点时填自己)
cluster.initial_master_nodes: ["elk-node-1"]
# 取消注释并设置
http.port: 9200
transport.port: 9300
⚠️ 生产环境建议限制
network.host
为内网 IP
3. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
4. 验证 Elasticsearch
curl -X GET "localhost:9200"
预期输出:
{
"name" : "elk-node-1",
"cluster_name" : "elk-cluster",
"version" : { "number" : "8.11.3", ... },
"tagline" : "You Know, for Search"
}
⏱️ 首次启动可能需要 1-2 分钟,请耐心等待
🟨 四、安装 Kibana
1. 安装
sudo yum install -y kibana
2. 修改配置文件
sudo vim /etc/kibana/kibana.yml
修改以下内容:
# Kibana 服务监听地址
server.host: "0.0.0.0"
# 允许所有来源访问(生产环境建议限制)
server.shutdownTimeout: "5s"
server.name: "kibana-server"
# Elasticsearch 地址
elasticsearch.hosts: ["http://localhost:9200"]
# 中文界面(可选)
i18n.locale: "zh-CN"
3. 启动 Kibana
sudo systemctl enable kibana
sudo systemctl start kibana
⚠️ Kibana 启动较慢(约 1-3 分钟),可通过
journalctl -u kibana -f
查看日志
4. 访问 Kibana
浏览器打开:
http://你的服务器IP:5601
首次访问会提示你设置用户名和密码(默认用户 elastic
),按页面引导完成即可。
🟥 五、安装 Logstash(可选,用于日志处理)
1. 安装
sudo yum install -y logstash
2. 创建配置文件
sudo vim /etc/logstash/conf.d/beats-input.conf
写入以下内容(接收 Filebeat 发送的日志):
input {
beats {
port => 5044
}
}
filter {
# 可添加日志解析规则,如 grok
if [path] =~ "access" {
mutate { add_field => { "log_type" => "access_log" } }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[agent.version]}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
3. 测试配置
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats-input.conf --config.test_and_exit
4. 启动 Logstash
sudo systemctl enable logstash
sudo systemctl start logstash
🧩 六、安装 Filebeat(日志采集器)
Filebeat 用于从其他服务器或本机采集日志并发送给 Logstash 或 Elasticsearch。
1. 安装
sudo yum install -y filebeat
2. 配置(示例:收集 Nginx 日志)
sudo vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
fields:
log_topic: nginx-access
output.logstash:
hosts: ["localhost:5044"]
# 或直接输出到 Elasticsearch
# output.elasticsearch:
# hosts: ["http://localhost:9200"]
3. 启动 Filebeat
sudo systemctl enable filebeat
sudo systemctl start filebeat
🔐 七、安全建议(生产环境必看)
启用 HTTPS 和用户认证
- Kibana 支持 SSL/TLS
- 使用
bin/elasticsearch-setup-passwords auto
自动生成密码
限制访问 IP
# kibana.yml server.host: "192.168.1.100" # 只允许内网访问
定期备份数据
- 使用 Elasticsearch Snapshot 功能
监控磁盘空间
- Elasticsearch 对磁盘 IO 敏感
🧪 八、验证 ELK 是否正常工作
Elasticsearch:
curl localhost:9200/_cat/indices?v
Kibana:
- 登录
http://IP:5601
- 进入 Stack Management > Index Patterns 创建索引模式
- 进入 Discover 查看日志
- 登录
Logstash/Filebeat:
- 查看日志:
tail -f /var/log/logstash/logstash-plain.log
- 确认是否有数据流入
- 查看日志:
📦 九、常用命令汇总
服务 | 命令 |
---|---|
Elasticsearch | systemctl start/stop/status elasticsearch |
Kibana | systemctl start/stop/status kibana |
Logstash | systemctl start/stop/status logstash |
Filebeat | systemctl start/stop/status filebeat |
查看日志 | journalctl -u elasticsearch -f |
🎯 十、常见问题排查
问题 | 解决方案 |
---|---|
Elasticsearch 启动失败 | 检查 journald -u elasticsearch ,常见于内存不足或权限问题 |
Kibana 无法连接 ES | 检查 elasticsearch.hosts 是否正确,ES 是否已启动 |
max virtual memory areas vm.max_map_count [65530] too low |
sudo sysctl -w vm.max_map_count=262144 |
Kibana 显示“No data” | 检查 Filebeat 是否运行,索引是否存在 |
✅ 总结
你现在已经成功部署了一套完整的 ELK Stack!
下一步你可以:
- 配置 Filebeat 采集你的应用日志(如 Spring Boot、Nginx)
- 在 Kibana 中创建 Dashboard 可视化日志
- 设置告警(通过 ElastAlert 或 Kibana Alerting)