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

【面试题】技术场景 5、日志采集ELK

日志采集的重要性与采集方式

  • 重要性:在项目开发、测试及生产环境中,日志是定位系统问题的关键手段,对系统维护与问题排查至关重要。
  • 采集方式
    • 常规采集:按天保存日志文件至专门目录,文件名包含项目名、端口及日期,操作简单。
    • ELK 采集:由 Elasticsearch(es)、Logstash、Kibana 三个组件协同工作,在项目中应用广泛但相对复杂。

在这里插入图片描述

ELK 组件及工作流程

  • Logstash:部署于项目中,从 Logback 框架收集系统日志数据,其配置在 resource 下的日志框架配置文件中,可设置日志级别与服务地址,收集并格式化数据后传输给 es。
  • Elasticsearch:用于存储、搜索和分析日志数据,通常按日期存储。
  • Kibana:可视化平台,能以图表展示日志信息,可搜索分析日志,如按端口、日志级别、时间戳等字段搜索,还能区分 error 和 info 等不同类型日志数据。

在实际项目中,ELK 日志采集系统可能会遇到以下问题及对应的解决方法:

  1. Logstash 性能瓶颈问题
    • 问题表现:随着日志数据量的快速增长,Logstash 可能出现处理速度跟不上数据产生速度的情况,导致数据积压、传输延迟。例如在高并发的大型分布式系统中,大量的日志信息同时涌入 Logstash,使其 CPU、内存资源占用过高,影响数据收集和转发效率。
    • 解决方法:可以对 Logstash 进行配置优化,如增加工作线程数、调整批处理大小等,合理利用系统资源来提升处理能力。同时,考虑采用分布式架构部署多个 Logstash 实例,实现负载均衡,分摊数据处理压力。还可以结合消息队列(如 Kafka),让 Logstash 从消息队列中获取数据,利用消息队列的缓冲和异步处理机制,缓解数据洪峰对 Logstash 的冲击。
  2. Elasticsearch 存储与查询性能问题
    • 问题表现:大量的日志数据存储会使 Elasticsearch 集群的磁盘空间紧张,并且查询响应时间可能变长。尤其是在进行复杂查询或跨长时间范围查询时,可能会出现查询超时或性能急剧下降的情况。
    • 解决方法:优化 Elasticsearch 的索引设置,根据日志数据的特点合理选择索引字段、设置分片数量和副本数量等。定期对 Elasticsearch 进行数据清理和归档,删除过期或不再需要的日志数据,释放磁盘空间。对于频繁查询的字段,可以设置合理的缓存策略,提高查询性能。也可以考虑对 Elasticsearch 集群进行横向扩展,增加节点数量,提升整体的存储和计算能力。
  3. Kibana 可视化与数据展示问题
    • 问题表现:在展示大规模日志数据时,Kibana 可能出现图表加载缓慢、界面卡顿等现象,影响用户对数据的分析和理解。例如在同时展示多个维度的日志数据图表或进行实时数据更新时,浏览器可能会出现内存占用过高甚至崩溃的情况。
    • 解决方法:在 Kibana 端优化图表配置,减少不必要的数据展示维度和细节,避免一次性加载过多数据。可以采用数据抽样的方式,在不影响整体数据分析结果的前提下,降低数据展示的粒度。同时,升级硬件设备,提高浏览器的性能和内存资源,确保能够流畅地展示 Kibana 可视化界面。还可以对 Kibana 进行缓存设置,减少重复数据的加载和渲染。

http://www.kler.cn/a/504475.html

相关文章:

  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
  • STORM:从多时间点2D图像中快速重建动态3D场景的技术突破
  • C#使用OpenTK绘制3D可拖动旋转图形三棱锥
  • 《机器学习》——贝叶斯算法
  • MAC AndroidStudio模拟器无网络
  • Elasticsearch入门学习
  • ZCC1923替代BOS1921Piezo Haptic Driver with Digital Front End
  • C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。
  • LeetCode100之单词搜索(79)--Java
  • UML系列之Rational Rose笔记四:时序图(顺序图_序列图)
  • docker mysql5.7如何设置不区分大小写
  • Docker 拉取镜像速度慢,容易失败?
  • threejs中的相机与物体
  • 【开源免费】基于SpringBoot+Vue.JS公司日常考勤系统(JAVA毕业设计)
  • 【Git版本控制器--2】Git的分支管理
  • Java中对list数据进行手动分页(可直接复用版)
  • Cyberchef开发operation操作之-增加LEEF解析操作
  • 前端实时显示当前在线人数的实现
  • 淘宝 URL 采集商品详情数据的常见方法
  • 如何最小改变架构,快速实现流控的?(第34讲)
  • 第 6 课 Python函数和模块
  • 高性能现代PHP全栈框架 Spiral
  • 大学无人机低空经济专业建设技术详解
  • iOS layer.mask 的原理
  • AI自动化编程:天使还是恶魔?
  • RAG实战_01代码生成_02智能检索