【Project】ELK 7.17.16 日志分析系统部署
ELK 日志分析系统集群部署
本文档基于 Rocky Linux 9.4 系统,部署 ELK 7.17.16(长期支持版)集群
案例准备
1. 节点规划
IP | 主机名 | 部署组件 | 角色说明 |
---|---|---|---|
192.168.100.150 | kafka01 | Elasticsearch、Kibana | 主节点(master)+ 可视化 |
192.168.100.151 | kafka02 | Elasticsearch、Logstash | 数据节点 + 日志收集 |
192.168.100.152 | kafka03 | Elasticsearch | 数据节点(仅存储数据) |
2. 基础环境要求
- 系统:Rocky Linux 9.4(Blue Onyx)
- 内存:每节点至少 2GB(Elasticsearch 建议 4GB 以上)
- 网络:节点间互通,开放端口 9200(ES HTTP)、9300(ES 集群)、5601(Kibana)、9600(Logstash)
案例实施
1. 基础环境配置(所有节点执行)
(1)修改主机名
# kafka01 节点
hostnamectl set-hostname kafka01 && bash# kafka02 节点
hostnamectl set-hostname kafka02 && bash# kafka03 节点
hostnamectl set-hostname kafka03 && bash
(2)配置主机名映射
vi /etc/hosts
添加以下内容(三个节点均需配置):
127.0.0.1 localhost
::1 localhost
192.168.100.150 kafka01
192.168.100.151 kafka02
192.168.100.152 kafka03
(3)安装 JDK 环境
ELK 7.17.x 依赖 JDK 1.8 或 11,此处使用 OpenJDK 1.8:
# 安装 OpenJDK 1.8
dnf install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel# 验证安装
java -version
# 预期输出:openjdk version "1.8.0_382" 或更高版本
2. 部署 Elasticsearch 集群(所有节点执行)
(1)下载并安装 Elasticsearch 7.17.16
# 下载 RPM 包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.16-x86_64.rpm# 安装
rpm -ivh elasticsearch-7.17.16-x86_64.rpm
(2)节点配置(核心差异:7.x 新增主节点初始化参数)
配置文件路径:/etc/elasticsearch/elasticsearch.yml
kafka01(主节点):
cluster.name: ELK-Cluster # 集群名称(所有节点一致)
node.name: kafka01 # 节点名(与主机名一致)
node.master: true # 允许作为主节点
node.data: false # 不存储数据(仅主节点)
network.host: 192.168.100.150 # 绑定当前节点 IP
http.port: 9200 # HTTP 端口
# 集群节点发现(7.x 用 discovery.seed_hosts 替代旧参数)
discovery.seed_hosts: ["kafka01", "kafka02", "kafka03"]
# 初始主节点列表(首次启动时选举主节点)
cluster.initial_master_nodes: ["kafka01"]
# 关闭内存交换(提升性能)
bootstrap.memory_lock: true
kafka02(数据节点):
cluster.name: ELK-Cluster
node.name: kafka02
node.master: false # 不参与主节点选举
node.data: true # 存储数据
network.host: 192.168.100.151
http.port: 9200
discovery.seed_hosts: ["kafka01", "kafka02", "kafka03"]
cluster.initial_master_nodes: ["kafka01"]
bootstrap.memory_lock: true
kafka03(数据节点):
cluster.name: ELK-Cluster
node.name: kafka03
node.master: false
node.data: true
network.host: 192.168.100.152
http.port: 9200
discovery.seed_hosts: ["kafka01", "kafka02", "kafka03"]
cluster.initial_master_nodes: ["kafka01"]
bootstrap.memory_lock: true
(3)内存锁定配置(避免内存交换,提升性能)
-
修改系统限制:
vi /etc/security/limits.conf
添加以下内容:
elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited
-
修改服务配置:
vi /usr/lib/systemd/system/elasticsearch.service
确保包含以下行(默认已配置,验证即可):
LimitMEMLOCK=infinity
(4)启动 Elasticsearch
# 刷新配置并启动
systemctl daemon-reload
systemctl enable --now elasticsearch# 验证服务状态(确保 9200/9300 端口监听)
ss -ntpl | grep 9200
# 预期输出:LISTEN 0 128 192.168.100.150:9200 ...
(5)验证集群健康状态(在 kafka01 执行)
curl -XGET 'http://192.168.100.150:9200/_cluster/health?pretty'
健康状态输出(status: green
表示正常):
{"cluster_name" : "ELK-Cluster","status" : "green","number_of_nodes" : 3,"number_of_data_nodes" : 2,"active_primary_shards" : 0,"active_shards" : 0,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0
}
3. 部署 Kibana(仅 kafka01 节点)
(1)下载并安装 Kibana 7.17.16
# 下载 RPM 包
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.16-x86_64.rpm# 安装
rpm -ivh kibana-7.17.16-x86_64.rpm
(2)配置 Kibana
配置文件路径:/etc/kibana/kibana.yml
server.port: 5601 # 端口
server.host: "192.168.100.150" # 绑定 kafka01 IP
elasticsearch.hosts: ["http://192.168.100.150:9200"] # 关联 Elasticsearch
kibana.index: ".kibana" # Kibana 存储索引(默认)
(3)启动 Kibana
systemctl enable --now kibana# 验证端口
ss -ntpl | grep 5601
# 预期输出:LISTEN 0 128 192.168.100.150:5601 ...
通过浏览器访问 http://192.168.100.150:5601
,出现 Kibana 界面即部署成功。
4. 部署 Logstash(仅 kafka02 节点)
(1)下载并安装 Logstash 7.17.16
# 下载 RPM 包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.16-x86_64.rpm# 安装
rpm -ivh ./logstash-7.17.16-x86_64.rpm
(2)配置 Logstash
基础配置(/etc/logstash/logstash.yml
):
http.host: "192.168.100.151" # 绑定 kafka02 IP
path.config: /etc/logstash/conf.d/*.conf # 配置文件路径
日志收集规则(收集系统日志):
创建配置文件 vi /etc/logstash/conf.d/syslog.conf
:
input {file {path => "/var/log/messages" # Rocky Linux 系统日志路径type => "systemlog"start_position => "beginning" # 从日志开头收集stat_interval => "3" # 每 3 秒检查日志更新}
}
output {if [type] == "systemlog" {elasticsearch {hosts => ["http://192.168.100.150:9200"] # 输出到 kafka01 的 ESindex => "system-log-%{+YYYY.MM.dd}" # 按日期拆分索引}}
}
(3)验证配置并启动
修改日志目录权限
# 确保日志目录存在并修改所有者
sudo mkdir -p /var/log/logstash
sudo chown -R logstash:logstash /var/log/logstash
sudo chmod -R 755 /var/log/logstash # 目录权限:所有者可读写执行,其他用户可读执行
修改数据目录权限
# 确保队列目录及父目录存在并修改所有者
sudo mkdir -p /var/lib/logstash/queue
sudo chown -R logstash:logstash /var/lib/logstash
sudo chmod -R 755 /var/lib/logstash # 同上,确保可写
验证配置文件目录权限
额外检查配置文件目录权限:
sudo chown -R logstash:logstash /etc/logstash
sudo chmod -R 755 /etc/logstash
# 授权 Logstash 读取日志文件
chmod 644 /var/log/messages# 验证配置文件(7.x 命令调整)
/usr/share/logstash/bin/logstash --path.settings /etc/logstash -t# 启动并设置开机自启
systemctl enable --now logstash# 验证 9600 端口(Logstash 监控端口)
ss -ntpl | grep 9600
# 预期输出:LISTEN 0 128 192.168.100.151:9600 ...
5. Kibana 日志可视化(在浏览器操作)
(1)查看日志索引(在 kafka01 执行)
curl 'http://192.168.100.150:9200/_cat/indices?v'
# 预期输出包含:system-log-2025.07.21(按实际日期)
(2)配置 Kibana 索引模式
- 访问 Kibana 页面
http://192.168.100.150:5601
,进入 Management → Stack Management → Index Patterns。 - 点击 Create index pattern,输入索引匹配规则
system-log-*
,点击 Next step。 - 时间字段选择
@timestamp
,点击 Create index pattern。
(3)查看日志
点击左侧 Discover,即可看到收集到的系统日志。若提示无数据,通过右上角时间选择器切换为“Today”(当天)。
常见问题处理
-
Elasticsearch 启动失败:
查看日志:journalctl -u elasticsearch -f
,常见原因是内存不足(调整jvm.options
中的-Xms
和-Xmx
)。 -
Logstash 无输出:
检查日志权限:ls -l /var/log/messages
,确保 logstash 用户有读取权限。 -
Kibana 无法连接 ES:
验证elasticsearch.hosts
配置是否正确,执行curl http://192.168.100.150:9200
确认 ES 可访问。
通过以上步骤,可在 Rocky Linux 9 上部署兼容且稳定的 ELK 7.17.16 集群,实现系统日志的收集、存储与可视化分析。