当前位置: 首页 > news >正文

【Project】ELK 7.17.16 日志分析系统部署

ELK 日志分析系统集群部署

本文档基于 Rocky Linux 9.4 系统,部署 ELK 7.17.16(长期支持版)集群

案例准备

1. 节点规划
IP主机名部署组件角色说明
192.168.100.150kafka01Elasticsearch、Kibana主节点(master)+ 可视化
192.168.100.151kafka02Elasticsearch、Logstash数据节点 + 日志收集
192.168.100.152kafka03Elasticsearch数据节点(仅存储数据)
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)内存锁定配置(避免内存交换,提升性能)
  1. 修改系统限制:

    vi /etc/security/limits.conf
    

    添加以下内容:

    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited
    
  2. 修改服务配置:

    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 索引模式
  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 集群,实现系统日志的收集、存储与可视化分析。

http://www.dtcms.com/a/289949.html

相关文章:

  • Day07_网络编程20250721(网络编程考试试卷)
  • 关于 URL 中 “+“ 号变成空格的问题
  • CentOS 7安装 FFmpeg问题可以按照以下步骤进行安装
  • Spring Boot 3核心技术面试指南:从迁移升级到云原生实战,9轮技术攻防(含架构解析)
  • Django实战:基于Django和openpyxl实现Excel导入导出功能
  • 基于python django的BOSS直聘网站计算机岗位数据分析与可视化系统,包括薪酬预测及岗位推荐,推荐算法为融合算法
  • 智能体性能优化:延迟、吞吐量与成本控制
  • django filter按两个属性 去重
  • JAVA面试宝典 -《 架构演进:从单体到 Service Mesh》
  • Go从入门到精通(26) - 一个简单web项目-实现服务注册
  • Go语言实战案例-读取CSV文件并打印
  • python 正则表达式
  • 借助 Amazon SageMaker Catalog 功能,简化从数据到洞察的路径
  • FastLLVE:实时低光视频增强新突破
  • 大端小端:数据存储的核心密码
  • Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
  • 论文Review Lidar 3DGS Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping
  • 【软件基础学习配置那些事 4-3】3ds Max2026 菜单栏常用命令-----文件、视图、编辑、工具、组
  • 深入详解随机森林在放射治疗计划优化中的应用及实现细节
  • 暴力破解练习
  • Reptile元学习算法复现实战:在Omniglot数据集上的少样本学习探索
  • 【AlphaFold3】网络架构篇(1)|概览+预测算法
  • 面试总结第54天微服务开始
  • 基础神经网络模型搭建
  • AI效能之AI单测(一)
  • MCP协议解析:如何通过Model Context Protocol 实现高效的AI客户端与服务端交互
  • c++ duiLib 使用xml文件编写界面布局
  • MyBatis Plus高效开发指南
  • 【PyTorch】图像二分类项目
  • JWT原理及利用手法