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

企业级应用技术-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.dtcms.com/a/263672.html

相关文章:

  • java生成word文档
  • 11年考研作文真题大数据
  • 边缘人工智能与医疗AI融合发展路径:技术融合与应用前景(下)
  • SpringBoot计时一次请求耗时
  • mac python3.13 selenium安装使用
  • [特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!
  • IntelliJ IDEA 2025- 下载安装教程图文版详细教程(附激活码)
  • Python 库 包 nltk (Natural Language Toolkit)
  • 类加载生命周期与内存区域详解
  • 【FR801xH】富芮坤FR801xH之UART
  • npm list的使用方法详细介绍
  • 基于 Three.js 与 WebGL 的商场全景 VR 导航系统源码级解析
  • python 操作 hive
  • vue | 插件 | 移动文件的插件 —— move-file-cli 插件 的安装与使用
  • RabbitMQ - SpringAMQP及Work模型
  • C++仿函数与谓词深度解析:函数对象的艺术
  • android apk签名
  • 文件系统之配置网络参数
  • SiFli 52 UART的RX唤醒MCU怎么做
  • 飞算 JavaAI:我的编程强力助推引擎
  • Vue Vue-route (3)
  • Web性能测试常用指标(转自百度AI)
  • PHP爬虫实战指南:获取淘宝商品详情
  • 飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
  • 图神经网络(篇一)-GraphSage
  • CyclicBarrier(同步屏障)是什么?它的原理和用法是什么?
  • 新手向:从零开始Node.js超详细安装、配置与使用指南
  • Embeddings模型
  • 微服务介绍
  • Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#