当前位置: 首页 > 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.lryc.cn/news/594851.html

相关文章:

  • 阿里云平台使用的ack创建的pod与服务器中的MongoDB不在同一网段如何解决
  • 【图像处理基石】什么是相机的内外参数?
  • 单表查询-分页提前获取数据
  • 自动化与安全 - 将 Terraform 集成到 CI/CD
  • 安装pytorch(cpu版)
  • 电科金仓2025发布会,国产数据库的AI融合进化与智领未来
  • 【Lucene】SimScorer
  • 【Spring AI】Advisors API—顾问(即拦截器)
  • 轨迹优化 | 基于边界中间值问题(BIVP)的路径平滑求解器(附C++/Python仿真)
  • 6.String、StringBuffer、StringBuilder区别及使用场景
  • C++学习笔记(六:数组)
  • AI Agent与MCP Service技术进展结构化分析报告(2025Q2)
  • 解决win10下Vmware虚拟机在笔记本睡眠唤醒后ssh连接不上的问题
  • 项目研发进度安排
  • 音视频学习(四十二):H264帧间压缩技术
  • 【时时三省】(C语言基础)使用字符指针变量和字符数组的比较
  • Electron使用WebAssembly实现CRC-16 原理校验
  • Java 二叉树
  • C++11之右值引用与移动语义(提高效率)重要
  • 【Linux指南】Linux系统 -权限全面解析
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • 病历数智化3分钟:AI重构医院数据价值链
  • AI+Python | 长时序植被遥感:动态·物候·变异归因·RSEI生态评估全流程[特殊字符]
  • C语言(20250718)
  • 车载电子电器架构 --- MCU信息安全相关措施
  • 基于springboot+vue+mysql的在线教育系统(源码+论文)
  • 深入详解随机森林在医学图像质量评估中的应用与实现细节
  • 网络编程Socket linux
  • 【Prometheus+Grafana篇】监控通过Keepalived实现的MySQL HA高可用架构
  • DeepSeek vs ChatGPT:谁更胜一筹?