企业级应用技术-ELK日志分析系统

目录

#1.1ELK平台介绍

  1.1.1ELK概述

  1.1.2Elasticsearch

  1.1.3Logstash

  1.1.4Kibana

#2.1部署ES群集

   2.1.1基本配置

   2.1.2安装Elasticsearch

   2.1.3安装Logstash

   2.1.4Filebeat

   2.1.5安装Kibana


1.1ELK平台介绍

1.1.1ELK概述

   ELK 是三个开源工具的缩写,分别是ElasticsearchLogstashKibana,三者组合形成了一套完整的日志收集、存储、分析与可视化解决方案,广泛应用于日志管理、数据分析、监控告警等场景。

1.1.2Elasticsearch

 (1)Elasticsearch概述

         Elasticsearch(简称 ES)是一款基于 Lucene 构建的分布式、高扩展、实时的全文搜索引擎和数据分析引擎,主要用于海量数据的存储、检索、聚合与分析,广泛应用于日志分析、全文检索、实时监控等场景。

(2)Elasticsearch核心概念

1. 索引(Index)

  • 定义:类似关系型数据库中的 “数据库” 或 “表”,是一组具有相似结构的文档集合(例如 “用户日志索引”“商品信息索引”)。

  • 特点

    • 索引名称需小写,且不能包含特殊字符;

    • 每个索引对应多个分片(分布式存储的基础);

    • 可通过 “索引模板” 预先定义字段映射规则(如字段类型、分词器等)。

2. 文档(Document)

  • 定义:索引中的单条数据,是 ES 的最小数据单元,以JSON 格式表示(类似数据库中的 “行”)。

  • 特点

    • 每个文档有唯一的_id(可手动指定或自动生成),用于标识文档;

    • 文档字段支持动态映射(无需预先定义结构,ES 会自动推断字段类型,如字符串、数字等)。

3. 类型(Type)

  • 定义:早期版本中用于区分索引内不同结构的文档(类似数据库中 “表” 里的 “子表”),但在 ES 7.x 后被移除

  • 原因:类型的存在会导致同一索引内不同类型文档的字段映射冲突,不符合分布式存储的设计逻辑,目前推荐一个索引只存储一种类型的文档。

4. 映射(Mapping)

  • 定义:类似数据库中的 “表结构”,用于定义文档中字段的类型(如textkeyworddate)、分词器、是否索引等元数据。

  • 分类

    • 动态映射:ES 自动推断字段类型(如输入数字则映射为long);

    • 静态映射:手动定义字段规则(更精准,避免自动映射出错,如将 “手机号” 指定为keyword类型以支持精确匹配)。

5. 分片(Shard)

  • 定义:索引的细分存储单元,一个索引会被拆分为多个分片(默认 5 个),分布式存储在不同节点上。

  • 作用

    • 实现水平扩展:通过增加分片(或节点)提升存储容量和查询并发能力;

    • 并行处理:查询时多个分片同时工作,提高检索效率。

  • 类型

    • 主分片(Primary Shard):数据的原始存储位置,不可修改数量(创建索引后固定);

    • 副本分片(Replica Shard):主分片的备份,用于故障恢复和分担查询压力,数量可动态调整。

6. 节点(Node)

  • 定义:运行 ES 实例的服务器,一个集群由多个节点组成,节点通过集群名称(默认elasticsearch)加入集群。

  • 角色分类

    • 主节点(Master Node):管理集群元数据(如索引创建、分片分配),不处理数据请求,建议单独部署以保证稳定性;

    • 数据节点(Data Node):存储数据(分片),负责数据的 CRUD(增删改查)和聚合分析,消耗 CPU、内存和磁盘资源;

    • 协调节点(Coordinating Node):接收客户端请求,分发任务到其他节点,汇总结果后返回(所有节点默认具备此功能);

    • ingest 节点:预处理数据(如日志清洗),类似 Logstash 的轻量版功能。

7. 集群(Cluster)

  • 定义:由多个节点组成的集合,共同管理全量数据,提供分布式服务。

  • 特点

    • 集群有唯一名称(默认elasticsearch),节点通过名称加入集群;

    • 集群会自动选举主节点,保证高可用;

    • 数据通过分片分布式存储,副本机制确保数据不丢失(如主分片故障,副本分片会升级为主分片)。

1.1.3Logstash

(1)Logstash介绍

      Logstash 是 Elastic Stack(ELK Stack)中的数据收集与处理引擎,主要用于对分散的、多源的日志或数据进行采集、转换、过滤,再输出到目标存储(如 Elasticsearch、数据库、文件等),是数据链路中的 “管道” 角色。

(2)Logstash工作的三个阶段

1. 输入阶段(Input)

  • 作用:从外部数据源收集数据,是 Logstash 的数据入口。

  • 支持的数据源:通过输入插件(Input Plugins)实现,覆盖多种场景:

    • 文件(如file插件读取服务器日志文件);

    • 网络流(如tcp/udp插件接收实时数据、kafka插件消费消息队列);

    • 数据库(如jdbc插件定时同步数据库数据);

    • 云服务、API 接口等。

  • 特点:可同时配置多个输入源,实现多渠道数据的集中采集。

2. 过滤阶段(Filter)

  • 作用:对输入的数据进行清洗、转换、 enrichment(补充信息),是数据处理的核心环节。

  • 常见操作:通过过滤插件(Filter Plugins)实现:

    • 解析格式(如json插件解析 JSON 字符串为结构化字段);

    • 字段处理(如mutate插件添加 / 删除 / 重命名字段、修改字段类型);

    • 过滤筛选(如grok插件从非结构化日志中提取关键信息,drop插件丢弃无效数据);

    • 补充信息(如geoip插件通过 IP 地址获取地理位置信息)。

  • 特点:可选阶段(若无需处理,数据可直接从输入流向输出),但通常是提升数据质量的关键。

3. 输出阶段(Output)

  • 作用:将处理后的结构化数据发送到目标存储或系统,是 Logstash 的数据出口。

  • 支持的目标:通过输出插件(Output Plugins)实现:

    • Elasticsearch(最常用,用于后续检索分析);

    • 存储系统(如file插件写入文件、s3插件上传至云存储);

    • 消息队列(如kafka插件转发数据);

    • 数据库(如jdbc插件写入 MySQL)等。

  • 特点:可配置多个输出目标,实现 “一次处理,多端分发”。

总结

三个阶段通过 “输入→过滤→输出” 的流水线模式,实现了从原始数据到高质量结构化数据的转化。例如:

   1.输入阶段:file插件读取服务器的 Nginx 日志文件;

   2.过滤阶段:grok插件提取日志中的 IP、URL、响应时间等字段,        geoip插件补充 IP 对应的地区;

   3.输出阶段:将处理后的结构化日志发送到 Elasticsearch,供后续          可视化分析。

    这种架构让 Logstash 能够灵活适配各种数据场景,成为数据链路中 “预处理中枢” 的核心工具。

1.1.4Kibana

(1)Kibana介绍

     Kibana 是 Elastic Stack(ELK Stack)中用于数据可视化与交互分析的开源平台,与 Elasticsearch 无缝集成,主要功能是将存储在 Elasticsearch 中的数据通过直观的图表、仪表盘等形式展示,帮助用户快速挖掘数据价值、监控业务状态或排查问题。

(2)Kibana主要功能

    1.数据检索与探索:通过 Elasticsearch 查询语法快速检索数据,实时浏览、筛选、导出数据,支持全文检索、字段过滤等操作,方便临时分析或故障排查。

    2.可视化与仪表盘:提供丰富图表(柱状图、折线图、地图等),可将数据转化为直观可视化效果;支持组合多图表为自定义仪表盘,集中展示核心指标(如系统性能、业务数据)。

    3.监控与告警:对关键指标(如错误率、响应时间)设置告警规则,触发阈值时通过邮件、Slack 等渠道通知,实现实时业务或系统监控。

   4.数据管理:管理 Elasticsearch 索引模式、字段映射等元数据,支持导入导出可视化成果,便于团队协作。

    5.进阶分析:集成机器学习功能检测异常数据,联动 APM 工具分析应用性能,深度挖掘数据价值。

2.1部署ES群集

主机名ip 地址操作系统软件包
elk1192.168.10.101Openeuler24Elasticsearch、logstash、kibana
elk2192.168.10.102Openeuler24Elasticsearch、filebeat、httpd
elk3192.168.10.103Openeuler24Elasticsearch

 2.1.1基本配置

  在两台ES主机上设置hosts文件

192.168.10.101        elk1 

192.168.10.102        elk2

192.168.10.103        elk3

 关闭所有节点的防火墙

systemctl stop firewalld

setenforce 0 

 创建es运行用户

[root@elk1 ~]#useradd es

 安装java环境

[root@elkl ~]# dnf -y install java-11
[root@elkl ~]# java -version
openjdk version "11.0.9.1" 2020-11-04 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing)

 为用户设置资源访问限制

[root@elkl ~]#  vim /etc/security/limits.conf
es soft nofile 65535
es hard nofile 65535
es soft nproc 65535
es hard nproc 65535
es soft memlock unlimited
es hard memlock unlimited
[root@elkl ~]#vim /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
[root@elkl ~]#sysctl -p

2.1.2 安装Elasticsearch

[root@elkl ~]#tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz
[root@elkl ~]# mv elasticsearch-7.10.0 /usr/local/elasticsearch
[root@elkl ~]# vim /etc/elasticsearch/config/jvm.options
-Xms2g
-Xmx2g

 更改Elasticsearch主配置文件

[root@elkl ~]# vim /usr/local/elasticsearch/config/elasticsearch.yml
cluster.name: kgc-elk-cluster  ##17 行,群集名称
node.name: elk1  ##23 行,本节点主机名,以 elk1 节点为例,其它节点请改成相对应的节点名称
path.data: /elk/data  ##33 行,数据文件路径
path.logs: /elk/logs  ##37 行,日志文件路径
bootstrap.memory_lock: false  ##43 行,锁定物理内存
network.host: 0.0.0.0  ##55 行,监听地址
http.port: 9200  ##59 行,监听端口
discovery.seed_hosts: ["elk1", "elk2", "elk3"]  ##68 行,群集中的主机列表
cluster.initial_master_nodes: ["elk1"]  ##72,master 主机名称,群集的初始化会将此节点选举为 master

 创建数据存放路径并授权

[root@elkl ~]# mkdir -p/elk/data
[root@elkl ~]#mkdir -p /elk/logs
[root@elkl ~]#chown -R es:es /elk/
[root@elkl ~]#chown -R es:es /usr/local/elasticsearch/

 启动es

[root@elkl ~]#su - es  #es 限制使用 root 启动,需要切换至 es
[es@elkl ~]$ nohup /usr/local/elasticsearch/bin/elasticsearch &[es@elkl ~]$ sudo netstat -anpt | grep 9200
tcp6        0      0 :::9200                 :::*                    LISTEN 

 查看节点信息

[root@localhost ~]# curl http://192.168.10.103:9200/_cat/nodes
192.168.10.101 12 65 0 0.03 0.01 0.00 cdhilmrstw * elk1
192.168.10.102 22 97 0 0.12 0.05 0.01 cdhilmrstw - elk2
192.168.10.103 20 91 0 0.01 0.02 0.00 cdhilmrstw - elk3

2.1.3 安装logstash

在logstash服务器上安装logstas

[root@losstash ~]# systemctl stop firewalld
[root@losstash ~]# setenforce 0[root@losstash ~]# yum -y install java-11
[root@losstash ~]# tar zxvf logstash-7.10.0-linux-x86_64.tar.gz
[root@losstash ~]# mv logstash-7.10.0 /usr/local/logstash
[root@losstash ~]# chmod -R 777 /usr/local/logstash/data/

 测试安装结果

[root@losstash ~]# /usr/local/logstash/bin/logstash -e 'input { stdin {} } output { stdout {codec => rubydebug} }'
nihao
{"@timestamp" => 2020-03-14T03:20:24.229Z,"@version" => "1","host" => "elk1","message" => "nihao "
}
[root@losstash ~]# /usr/local/logstash/bin/logstash -e 'input { stdin {} } output { stdout {codec => rubydebug} } output { elasticsearch { hosts => ["192.168.10.103:9200"] } }'
[root@nodel src]# chmod o+r /var/log/messages //让 Logstash 可以读取日志
[root@nodel src]# ll /var/log/messages
-rw----r--. 1 root root 2730043 Sep 11 14:21 /var/log/messages
[root@nodel src]# touch /usr/local/logstash/system.conf
[root@nodel src]# vim /usr/local/logstash/system.conf
input {file{path =>"/var/log/messages"type =>"system"start_position =>"beginning"}
}
output {elasticsearch {     192.168.10.103hosts => ["192.168.10.101:9200"]index =>"system-%{+YYYY.MM.dd}"}
}

运行logstash

[root@elk1 ~]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf

 2.1.4Filebeat

在产生日志的客户端服务器上安装filebeat(本案例为elk2主机)

[root@elk2 ~]# yum -y install httpd
[root@elk2 ~]# systemctl start httpd
[root@elk2 ~]# echo 'www.kgc.com' > /var/www/html/index.html
[root@elk2 ~]# curl 192.168.10.102
www.kgc.com
[root@elk2 ~]# cat /var/log/httpd/access_log
192.168.10.102 - - [28/Apr/2025:20:31:02 +0800] "GET / HTTP/1.1" 20012 "-" "curl/8.4.0"
[root@elk2 ~]# cat /var/log/httpd/error_log

安装filebeat

[root@elk2 ~]# tar zxvf filebeat-7.10.0-linux-x86_64.tar.gz
[root@elk2 ~]# mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat

 配置web01服务器filebeat的输出

[root@elk2 ~]# cd /usr/local/filebeat/
[root@elk2 filebeat]# mv filebeat.yml filebeat.yml.bak
[root@elk2 filebeat]# vim filebeat.ymlfilebeat.inputs:
- type: logpaths:- /var/log/httpd/access_log:set paste
output.logstash:hosts: ["192.168.10.102:5044"](2)启动 filebeat 服务
[root@elk2 ~]# /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml &

修改logstash的配置文件,使日志输出到elasticsearch 

[root@elkl ~]# vim /usr/local/logstash/config/beats.confinput {beats {port => "5044"codec => "json"}
}output{elasticsearch {hosts => ["192.168.10.103:9200"]index => "weblog-beat-%{+YYYY.MM.dd}"}
}

 运行logstash

[root@elk1 ~]#/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &

 2.1.5安装Kibana

在elk上安装Kibana

[root@elk1 ~]# tar zxvf kibana-7.10.0-linux-x86_64.tar.gz
[root@elk1 ~]# mv kibana-7.10.0-linux-x86_64 /usr/local/kibana

 修改Kibana主配置文件

[root@elkl opt]$ vim /usr/local/kibana/config/kibana.yml
server.port: 5601  ##2 行,监听端口
server.host: "0.0.0.0"  ##7 行,监听地址
elasticsearch.hosts: "http://192.168.10.103:9200"  ##28 行,ES 主机的 IP 地址
kibana.index: ".kibana"  ##32 行
[root@elkl ~]# chown -R es:es /usr/local/kibana/

 启动Kibana服务

[root@localhost ~]# su - es[es@elk1 ~]$ nohup /usr/local/kibana/bin/kibana &

  验证Kibana

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

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

相关文章

Shiro漏洞复现

Shiro简介 Apache Shiro是一种功能强大且易于使用的Java安全框架,它执行身份验证、授权、 加密和会话管理,可用于保护任何应用程序的安全。 Shiro提供了应用程序安全性API来执行以下方面: 1.身份验证:证明用户身份,通…

VSCode 中使用 Google Test(GTest)框架测试

VSCode 中使用 Google Test(GTest)框架在 VSCode 中对 C 代码进行测试的示例: 一、Unbutu x86使用gtest 环境配置 安装 GTest :在 Ubuntu 系统中,可以通过命令sudo apt-get install libgtest-dev安装 GTest 库。对于…

【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】

1.6 漫画数据库设计实战 - 从零开始设计高性能数据库 🎯 学习目标 掌握数据库表结构设计原则理解字段类型选择与优化学会雪花算法ID生成策略掌握索引设计与优化技巧了解分库分表设计方案 📖 故事开始 小明: “老王,我总是不知道怎么设计数…

OSPF虚拟链路术语一览:快速掌握网络路由

大家好,这里是G-LAB IT实验室。今天带大家了解一下OSPF的相关知识! 01 OSPF虚拟链路术语大全 网络架构中,OSPF(开放式最短路径优先)是一种重要的路由协议。通过其链路状态路由机制,OSPF能够有效维护和更新…

oracle常用的函数(一) 之 to_char、to_date

文章目录 前言to_char基本语法格式模型格式模型介绍无FM示例使用FM输出货币负数输出尖括号 将日期格式化将数字格式化为带有货币符号和千位分隔符的格式总结 to_date语法语法示例 戳这里,第二弹 → oracle常用的函数(二) 之 nvl、decode、l…

数据库服务器宕机的处理方法与实战策略

在当今数字化时代,数据库作为企业数据存储与管理的核心,承载着业务运行的关键信息。一旦数据库服务器宕机,将导致业务中断、数据丢失等严重后果,甚至可能给企业带来巨大的经济损失和声誉损害。因此,掌握一套系统、科学的数据库服务器宕机处理方法尤为重要。本文将从应急响…

如何hack边缘的kubelet修改Cgroup数值

之前做了一个VPA项目的需求,就是需要不重启的方式修改容器的Cgroup的值已达到垂直扩缩容的目的,项目中核心的思路如下 上游下发要VPA的结果的值写入到容器的Annotation里面Kubelet 感知到这个 annoation 的变化我们本地运行一个 Agent,里面运…

熟悉 PyCharm

界面 我们常用的就这个几个地方: 常用配置 调整字体大小 Ctrl 滚轮调整字体大小 插件推荐 Indent Rainbow 该插件的作用在于能够对于不同层级缩进的空格标注不同的颜色: 快捷键 快捷键的 pdf 下载链接: Windows 版:https:…

pytorch--模型训练的一般流程

文章目录 前言0、数据集准备1、数据集2、dataset3、model4、训练模型 前言 在pytorch中模型训练一般分为以下几个步骤: 0、数据集准备 1、数据集读取(dataset模块) 2、数据集转换为tensor(dataloader模块) 3、定义模型…

智能合同管理实战:基于区块链的电子签约技术实现

在数字经济时代,传统纸质合同签署方式已难以满足企业高效、安全、合规的业务需求。智能合同管理(Smart Contract Management)结合区块链技术,正在重塑电子签约流程,实现合同全生命周期的自动化、可追溯和防篡改。本文将深入探讨基于区块链的电子签约技术实现,涵盖核心架构…

设计模式精讲 Day 22:模板方法模式(Template Method Pattern)

【设计模式精讲 Day 22】模板方法模式(Template Method Pattern) 文章标签 设计模式, 模板方法模式, Java开发, 面向对象设计, 软件架构, 设计模式实战, Java应用开发 文章简述 模板方法模式是一种行为型设计模式,它通过定义一个算法的骨架…

如何在pytorch中使用tqdm:优雅实现训练进度监控

文章目录 为什么需要进度条?tqdm 简介基础用法示例深度学习中的实战应用1. 数据加载进度监控2. 训练循环增强版3. 验证阶段集成 高级技巧与最佳实践1. 自定义进度条样式2. 嵌套进度条(多任务)3. 分布式训练支持4. 与日志系统集成 性能优化建议…

Linux中的xxd命令详解

xxd 是一个 十六进制转储(hex dump)工具,通常用于将二进制文件转换为十六进制格式,或者反向转换(十六进制→二进制)。它是 vim 的一部分,但在大多数 Linux 系统(如 Ubuntu&#xff0…

磐维数据库panweidb3.1.0单节点多实例安装

0 说明 业务科室提单需要在某台主机上部署多个单机磐维数据库,用于业务测试。以下内容展示如何在单节点安装多个磐维数据库实例。 1 部署环境准备 1.1 IP 地址及端口 instipport实例1192.168.131.1717700实例2192.168.131.1727700 在131.17上分别安装两个实例&…

转录组分析流程(三):功能富集分析

我们的教程主要是以一个具体的例子作为线索,通过对公共数据库数据bulk-RNA-seq的挖掘,利用生物信息学分析来探索目标基因集作为某种疾病数据预后基因的潜能及其潜在分子机制,同时在单细胞水平分析(对scRNA-seq进行挖掘)预后基因的表达,了解细胞之间的通讯网络,以期为该疾病…

全面掌握 tkinter:Python GUI 编程的入门与实战指南

在自动化、工具开发、数据可视化等领域,图形用户界面(GUI)往往是提升用户体验的重要方式。作为 Python 官方内置的 GUI 库,tkinter 以其轻量、跨平台、易于学习的特性成为初学者和轻量级应用开发者首选。 本文将以深入浅出的方式…

TDH社区开发版安装教程

(注:本文章来源于星环官网安装手册) 后面放置了视频和安装手册连接 1、硬件及环境要求 Docker17及以上版本,支持Centos,Ubuntu等系统(注:这里我使用CentOS-7版本,最佳版本推荐为7.…

Linux基本命令篇 —— grep命令

grep是Linux/Unix系统中一个非常强大的文本搜索工具,它的名字来源于"Global Regular Expression Print"(全局正则表达式打印)。grep命令用于在文件中搜索包含特定模式的行,并将匹配的行打印出来。 目录 一、基本语法 二…

苍穹外卖问题系列之 苍穹外卖订单详情前端界面和网课给的不一样

问题 如图,我的前端界面和网课里面给的不一样,没有“申请退款”和一些其他的该有的东西。 原因分析 “合计”这一栏显示undefined说明我们的总金额没有输入进去。可以看看订单提交那块的代码,是否可以正确输出。还有就是订单详细界面展示这…

CppCon 2018 学习:EMULATING THE NINTENDO 3DS

我们来逐个分析一下这个 组件交互模型 和 仿真 & 序列化 的关系,特别是主线程(Main Thread)与其他系统组件之间的交互。 1. Main Thread — simple (basically memcpy) --> GPU Main Thread(主线程)负责游戏的…