#作者:张桐瑞

文章目录

  • 1 ELK 技术栈概述
    • 1.1ELK 核心组件详解
    • 1.2 ELK 工作流程
  • 2 ELK部署
    • 2.1 环境描述
      • 2.1.7 配置es集群

下篇:《ELK 统一日志分析系统部署与实践指南(下)》
链接: [https://blog.csdn.net/qq_40477248/article/details/151118627?spm=1001.2014.3001.5501)

1 ELK 技术栈概述

在当今复杂的 IT 架构中,日志数据分散在各类服务器、应用程序和网络设备中,传统的日志查看方式(如直接登录服务器查看本地日志文件)已无法满足高效运维、故障排查和业务分析的需求。ELK Stack(Elasticsearch、Logstash、Kibana、Beats)作为一套成熟的开源日志分析解决方案,能够实现日志的集中采集、过滤清洗、存储检索、可视化分析,帮助运维人员和开发人员快速定位问题、优化系统性能,为业务决策提供数据支撑。

1.1ELK 核心组件详解

1.1.1 Elasticsearch(ES)
Elasticsearch 是基于 Lucene 构建的分布式搜索引擎,同时具备强大的日志存储能力,其核心特点如下:

  1. 分布式架构:支持水平扩展,可通过增加节点实现存储容量和查询性能的提升,满足海量日志数据的存储需求。
  2. 实时检索:采用倒排索引技术,能够在秒级甚至毫秒级内完成对海量日志数据的查询,快速定位关键信息。
  3. 高可用性:通过分片(Shard)和副本(Replica)机制保障数据安全。分片将索引数据拆分存储在不同节点,副本则是分片的备份,当主分片所在节点故障时,副本可自动升级为主分片,确保服务不中断。
  4. 多数据类型支持:支持结构化、半结构化和非结构化数据,能够灵活适配不同格式的日志(如 Apache 访问日志、应用程序 JSON 日志等)。
    在 ELK 架构中,Elasticsearch 主要承担日志存储和日志检索两大核心任务,所有经过处理的日志最终都会写入 Elasticsearch,并通过其提供的 RESTful API 实现日志的查询操作。

1.1.2 Logstash
Logstash 是一款开源的日志数据处理工具,作为 ELK 架构中的 “数据管道”,其核心功能是对采集到的原始日志进行过滤、清洗、转换和丰富,具体能力包括:

  1. 多源数据接入:支持从 Beats、文件、数据库、消息队列(如 Kafka)等多种数据源采集日志数据。
  2. 灵活的过滤插件:提供丰富的过滤插件(如 Grok、Mutate、Date 等),可实现日志格式解析(如将非结构化的 Apache 日志解析为结构化字段)、数据清洗(如去除无用字段、修正错误数据)、字段新增(如添加时间戳、服务器标识)等操作。
  3. 多目标数据输出:可将处理后的日志数据输出到 Elasticsearch、文件、Kafka 等目标存储或中间件,满足不同场景下的数据流转需求。
    Logstash 在架构中起到 “承上启下” 的作用,一方面接收来自 Beats 等采集器的原始日志,另一方面将处理后的标准化日志传递给 Elasticsearch 进行存储,确保写入 Elasticsearch 的数据具备高质量和可用性。

1.1.3 Kibana
Kibana 是 ELK 架构中的可视化前端工具,为用户提供直观、交互性强的 Web UI 界面,主要功能包括:

  1. 日志数据探索:支持通过索引模式关联 Elasticsearch 中的日志数据,提供实时的日志浏览、筛选和搜索功能,用户可根据时间范围、字段条件快速定位所需日志。
  2. 多样化可视化图表:提供折线图、柱状图、饼图、热力图、地图等多种可视化组件,可基于日志数据生成业务指标(如接口访问量、错误率)、系统性能(如 CPU 使用率、内存占用)等维度的图表。
  3. 自定义仪表盘:支持将多个可视化图表组合成自定义仪表盘,实时展示关键业务和系统指标,方便运维人员和业务人员快速掌握系统运行状态。
  4. 高级分析功能:支持时序分析、聚合分析等高级功能,可对日志数据进行深度挖掘,如分析用户访问行为、排查系统性能瓶颈等。

1.1.4Beats
Beats 是基于 Golang 开发的轻量级日志采集工具集,具有资源占用低、部署灵活的特点,能够在各类服务器和设备上采集日志数据并发送给 Logstash 或 Elasticsearch。根据采集场景的不同,Beats 包含多个子产品:

  1. Filebeat:专注于采集应用程序日志,如 Web 服务器(Apache、Nginx)日志、应用程序(Java、Python)输出日志等。支持日志文件监听、断点续传(避免日志丢失)、多目标输出(可同时发送给 Logstash 和 Elasticsearch)等功能。
  2. Topbeat:现更名为 Metricbeat 的系统模块,主要用于采集系统级别的 metrics 数据,如 CPU 使用率、内存占用、磁盘 IO、网络流量等,帮助运维人员监控服务器硬件资源状态。
  3. Winlogbeat:专门针对 Windows 服务器设计,用于采集 Windows 事件日志,如系统日志、安全日志、应用程序日志等,解决 Windows 环境下的日志采集难题。
  4. Packetbeat:通过抓取网络数据包,采集网络设备(如路由器、交换机)和网络应用(如 HTTP、MySQL、Redis)的网络流量数据,可用于分析网络性能、排查网络故障、监控网络安全事件。

1.2 ELK 工作流程

ELK 架构的典型工作流程如下,各组件协同工作,实现日志从采集到分析的全流程管理:

  1. 日志采集:在目标服务器(如 Web 服务器、应用服务器、Windows 服务器)上部署对应的 Beats 工具(如 Filebeat、Winlogbeat),Beats 实时监听日志文件或系统事件,采集原始日志数据。
  2. 日志过滤与转换:Beats 将采集到的原始日志发送给 Logstash,Logstash 通过配置的过滤规则(如 Grok 模式)对日志进行解析、清洗和转换,将非结构化日志转换为结构化数据(如提取 Apache 日志中的客户端 IP、请求方法、响应状态码等字段)。
  3. 日志存储与检索:Logstash 将处理后的标准化日志数据发送给 Elasticsearch,Elasticsearch 将日志数据存储在分布式索引中,并建立倒排索引,支持高效的日志检索。
  4. 日志可视化与分析:Kibana 通过连接 Elasticsearch,读取索引中的日志数据,用户通过 Kibana 的 Web UI 界面进行日志浏览、搜索、筛选,并基于日志数据创建可视化图表和仪表盘,实现日志的可视化分析和监控。

在这里插入图片描述

2 ELK部署

2.1 环境描述

本次部署采用 4 台 Linux 服务器(CentOS 7 系统),各服务器的角色、IP 地址和安装组件如下表所示,确保所有服务器之间网络互通(关闭防火墙或开放相关端口):

服务器IP地址主机名角色安装组件
192.168.183.10es-master.linux.comElasticsearch 主节点JDK 15、Elasticsearch 7.6.2、Kibana 7.6.2、Logstash 7.6.2
192.168.183.11es-node01.linux.comElasticsearch 数据节点JDK 15、Elasticsearch 7.6.2
192.168.183.12es-node02.linux.comElasticsearch 数据节点JDK 15、Elasticsearch 7.6.2
192.168.183.13web_server.linux.comWeb 服务器 + 日志采集端HTTPD(Apache)、Filebeat 7.6.2

2.1.1 软件版本说明

为确保各组件兼容性,本次部署统一采用 Elastic Stack 7.6.2 版本,相关软件包如下:

  1. JDK:jdk-15.0.2_linux-x64_bin.tar.gz(Elasticsearch 7.6.2 推荐使用 JDK 11 及以上版本)
  2. Elasticsearch:elasticsearch-7.6.2-linux-x86_64.tar.gz
  3. Kibana:kibana-7.6.2-linux-x86_64.tar.gz
  4. Logstash:logstash-7.6.2.tar.gz
  5. Filebeat:filebeat-7.6.2-linux-x86_64.tar.gz
  6. HTTPD:httpd-2.4.6-97.el7.centos.x86_64(可通过 CentOS 官方 YUM 源安装)
# 关闭firewalld防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2.1.2 安装JDK
在 es-master 节点上传 JDK 安装包(jdk-15.0.2_linux-x64_bin.tar.gz),并解压到/usr/local目录:

[root@es-master ~]# tar xf jdk-15.0.2_linux-x64_bin.tar.gz -C /usr/local/
[root@es-master ~]# ls /usr/local/
bin  etc  games  include  jdk-15.0.2  lib  lib64  libexec  sbin  share  src

配置 JDK 环境变量:编辑/etc/profile文件,添加 JDK 路径:

[root@es-master ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk-15.0.2
export PATH=$PATH:$JAVA_HOME/bin

使环境变量生效,并验证 JDK 安装:

[root@es-master ~]# source /etc/profile
[root@es-master ~]# java -version
java version "15.0.2" 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
[root@es-master ~]# scp -r /usr/local/jdk-15.0.2/ root@192.168.140.11:/usr/local/
[root@es-master ~]# scp -r /usr/local/jdk-15.0.2/ root@192.168.140.12:/usr/local/
[root@es-master ~]# rsync -av /etc/profile root@192.168.140.11:/etc/profile
[root@es-master ~]# rsync -av /etc/profile root@192.168.140.12:/etc/profile

2.1.3 域名解析
为避免因 IP 地址变更导致服务不可用,所有服务器需配置主机名与 IP 地址的映射关系,操作如下:
在 es-master 节点编辑/etc/hosts文件:

[root@es-master ~]# vim /etc/hosts

在文件末尾添加以下内容(注意:文档中 IP 地址存在 192.168.183.x 和 192.168.140.x 两种,此处以 192.168.140.x 为例,实际部署需根据实际网络环境调整):

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.140.10    es-master.linux.com    es-master
192.168.140.11    es-node01.linux.com    es-node01
192.168.140.12    es-node02.linux.com    es-node02
192.168.140.13    web_server.linux.com   web_server

将配置好的/etc/hosts文件同步到其他节点,避免重复编辑:

[root@es-master ~]# scp /etc/hosts root@192.168.140.11:/etc/
[root@es-master ~]# scp /etc/hosts root@192.168.140.12:/etc/
[root@es-master ~]# scp /etc/hosts root@192.168.140.13:/etc/

2.1.4 三个ES节点系统参数优化
编辑/etc/security/limits.conf文件,设置全局文件描述符和进程数限制:

[root@es-master ~]# tail /etc/security/limits.conf 
* soft nofile 65536
* hard nofile 65536
* soft noproc 2048
* hard noproc 4096

编辑/etc/security/limits.d/20-nproc.conf文件,调整用户进程数限制(CentOS 7 默认存在此文件,需确保配置一致)

[root@es-master ~]# cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.*          soft    nproc     4096
root       soft    nproc     unlimited

编辑/etc/sysctl.conf文件,添加虚拟内存和文件系统参数:

[root@es-master ~]# tail -n 2 /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=655360

使内核参数生效

[root@es-master ~]# sysctl -p
vm.max_map_count = 262144
fs.file-max = 655360

2.1.5 创建elk用户
elasticsearch不允许以root用户启动,需要一个普通用户

[root@es-master ~]# ansible es -m user -a 'name=elk state=present'
[root@es-master ~]# ansible es -m shell -a 'id elk'

在这里插入图片描述

2.1.6 规划软件安装目录

[root@es-master ~]# mkdir -p /app/elk[root@es-master ~]# tar xf elasticsearch-7.6.2-linux-x86_64.tar.gz -C /app/elk/
[root@es-master ~]# tar xf kibana-7.6.2-linux-x86_64.tar.gz -C /app/elk/
[root@es-master ~]# tar xf logstash-7.6.2.tar.gz -C /app/elk/[root@es-master ~]# chown -R elk.elk /app/elk/[root@es-master ~]# ansible '~192.168.140.1[12]' -m shell -a 'mkdir -p /app/elk'
[root@es-master ~]# ansible '~192.168.140.1[12]' -m copy -a 'src=/app/elk/elasticsearch-7.6.2 dest=/app/elk owner=elk group=elk'

2.1.7 配置es集群

2.1.7.1节点类型说明:
Master node
1)负责集群自身的管理操作;例如创建索引、添加节点、删除节点
2)node.master: true

Data node
1)负责数据读写
2)建议实际部署时,使用高内存、高硬盘的服务器
3)node.data: true

Ingest node
1)预处理节点
2)负责数据预处理(解密、压缩、格式转换)

Client node
1)负责路由用户的操作请求
2)node.master: false
3)node.data: false

2.1.7.2 es-master.linux.com

[root@es-master ~]# su - elk
[elk@es-master ~]$ mkdir /app/elk/elasticsearch-7.6.2/data
[elk@es-master ~]$ cp /app/elk/elasticsearch-7.6.2/config/elasticsearch.yml /app/elk/elasticsearch-7.6.2/config/elasticsearch.yml.bak[elk@es-master ~]$ vim /app/elk/elasticsearch-7.6.2/config/elasticsearch.ymlcluster.name: es
node.name: es-master
path.data: /app/elk/elasticsearch-7.6.2/data/
path.logs: /app/elk/elasticsearch-7.6.2/logsnetwork.host: 192.168.140.10
http.port: 9200
transport.tcp.port: 9300    //集群内部通信用discovery.seed_hosts: ["192.168.140.10:9300", "192.168.140.11:9300", "192.168.140.12:9300" ]
cluster.initial_master_nodes: ["192.168.140.10:9300"]node.master: true
node.data: true
node.ingest: false
node.ml: false
cluster.remote.connect: falsehttp.cors.enabled: true
http.cors.allow-origin: true

2.1.7.3 es-node01.linux.com

[root@es-node01 ~]# su - elk
[elk@es-node01 ~]$ mkdir /app/elk/elasticsearch-7.6.2/datacluster.name: es
node.name: es-node01
path.data: /app/elk/elasticsearch-7.6.2/data
path.logs: /app/elk/elasticsearch-7.6.2/logs
network.host: 192.168.140.11
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.140.10:9300", "192.168.140.11:9300", "192.168.140.12:9300"]
cluster.initial_master_nodes: ["192.168.140.10:9300"]node.master: false
node.data: true
node.ingest: false
node.ml: false
cluster.remote.connect: falsehttp.cors.enabled: true
http.cors.allow-origin: "*"

2.1.7.4 es-node02.linux.com:

cluster.name: es
node.name: es-node02
path.data: /app/elk/elasticsearch-7.6.2/data
path.logs: /app/elk/elasticsearch-7.6.2/logs
network.host: 192.168.140.12
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.140.10:9300", "192.168.140.11:9300", "192.168.140.12:9300"]
cluster.initial_master_nodes: ["192.168.140.10:9300"]node.master: false
node.data: true
node.ingest: false
node.ml: false
cluster.remote.connect: falsehttp.cors.enabled: true
http.cors.allow-origin: "*"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95305.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95305.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95305.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上位机知识篇---poweshellcmd

要理解 PowerShell 和 CMD 的区别,我们可以先打个通俗的比方:CMD 像老式功能机,只能干打电话、发短信这些 “基础活”;而 PowerShell 像智能手机,不仅能做基础操作,还能装 APP、玩复杂功能,甚至…

利用 Python 绘制环形热力图

暑假伊始,Coldrain 参加了学校举办的数模集训,集训的过程中,遇到了需要展示 59 个特征与 15 个指标之间的相关性的情况,在常用的图表不大合适的情况下,学到了一些厉害的图表,但是似乎千篇一律都是用 R 语言…

【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜

Spring Cloud Sleuth作为微服务架构中的核心监控组件,通过轻量级的无侵入式跟踪机制,解决了分布式系统中请求路径复杂、问题定位困难的痛点。它自动为每个服务请求创建唯一的Trace ID,并为每个服务间调用生成Span ID,形成完整的调…

Linux(2)|入门的开始:Linux基本指令(2)

一、基本指令介绍 回顾上篇博客Linux(1)|入门的开始:Linux基本指令-CSDN博客,我们已经学习了mkdir目录的创建,touch普通文件的创建,光有创建肯定是不行的,接下来就介绍我们的删除指令 1、rmdir指令&&rm指令 …

sv中forever如何结束

在 SystemVerilog 中,forever 循环本身无法自我结束。它的设计初衷就是创建一个永不终止的循环。 因此,要结束一个 forever 循环,必须从外部强制中断它。主要有以下两种方法:1. 使用 disable 语句(最常用和推荐的方法&…

关于熵减 - 从法拉第圆盘到SEG

我们清楚的知道法拉第圆盘发电机的原理。当导线切割磁感线的时候,会产生电流,当然电流产生需要的是电动势,也就是,这里写 不写 ,避免和电场强度混淆。根据上面的分析,我们知道磁场强度特斯拉 的单位&#x…

【机器学习】实战:市场增长点分析挖掘项目

在电商行业激烈竞争的背景下,精准挖掘市场增长点是企业保持竞争力的关键。本文基于拜耳官方旗舰店驱虫剂市场分析项目,先对原文核心内容进行梳理与解读,再续写关键的竞争分析模块,形成完整的市场增长点挖掘闭环,为企业…

【Day 18】21.合并两个有序链表 2.两数相加

文章目录21.合并两个有序链表题目:思路:迭代代码实现(Go):2.两数相加题目:思路:代码实现(Go):21.合并两个有序链表 题目: 将两个升序链表合并为…

Vue 3 WebSocket通信方案:从原理到实践

Vue 3 WebSocket通信方案:从原理到实践 在现代Web应用开发中,实时通信已成为许多应用的核心需求。从即时聊天到实时数据更新,用户对应用响应速度的期望越来越高。本文将深入剖析一个Vue 3环境下的WebSocket通信方案,包括基础封装与…

Windows 电源管理和 Shutdown 命令详解

一、Windows 电源管理概述 Windows 操作系统通过其内置的电源管理框架,为用户提供了多种电源状态和配置选项,以在性能、能耗和数据安全之间找到最佳平衡点。以下是 Windows 系统中常见的电源状态及其特点: 1. 睡眠(Sleep&#xff…

Selenium WebUI 自动化“避坑”指南——从常用 API 到 10 大高频问题

目录 一、为什么 90% 的 UI 自动化脚本活不过 3 个月? 二、Selenium必会 API 速查 三、实践 四、10 大高频异常“症状 → 病因 → 处方” 五、可复用的工具函数 六、面试高频追问(附标准答案) 一、为什么 90% 的 UI 自动化脚本活不过 …

【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案

文章目录前言一、设计思路二、执行流程三、核心模块3.1 全局配置3.2 request封装3.2.1 request方法配置参数3.2.2 请求预处理3.2.3 核心请求流程3.3 刷新accessToken3.4 辅助方法四、api封装示例总结前言 现代前后端分离的模式中,一般都是采用token的方式实现API的…

基于单片机醉酒驾驶检测系统/酒精检测/防疲劳驾驶设计

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 该设计基于单片机开发,旨在通过实时检测驾驶员酒精浓度,预防酒后驾驶行为…

第6章:垃圾回收分析与调优

1. 垃圾回收基础 1.1 Java 垃圾回收概述 垃圾回收(Garbage Collection,GC)是 Java 虚拟机自动内存管理的核心机制。理解 GC 的工作原理对于 Java 应用性能调优至关重要。 1.1.1 垃圾回收的目标 自动内存管理:无需手动释放内存防止…

ROS2核心模块-动作通信、参数服务

动作通信 机器人导航到某个目标点,此过程需要一个节点A发布目标信息,然后一个节点B接收到请求并控制移动,最终响应目标达成状态信息。 乍一看,这好像是服务通信实现,因为需求中要A发送目标,B执行并返回结果&#xff0c…

word文档封面中文件编号等标题和内容无法对齐

问题 word文档封面中文件编号等标题和内容无法对齐,因为标题使用的是底纹不是文件内容。 解决办法 字体大小、行距两者配合就可以解决。

163起融资,梅卡曼德融资额夺冠,钉钉、百度智能云10周年,汉桑科技IPO| 2025年8月人工智能投融资观察 · 极新月报

“ 二级的活跃会传导到一级吗?”文|云舒&小鱼编辑 | 小白出品|极新8月重点关注:1、八月人工智能领域投融资事件163起,披露金额76.8亿人民币。2、亿级人民币以上金额的投资事件共20起 。3、八月人工智能领域发生一起…

微信小程序预览和分享文件

预览文档previewFile(val) { let item val.currentTarget.dataset.item wx.downloadFile({url: item.filePath, // 替换为实际的文件地址success: function (res) {let filePath ${wx.env.USER_DATA_PATH}/${item.fileName}|| res.tempFilePath //查看的文件名wx.openDocumen…

开源 C++ QT Widget 开发(十二)图表--环境监测表盘

文章的目的为了记录使用C 进行QT Widget 开发学习的经历。临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 相关链接: 开源 C QT Widget 开发(一)工程文件结构-CSDN博客 开源…

ARMv8架构01 - ARM64架构寄存器基础

一 、ARM64架构基础 1 ARMv8 A 架构介绍 ARMv8 - A是ARM公司发布的第一代支持64位处理器的指令集和架构。它在扩充64位寄存器的同时提供对上一代架构指令集的兼容,因而能同时提供运行 32位 和 64位应用程序的执行环境。 超大物理地址空间(large Physical…