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

ElasticStack技术栈概述及Elasticsearch8.2.2集群部署并更换JDK版本为openjdk-17

ElasticStack

一、引言

在当今数据驱动的时代,如何高效地收集、处理和分析日志及其他类型的数据,已成为企业构建可观测性和运维能力的重要课题。Elastic Stack(早期称为 ELK Stack)是一套由 Elastic 公司推出的开源技术栈,专为解决此类问题而设计。

二、ElasticStack 技术栈概述

1. 什么是 ElasticStack?

ElasticStack 是由 Elastic 公司开发的一系列开源工具组合,最初以 “ELK” 这个名称广为人知,代表了三个核心组件:

  • Elasticsearch:一个分布式的 RESTful 搜索引擎,提供快速的数据检索与聚合能力。
  • Logstash:用于采集、转换和传输各种来源的日志或事件数据。
  • Kibana:基于 Web 的可视化平台,用于探索 Elasticsearch 中的数据并创建交互式仪表板。

随着 Elastic 生态的发展,越来越多的组件被集成进来,如 Beats、APM、X-Pack、Cloud 等,使得 ElasticStack 成为了一个涵盖日志分析、指标监控、应用性能管理、安全信息与事件管理(SIEM)等多领域的综合性数据平台。


2. EFK 架构解析

EFK 是 ElasticStack 中一种常见的架构模式,特别适用于 容器化环境(如 Kubernetes)下的日志采集与分析。

核心组件:
  • Filebeat:轻量级日志采集器,负责从主机或容器中采集日志文件。
  • Elasticsearch:分布式搜索引擎,用于存储、索引和查询数据。
  • Kibana:可视化平台,用于浏览、搜索和展示 Elasticsearch 中的数据。
工作流程:
  1. Filebeat 收集本地或容器中的日志;
  2. 将日志发送至 Elasticsearch 进行索引与存储;
  3. 用户通过 Kibana 查询日志并创建可视化面板。

✅ 优点:部署简单、资源占用低,适合中小型日志采集与展示需求。


3. ELFK 架构

当需要对日志进行清洗、过滤、格式转换等预处理操作时,可以在 EFK 的基础上引入 Logstash,形成 ELFK 架构

核心组件:
组件作用
Elasticsearch数据存储与检索
Logstash日志预处理引擎,支持输入、过滤、输出插件
Filebeat轻量级日志采集器
Kibana数据可视化界面
工作流程:
  1. Filebeat 收集原始日志并发送到 Logstash;
  2. Logstash 对日志进行结构化处理(如字段提取、时间戳解析、字段重命名等);
  3. 处理后的日志写入 Elasticsearch;
  4. 最终通过 Kibana 实现数据可视化与交互式分析。

✅ 优势:增强日志的结构化程度,提升后续查询与分析效率。


4. ELFK 架构升级 —— 引入 Kafka

📌 升级目标:
  • 实现日志采集与处理之间的 异步解耦
  • 提升系统 吞吐能力与容错性
  • 支持 高并发日志写入
  • 避免因 Logstash 或 Elasticsearch 故障导致的 日志丢失

✅ ELFKK 架构详解
核心组件:
组件角色描述
Filebeat负责采集日志文件,作为数据源
Kafka分布式消息队列,用于缓冲和传递日志数据
Logstash消费 Kafka 中的消息,执行日志解析与转换
Elasticsearch存储结构化后的日志数据
Kibana可视化平台,用于展示与分析日志
工作流程:
  1. Filebeat 采集主机或容器日志;
  2. 日志被发送至 Kafka 的指定 Topic;
  3. Logstash 订阅该 Topic 并消费日志;
  4. Logstash 对日志进行清洗、结构化处理后写入 Elasticsearch;
  5. Kibana 用于数据展示与可视化分析。

🔧 架构优势
特性描述
异步解耦Kafka 作为中间层,实现采集与处理的松耦合
削峰填谷在流量高峰时缓存数据,避免下游服务崩溃
可扩展性强Kafka 和 Logstash 均支持横向扩展,适应大规模日志处理
容错能力强Kafka 支持持久化存储,即使处理节点宕机也不会丢失数据
数据复用灵活同一份日志可以被多个消费者同时使用,满足多种业务需求

🚀 适用场景
  • 日志量庞大的企业级系统(如电商平台、金融风控系统)
  • 对日志丢失容忍度极低的业务场景
  • 需要多系统共享日志流的场景(如日志分析 + 审计 + 告警)
  • Kubernetes 等云原生环境中需要弹性扩容的场景

三、ElasticSearch集群部署

1.节点IP划分

IP主机名
192.168.130.61es-node-01
192.168.130.62es-node-02
192.168.130.65es-node-03

2.配置主机hosts文件及实现免密

  • 配置主机hosts
sudo sh -c 'cat <<EOF >> /etc/hostsEOF'cat >> /etc/hosts <<EOF
192.168.130.61 es-node-01
192.168.130.62 es-node-02
192.168.130.65 es-node-03
EOF
  • 集群实现免密
ssh-copy-id root@192.168.130.61
ssh-copy-id root@192.168.130.62
ssh-copy-id root@192.168.130.65

两个步骤三台机器全部执行

3.下载Elasticsearch二进制软件包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.2-linux-x86_64.tar.gz

4.创建运行elasticsearch服务的普通用户和目录

  • 所有主机执行
useradd -u 2025  elasticsearch
mkdir -p /data/elasticsearch/{data,logs,softwares}
chown -R elasticsearch:elasticsearch /data/elasticsearch/

5.解压软件包

tar xvf /root/elasticsearch-8.2.2-linux-x86_64.tar.gz -C /data/elasticsearch/softwares/

6.修改配置文件

[root@es-node-01 softwares]# egrep -v '^#|^$' elasticsearch/config/elasticsearch.yml
cluster.name: Elasticsearch
node.name: es-node-01
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
transport.host: 0.0.0.0
transport.port: 9300
discovery.seed_hosts: ["192.168.130.61", "192.168.130.62", "192.168.130.65"]
cluster.initial_master_nodes: ["192.168.130.61", "192.168.130.62", "192.168.130.65"]
node.roles: ["master", "data", "ingest"]
xpack.security.enabled: false

7. 所有节点更改JDK环境

7.1.下载jdk
https://download.java.net/openjdk/jdk17.0.0.1/ri/openjdk-17.0.0.1+2_linux-x64_bin.tar.gz
7.2.解压jdk
tar xf openjdk-17.0.0.1+2_linux-x64_bin.tar.gz -C /usr/lib/jvm/jdk-17.0.0.1/
7.3.配置jdk文件变量
cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.0.1
export PATH=$JAVA_HOME/bin:$PATH

8. 所有节点编写systemctl管理

[root@es-node-01 softwares]# systemctl cat es
# /usr/lib/systemd/system/es.service
[Unit]
Description=Elasticsearch 8.x Daemon
Documentation=https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
After=network.target
[Service]
Type=forking
User=elasticsearch
Group=elasticsearch# 指定使用哪个 JDK(根据你实际安装路径修改)
Environment="JAVA_HOME=/usr/lib/jvm/jdk-17.0.0.1"# Elasticsearch 安装目录
WorkingDirectory=/data/elasticsearch/softwares/elasticsearch# 启动命令
ExecStart=/data/elasticsearch/softwares/elasticsearch/bin/elasticsearch -d# 停止命令(可选)
ExecStop=/bin/kill -SIGTERM # 重启策略
Restart=always# 系统资源限制
LimitNOFILE=131072
LimitNPROC=8192
LimitMEMLOCK=infinity[Install]
WantedBy=multi-user.target

9.同步只其他节点并修改

9.1将二进制包同步到其他节点
 rsync -avz /data/elasticsearch root@192.168.130.62:/datarsync -avz /data/elasticsearch root@192.168.130.65:/data
9.2.修改配置
  • es-node-02
 sed 's/es-node-01/es-node-02/' /data/elasticsearch/softwares/elasticsearch/config/elasticsearch.yml
  • es-node-03
 sed 's/es-node-01/es-node-03/' /data/elasticsearch/softwares/elasticsearch/config/elasticsearch.yml

10.更换 Elasticsearch 集群中的 JDK 版本

10.1.修改elasticsearch-env文件
cd /data/elasticsearch/softwares/elasticsearch/bin/
vim elasticsearch-env
##在第二行插入  
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.0.1
##将ES_JAVA_HOM修改为JAVA_HOM,JAVA_TYPE="system JAVA_HOM"
:%s/ES_JAVA_HOM/JAVA_HOM/g

11.启动集群并检查

  • 所有节点执行
systemctl daemon-reload
systemctl enable --now es.service
systemctl status es.service
  • 查看集群状态
[root@es-node-01 bin]# curl 192.168.130.61:9200/_cluster/health 2>/dev/null |jq
{"cluster_name": "Elasticsearch","status": "green","timed_out": false,"number_of_nodes": 3,"number_of_data_nodes": 3,"active_primary_shards": 2,"active_shards": 4,"relocating_shards": 0,"initializing_shards": 0,"unassigned_shards": 0,"delayed_unassigned_shards": 0,"number_of_pending_tasks": 0,"number_of_in_flight_fetch": 0,"task_max_waiting_in_queue_millis": 0,"active_shards_percent_as_number": 100
}
[root@es-node-01 bin]# curl 192.168.130.61:9200/_cat/nodes
192.168.130.65 18 31 0 0.00 0.00 0.00 dim - es-node-03
192.168.130.62 57 36 1 0.11 0.11 0.08 dim - es-node-02
192.168.130.61 56 89 0 0.00 0.01 0.05 dim * es-node-01
[root@es-node-01 bin]#
http://www.lryc.cn/news/603741.html

相关文章:

  • sqlite3---维护命令、回调函数
  • 【机器学习深度学习】分布式训练的核心技术全解:数据并行、模型并行、流水线并行与3D混合并行
  • 基于最小二乘支持向量机(LSSVM)的气象预测
  • css 二维变换之详说
  • 引领汽车加速向具身智能进化,吉利携阶跃星辰参展WAIC 2025
  • 考古学家 - 华为OD统一考试(JavaScript 题解)
  • STM32寄存器中的缩写
  • 【HTML】浅谈 script 标签的 defer 和 async
  • 数据库4.0
  • 健壮性篇(一):优雅地“拥抱”错误:构建一个可预测的错误处理边界
  • vue-计算属性
  • Android Slices:让应用功能在系统级交互中触手可及
  • FPGA数码管驱动模块
  • windows软件ARM64和AMD64(x64)区别,如何查看电脑支持哪种
  • 沪铝本周想法
  • C++ 模板补充
  • 网工知识——OSPF摘要知识
  • 重生之我在暑假学习微服务第四天《Docker-下篇》
  • 《林景媚与时间守护者》
  • 博途SCL: Input、Output、Static、Temp、Constant、InOut 的详细介绍及案例
  • 实现视频实时马赛克
  • DevOps 详解
  • PHP入门:从0到1开启Web开发之旅
  • Apache Ignite 的对等类加载(Peer Class Loading, P2P Class Loading)机制
  • Apache服务器指南
  • 《Spring Cloud Gateway 深度剖析:从核心原理到企业级实战》
  • SpringCloud之Gateway
  • SpringBoot之起步依赖
  • 【变更性别】
  • 【Linux篇】补充:消息队列和systemV信号量