文章目錄
- 🚀 ELK Stack 部署詳解(CentOS 7/8)
- 📦 一、環境準備
- 1. 關閉防火墻(或開放端口)
- 2. 關閉 SELinux
- 3. 安裝基礎依賴
- 4. 驗證 Java
- 🔽 二、下載并安裝 ELK 組件
- 1. 導入 Elastic GPG 密鑰
- 2. 創建 YUM 源文件
- 🟦 三、安裝 Elasticsearch
- 1. 安裝
- 2. 修改配置文件
- 3. 啟動并設置開機自啟
- 4. 驗證 Elasticsearch
- 🟨 四、安裝 Kibana
- 1. 安裝
- 2. 修改配置文件
- 3. 啟動 Kibana
- 4. 訪問 Kibana
- 🟥 五、安裝 Logstash(可選,用于日志處理)
- 1. 安裝
- 2. 創建配置文件
- 3. 測試配置
- 4. 啟動 Logstash
- 🧩 六、安裝 Filebeat(日志采集器)
- 1. 安裝
- 2. 配置(示例:收集 Nginx 日志)
- 3. 啟動 Filebeat
- 🔐 七、安全建議(生產環境必看)
- 🧪 八、驗證 ELK 是否正常工作
- 📦 九、常用命令匯總
- 🎯 十、常見問題排查
- ? 總結
以下是在 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 {# 可添加日志解析規則,如 grokif [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: logenabled: truepaths:- /var/log/nginx/*.logfields:log_topic: nginx-accessoutput.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)