当前位置: 首页 > 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.dtcms.com/a/304363.html

相关文章:

  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • TRACERT命令
  • 迅为RK3588开发板安卓GPIO调用-APP运行测试
  • HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
  • LeetCode Hot 100 搜索二维矩阵
  • 抽象工厂模式 Abastract Factory Pattern
  • 从本地 Docker 部署的 Dify 中导出知识库内容(1.6版本亲测有效)
  • 设计一个高可用、可拓展、监控报警系统,使用普罗米修斯和grafana,并给出go实现
  • 无穿戴动作捕捉技术:驱动历史活化、乐园叙事与教育沉浸的文旅利器
  • JVM知识点(2)
  • 从协议栈到ath12k_mac_op_tx的完整调用路径
  • Leetcode——41. 缺失的第一个正数
  • 前端学习日记(十五)
  • 深入理解图像插值:从原理到应用
  • 答题抽奖活动小程序技术复盘
  • unittest错误重跑与测试用例跳过机制
  • 操作系统-lecture2(操作系统结构)
  • Unity的GameObject.Instantiate的使用
  • 津发科技带你了解皮肤电信号中的SCL与SCR
  • SuperClaude Framework 使用指南
  • Ubuntu20.04子系统
  • RPG增容2.尝试使用MMC根据游戏难度自定义更改怪物的属性(二)
  • 基于STM32的PD抓包器
  • Vue3 状态管理新选择:Pinia 从入门到实战
  • Item24:若所有参数皆需类型转换,请为此采用non-member函数
  • [leetcode] 组合总和
  • 《林景媚与数据库神谕》
  • 【C++算法】82.BFS解决FloodFill算法_被围绕的区域
  • 驱动(platform)
  • 青少年软件编程图形化Scratch等级考试试卷(三级)2025年6月