【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)修改主机名
bash 复制代码
# kafka01 节点
hostnamectl set-hostname kafka01 && bash

# kafka02 节点
hostnamectl set-hostname kafka02 && bash

# kafka03 节点
hostnamectl set-hostname kafka03 && bash
(2)配置主机名映射
bash 复制代码
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:

bash 复制代码
# 安装 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
bash 复制代码
# 下载 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(主节点):
yaml 复制代码
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(数据节点):
yaml 复制代码
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(数据节点):
yaml 复制代码
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)内存锁定配置(避免内存交换,提升性能)
  1. 修改系统限制:

    bash 复制代码
    vi /etc/security/limits.conf

    添加以下内容:

    复制代码
    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited
  2. 修改服务配置:

    bash 复制代码
    vi /usr/lib/systemd/system/elasticsearch.service

    确保包含以下行(默认已配置,验证即可):

    复制代码
    LimitMEMLOCK=infinity
(4)启动 Elasticsearch
bash 复制代码
# 刷新配置并启动
systemctl daemon-reload
systemctl enable --now elasticsearch

# 验证服务状态(确保 9200/9300 端口监听)
ss -ntpl | grep 9200
# 预期输出:LISTEN  0  128  192.168.100.150:9200  ...
(5)验证集群健康状态(在 kafka01 执行)
bash 复制代码
curl -XGET 'http://192.168.100.150:9200/_cluster/health?pretty'

健康状态输出(status: green 表示正常):

json 复制代码
{
  "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
bash 复制代码
# 下载 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

yaml 复制代码
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
bash 复制代码
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
bash 复制代码
# 下载 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):
yaml 复制代码
http.host: "192.168.100.151"  # 绑定 kafka02 IP
path.config: /etc/logstash/conf.d/*.conf  # 配置文件路径
日志收集规则(收集系统日志):

创建配置文件 vi /etc/logstash/conf.d/syslog.conf

yaml 复制代码
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 的 ES
      index => "system-log-%{+YYYY.MM.dd}"  # 按日期拆分索引
    }
  }
}
(3)验证配置并启动

修改日志目录权限

bash 复制代码
# 确保日志目录存在并修改所有者
sudo mkdir -p /var/log/logstash
sudo chown -R logstash:logstash /var/log/logstash
sudo chmod -R 755 /var/log/logstash  # 目录权限:所有者可读写执行,其他用户可读执行

修改数据目录权限

bash 复制代码
# 确保队列目录及父目录存在并修改所有者
sudo mkdir -p /var/lib/logstash/queue
sudo chown -R logstash:logstash /var/lib/logstash
sudo chmod -R 755 /var/lib/logstash  # 同上,确保可写

验证配置文件目录权限

额外检查配置文件目录权限:

bash 复制代码
sudo chown -R logstash:logstash /etc/logstash
sudo chmod -R 755 /etc/logstash
bash 复制代码
# 授权 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 执行)
bash 复制代码
curl 'http://192.168.100.150:9200/_cat/indices?v'
# 预期输出包含:system-log-2025.07.21(按实际日期)
(2)配置 Kibana 索引模式
  1. 访问 Kibana 页面 http://192.168.100.150:5601,进入 Management → Stack Management → Index Patterns
  2. 点击 Create index pattern ,输入索引匹配规则 system-log-*,点击 Next step
  3. 时间字段选择 @timestamp,点击 Create index pattern
(3)查看日志

点击左侧 Discover ,即可看到收集到的系统日志。若提示无数据,通过右上角时间选择器切换为"Today"(当天)。

常见问题处理

  1. Elasticsearch 启动失败

    查看日志:journalctl -u elasticsearch -f,常见原因是内存不足(调整 jvm.options 中的 -Xms-Xmx)。

  2. Logstash 无输出

    检查日志权限:ls -l /var/log/messages,确保 logstash 用户有读取权限。

  3. Kibana 无法连接 ES

    验证 elasticsearch.hosts 配置是否正确,执行 curl http://192.168.100.150:9200 确认 ES 可访问。

通过以上步骤,可在 Rocky Linux 9 上部署兼容且稳定的 ELK 7.17.16 集群,实现系统日志的收集、存储与可视化分析。