毕业设计:《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》

前言

《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》,这是我在本科阶段的毕业设计,通过引入 Prometheus 和 ELK 架构实现企业对指标与日志的全方位监控。并且基于云原生,使用容器化持续集成部署的开发方式,通过 SpringBoot 和 Vue 的前后端分离技术,开发出基础平台监管系统,实现对所有基础平台的全面监控与可视化管理,让每一个监控项精确跟踪,每一个流程责任到人,每一个问题闭环处理。

首先我先整体概述一下我的业务,简单来讲就是,利用 Prometheus 实现对组件的指标监控(比如对服务器的使用率监控,超过了一个值就报警),利用 ELK 实现对日志的监控(比如监控 Java 的一个项目,监控到一个日志出现 ERROR 标签,就报警),报警会通知到对应的负责人,平台也会跟踪处理情况,以及其他一些辅助功能。

为什么选择这样一个题目?其实也是一个巧合,当时我也不知道做什么,老师直接给了我们组很多题目,让我们自己选,我选择了其中一个,题目是什么什么基础平台监控系统。当时由于我的知识匮乏,我认为这个监控是指对公司业务的监控,也就是类似于一个 OA 系统。但其实老师指的是对支撑公司的网络平台的各个组件的监控,监控他们的各项指标,像是 CPU 占用率这种,下图就是老师想让我完成的一个大概内容。我对这个内容是完全没有涉及,只能从零开始学。
在这里插入图片描述

毕业论文必须要有创新点,我的创新点就是不仅在平台中实现了指标监控,还加入了日志监控。市面上有很多做这种现成指标监控的平台,做日志监控平台的几乎没有,可能都是自己搭,具体我也不清楚为什么,可能指标更为关键,更直接可以看到问题所在,而日志,可能更多的作用是在报警之后,来 debug 的。当然我这个只是毕业设计,其实主要就是实现一个业务,体现工作量,并不具备什么实用价值。

这篇论文包括毕业设计,我在当时是拿了优秀毕业设计,当然我知道我的本科并不好,和其他好学校的人差距还是很大,但这个毕设我觉得还是有一点意义吧。这个意义不是说能解决业界的某些问题,我完全没有这个能力。而是说,我觉得下面 Web 架构、指标监控架构、日志监控架构我觉得可能能对一些初学这提供一些帮助。因为这些内容网络上并没有直接现成的东西,都是通过我自己的知识储备、自己的试错、网络上各种文章,最后做出来的一套东西。所有的源码都在 Github 上,结构、注释非常清晰,我希望这会对大家有些帮助。如果对大家有帮助,可以帮我点个 Star 支持一下我。

需求概述

需求可以分为以下几点:

  1. 信息采集:需要满足对支撑平台的指标、日志的采集,包括应用程序、数据库、中间件、主机等。并且要满足可以持续、实时的采集各类信息,以及对信息进行适当的清洗,提高其质量与准确性。
  2. 监控报警:可以根据监控需求自定义监控规则,以及告警的方式,包括第三方、邮件、短信等。并且需要实时的监控,及时掌握系统的运行状态、性能情况等。以及事后的信息查阅,便于之后的分析。
  3. 日常管理:包括对数据源的添加、报警规则的添加、报警后处理的跟踪等,一切都责任到人,进行全方位管理。以及对人员权限、任务分配、知识库等内容的实现。
  4. 综合分析:通过图表、报表的形式,将数据转化为可视化的形式,定期推送给运维人员,便于之后更加全面、准确的分析系统运行情况。

系统架构

Web架构设计

在 Web 方面,使用前后端分离的方式。在前端方面使用了 Vue 进行交互的实现,利用其可以与 HTML 中字段进行双向绑定的特性,可以快速完成数据渲染的工作。并且利用它组件化的思想,可以减轻许多重复 HTML 的编写,提升代码的复用性,以及可读性。

在前端 UI 上使用了 Metronic,它是基于 Bootstrap 的网页界面框架,也在其基础上提供了一些扩展和增强功能,如布局管理、用户界面元素、图表、表格、表单和自定义样式等等。使用 Metronic 可以更快地创建现代化、美观的 Web 页面,并提供了丰富的工具和插件进行定制,减少了开发人员的工作量,增加了项目的可维护性。并且依然保留了 Bootstrap 的特性,做到了响应式开发的效果。

使用 Nginx 作为前端服务器,一方面可以更符合前后端分离的思想,另一方面 Nginx 底层利用 I/O 多路复用和多进程的方式,可以接受高并发的请求,速度也更快。而且配置简单,本身就是由很多模块组成的,扩展性强。比起 Tomcat,Nginx 是 HTTP Server,而 Tomcat 是 Application Server。HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,客户端通过 HTTP Server 访问服务器上存储的资源。Application Server 是一个应用服务器,它首先需要支持开发语言的运行环境,以及需要支持一些其它的规范,例如类库、安全方面的特性,所以会更加笨重,从而使用 Nginx,进行一定的解耦,在性能上进一步的提升。

在后端使用了传统的 SpringBoot 技术,数据库则使用了 MySQL,来进行关系性数据的存储。使用了 MinIO 来实现对象存储。以及使用了 Redis,主要用来存储 JSessionID,利用 Redis 内存存储的特性,可以进行高速读写。对于传统的方式,如果需要不同服务器上 Session 数据共享,需要互相进行复制。而 Redis 这种方式可以让 Session 集中存储。需要说明的是这里 Redis 不仅仅存的是 JSessionID,还有 JSessionID 对应的 Session 中的数据。这样当客户端请求服务器,产生 Session 以及 SeesionID,就会把它存到 Redis 中,下次直接从 Redis 中取就行。对于该 SpringBoot 项目,利用了 SpringSession 来简化操作,它非常好的与Redis进行了集成。这样做不仅解耦了 Session 系统,便于未来系统或者微服务的扩展,而且利用 Redis 可以方便设置 Session 过期时间的特性,可以实现用户的持久化登录。

最后利用 Github,Jenkins,Docker 的方式,实现了自动化部署。每次当完成后端代码,将源码托管于 Github 上,使用 Git 进行版本控制和合并代码。在 Jenkins 中创建一个 Pipeline 项目,并配置与 Github 的 Webhook 集成,当代码仓库发生变化时触发 Jenkins Pipeline 任务。而在 Pipeline 任务中,会使用 Docker 构建一个 Docker 镜像,并发布到 Linux 服务器中进行部署。如图4-2展示了 Jenkins 上部署的情况。
该项目利用以上技术实现前后端分离的部署,并且利用 Github、Jenkins、Docker 这三者实现了 CI/CD(Continuous Integration/Continuous Deployment)的流程,持续集成与持续部署。这种技术方案在提高开发效率和资源利用率方面具有明显优势。

指标监控架构设计

对于指标监控,首先需要进行对数据的采集,需要从不同来源收集数据,例如服务器、容器、网络设备等。这里我采用了 Prometheus 来完成这项工作,它最大的优势在于采用了 Pull 模式,比起传统的 Push 模式,它更加具有可控性,请求将由 Prometheus 发起,可以控制采集的频率和数据,避免了系统由于瞬时高峰负载而崩溃的风险;更加轻量,对于被监控的资源消耗更少;更加灵活,丰富的 Exporter,也就是埋在目标客户端的 Agent,可以方便的扩展和添加新的监控目标(特别的,如果要监控 SpringBoot 需结合 Micrometer 使用);更加安全,由于Prometheus不需要向被监控主机开放端口,有安全保障;而且采用了 Pull 模式,监控的数据在接收端暂存,可以更好地避免数据在传输过程中的丢失;易于查询,Prometheus 提供了强大的查询语言 PromQL,对数据可以进行高效处理。

在服务发现上使用了 Consul 来进行 Prometheus 和 Exporter 的连接。像传统的 Nagias,是基于 Push 模式的,这意味着必须在监控对象的每一个节点上安装相应的 Agent 程序,并且通过配置指向中心的 Nagias 服务,这样的话,受监控对象与中心监控服务器之间是一个强耦合的关系。对于一组比较少的服务器,这种手动更改配置信息的方式是非常方便的。但如果监控目标多了起来,我们需要频繁对配置文件进行修改,无疑给运维人员带来很大的负担,也大大增加了出错的可能性。为此,Prometheus 可以搭配 Consul 来实现服务发现,这样就可以摆脱手工的方式,由 Consul 动态进行自动发现与自动更新。

在数据持久化上,选择了目前性能最好的 InfluxDB。Prometheus 为了更好的监控性能,默认使用本地文件进行存储,但是这种方式的缺点是无法持久化,一旦重启就会丢失所有数据。所以需要接入第三方 TSDB 数据库。InfluxDB 是一个用 Go 语言编写的时序数据库,与传统关系型数据库相比,它对时序数据场景有专门的优化,有更加优异的性能。

在可视化上,选择了 Grafana 来实现。Grafana 提供了丰富的图表类型和设置选项,基于此用户可以结合 PromQL,快速创建自定义、交互性强的可视化图表。并且 Grafana 是开源的,拥有广泛的用户和开发者社区,提供丰富的文档、教程和模版,解决问题和分享经验非常方便。

在报警上选用了 Alertmanager,它的功能非常强大,主要有以下几个方面,首先它可以做到告警聚合,可以对相同或相似的告警进行聚合,只保留最新一个告警条目,以减少重复告警的数量,提高操作人员处理告警的效率;告警合并,当多个告警条目描述相同的问题时,可以将它们合并为一个包含所有相关信息的告警条目;可以同时将告警输出到多个目的地,例如 SMTP 电子邮件、Webhook 回调地址等;可以根据用户定义的路由规则来路由告警条目,选择合适的输出目的地。可以控制告警的级别、到期时间、过期时间等,达到合理控制告警信息的输出频率和持续时间的目的。这些功能使得 Alertmanager 可以简化运维人员处理告警的工作流程,最大限度地减少无用信息并确保关键告警的及时传,这些都是提高监控系统运用效果的重要保障。

以上提到的技术是现代分布式系统架构中常用的监控、告警、配置管理和数据可视化工具,它们相互配合,实现了对系统的全方位监控和管理,帮助用户更好地理解分布式系统的运行状态和问题,并及时处理这些问题,保证分布式系统的高可用性和可靠性。

日志监控架构设计

在本架构中,Filebeat 充当了采集器的角色。它本身隶属于 Beats 家族,Beats 还包括Metricbeat、Packetbeat 等,Filebeat 则是专门用来收集文本的组件。它能够实时收集服务器及应用程序的日志数据,并将其转发至Kafka。这其中 Logstash 本身也可以采集数据,但是相对于 Logstash 比较庞大的代码库和消耗较多的资源,Filebeat代码库较小,占用系统资源也相对较少,更加轻量,更适合部署在较小的环境中。并且 Filebeat 使用 Go 语言编写,对 CPU 和 I/O 资源的利用率更高,能够快速高效地扫描和采集大量的日志数据,并将其传输到下游处理器。

Filebeat 搜集的数据会传送到 Kafka,Kafka 是一种高吞吐量的消息队列系统,能够缓解数据传输过程中的高频流量并保证数据的可靠传输。在这里,Kafka 接收 Filebeat 采集的本地日志文件,最主要提供了缓解流量峰值的功能,Kafka 通过将数据缓存在其集群中,然后进行批量写入到下游系统的方式,能够有效地缓解突发的高频流量带来的压力。并且 Kafka 具有很高的可靠性和容错性,以及可以解耦数据源和消费者,增强系统的可维护性。

Logstash 是一款用于数据收集、分析和处理的开源工具。这里 Logstash 消费来自 Kafka 的消息,对其进行解析、过滤、转换等格式化处理,并将处理过的事件输出到 Elasticsearch 中进行存储,以便之后进行搜索。

接着,Elasticsearch 作为搜索引擎和数据分析平台来处理过滤后的日志数据,并将其存储在其中。Elasticsearch 是一个基于实时搜索的分布式搜索引擎,能够实时地、快速地查询数据。这使得它作为日志存储引擎时,能够提供实时的日志响应和查询功能,让用户快速获得实时的监控数据。

最后,Kibana 提供了可视化界面,允许用户以直观、易于理解的方式查询、分析和展示数据。用户可以使用 Kibana 自定义或从官方社区中配置各种图表、可视化和仪表板来监控各种日志,以便检测和解决问题。

除了以上的技术组件外,通过 ElastAlert 还提供了一个强大的预警和通知服务。它可以根据事先定义的规则和条件,自动检测异常和问题,并及时通知相关人员。这大大缩短了故障排查和响应的时间。在此基础上再一次引入了Alertmanager,但与指标监控架构中不同的的是,这里仅作为一个转发的功能,目的是能与指标监控传回的 JSON 数据格式保持一致。

以上提到的技术是现代日志采集、处理、存储、搜索和可视化的主要工具,它们相互协作,实现了对大量日志数据的高效管理和分析,帮助用户更快地理解分布式环境的运行状况,提高分布式系统的可用性和稳定性。

功能说明

在这里插入图片描述

  1. 登录注册功能
    在登录功能上不仅仅使用传统的账号密码登录,还接入了 QQ 和钉钉来实现第三方登录。不仅如此,也利用 Vue 的局部刷新和双向绑定实现很好的交互,当账号或者密码错误时,会有提示字符出现。并且还使用了 reCAPTCHA 进行人类识别,比起传统验证码的方式,可以为用户提供更好的体验效果。 如果忘记密码可以跳到忘记密码页面,通过阿里云接入的手机号短信验证的方式来进行重制密码。在这里插入图片描述

  2. 首页数据展示功能
    这是用户登录后会首先跳到的页面,展示了已完成巡检数、普通告警数等内容,为运维人员提供宏观的数据展示。
    在这里插入图片描述

  3. 指标监控功能
    在该页面用户可以对监控对象进行增删改查,包括了名称、服务器地址等内容等,并且可以进行增删改查,以及导出功能。
    在这里插入图片描述
    点击图表,可以进入查看集成的 Grafana 图表。
    在这里插入图片描述
    进入对应监控对象,可以查看具体规则的信息,以及对该对象的监控规则进行增删改查。
    下方还有该对象的报警信息,可以查看报警时间、名称、内容等,以及可以下载对应人员解决后上传的工单。
    在这里插入图片描述

  4. 日志监控功能
    在该页面用户可以对监控对象进行增删改查,包括了名称、服务器地址等,并且可以进行增删改查,以及导出功能。点击图表,可以进入查看集成的 Kibana 图表。进入对应监控对象,可以查看具体规则的信息,以及对该对象的监控规则进行增删改查。下方还有该对象的报警信息,可以查看报警时间、名称、内容等,以及可以下载对应人员解决后上传的工单。

  5. 文件监控功能
    用户可以查看各个监控文件,以及对其增删改查。添加后定期后端会进行钉钉通知,提醒你需确认文件是否正常,是否备份成功。
    在这里插入图片描述

  6. 巡检计划功能
    在该页面管理员可以为特定人员制定巡检计划,并上传巡检单。
    在这里插入图片描述
    对应人员可以查看自己的巡检计划,并且有日历进行可视化。在规定时间上传自己的巡检表。
    在这里插入图片描述
    在这里插入图片描述

  7. 报警工单功能
    当有自己负责的报警规则报警时,会自动添加到该页面,对应运维人员需解决后提交工单,报告问题。
    在这里插入图片描述

  8. 报表功能
    运维人员可以下载对应的周报,它们会在规定时间自动生成。
    在这里插入图片描述
    在这里插入图片描述

  9. 知识库功能
    运维人员可以上传资料,供所有人下载学习。
    在这里插入图片描述

  10. 展示看板功能
    利用Echarts 构建了大屏展示,展示了已完成巡检数、普通告警数等内容,为运维人员提供宏观的数据展示。
    在这里插入图片描述

  11. 其它辅助功能
    用户可以去帮助中心查看一些开发内容,可以跳到 Github 代码仓库,可以查看 Swagger 接口文档。
    在这里插入图片描述

  12. 人员管理功能
    运维人员自己可以查看修改自己的个别信息。而对于超级管理员,他会有更大的权限,可以对所有运维人员进行增删改查。
    在这里插入图片描述

  13. 服务器检查功能
    后端会定期对服务器各个组件进行 Socket 测试连接,如有问题会钉钉通知。
    在这里插入图片描述
    并且提供了拓扑图进行可视化展示。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源模型应用落地-CodeQwen模型小试-SQL专家测试(二)

一、前言 代码专家模型是基于人工智能的先进技术,它能够自动分析和理解大量的代码库,并从中学习常见的编码模式和最佳实践。这种模型可以提供准确而高效的代码建议,帮助开发人员在编写代码时避免常见的错误和陷阱。 通过学习代码专家模型&…

使用Bandzip分卷压缩文件

需求 部分文件太大,例如超过10G,就不能使用企业微信等传输,如果可以把一个10G的文件分割成为10个1G的文件就可以方便传输了。 实现方式 使用bandzip,把超过10G的文件分卷压缩成为多个小的zip文件。 把生成的多个文件放在同一目…

网红隋总揭秘:高效实施人力RPO项目的秘诀

随着企业对于招聘流程效率和专业性的追求日益提升,RPO(招聘流程外包)项目逐渐成为人力资源领域的热门话题。隋总凭借丰富的行业经验和独特的视角,分享了关于如何高效实施人力RPO项目的秘诀。 一、明确目标,找准定位 在启动RPO项目之前&#x…

零基础入门篇④ 初识Python(注释、编码规范、关键字...)

Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏订阅地址 👉Python从…

【挑战30天首通《谷粒商城》】-【第一天】01、简介-项目介绍

文章目录 课程介绍一、 项目介绍1、项目背景A、电商模式1、B2B 模式2、B2C 模式3、C2B 模式4、C2C 模式5、O2O 模式 1.2、项目架构图1.3、项目技术 & 特色1.4、项目前置要求二、分布式基础概念(略)三、环境撘建(略) one more thing 课程介绍 1.分布式基础(全栈开发篇)2.分…

UE5 audio capture 回声问题 ||在安卓上有爆鸣声

参考视频 0.基本步骤 【UE4_蓝图】录制麦克风声音/系统声音并输出保存WAV文件_ue4录音-CSDN博客 1.步骤 1.创建Sound Submix A 2. 右键新建Sound Submix B 3.把B的两个参数调为-96 4.audio capture的Base Submix,把前面提到的A赋值进去 5.开始录制输出和完成录制…

【Unity 协程】

Unity中的协程(Coroutine)是一种编程结构,它允许你以一种看似同步的方式编写可能需要异步执行的代码。协程特别适用于需要在一定时间后执行操作,或者在循环执行某段代码直到某个条件满足时的场景。 协程使用IEnumerator委托来实现…

30天精通 Δ-Σ ADC 设计

在现代电子工程和信号处理领域,模拟-数字转换器(ADC)是实现信号精确转换的核心组件。ADC技术正经历革新,拓展了其在多个前沿技术领域的应用范围。 **首先,**ADC的采样率和分辨率是衡量其性能的关键指标。随着技术工艺…

海外网安同行们面对当下的就业环境,也破防了。。。

问:漂亮国的安全行业就业市场怎么样? 答:初级岗位挺好找的,如果你有一个硕士学位并且还有10年工作经验的话。 0x00 我之前在分析海外的就业环境的时候[海外安全行业工资水平怎么样?],一度以为外国的月亮就…

分布式光伏管理系统和一般的光伏管理系统相比有什么区别?

随着全球对可再生能源的关注度日益提高,光伏技术作为其中的佼佼者,已经得到了广泛的应用。在光伏技术中,管理系统扮演着至关重要的角色,它关乎着光伏电站的运行效率、能源产出以及运维成本等多个方面。其中,分布式光伏…

N9048B PXE EMI 测试接收机,1 Hz 至 44 GHz

​ _EMI_ N9048B EMI 测试接收机 1 Hz 至 44 GHz Keysight N9048B PXE 是一款符合标准的 EMI 测试接收机,配有射频预选器和 LNA 设计。其实时扫描(RTS)功能有助于您缩短总体测试时间,轻松执行无间隙的信号捕获和分析。 特点 …

前后端功能实现——添加品牌

需求 点击新增&#xff0c;跳转到添加品牌的页面&#xff0c;从后一个页面提交品牌数据&#xff1a; 1、BrandMapper接口添加add()方法 /** * 添加品牌 */ void add(Brand brand); 2、BrandMapper.xml中添加sql方法 <insert id"add">insert into brand val…

【字符串】Leetcode 最长回文子串

题目讲解 5. 最长回文子串 算法讲解 dp[i][j]表示i~j这一段区间的子串是否是回文 当s[i] s[j]的时候&#xff0c;此时是有三种情况的&#xff1a; ij说明一个字符肯定是回文 i1 j也说明一个字符是回文 i1 < j说明需要判断[i1, j-1]这一段区间是否是回文 此时我们就可以…

代码随想录算法训练营第十三天:树的认知(补五一)

代码随想录算法训练营第十三天&#xff1a;树的认知&#xff08;补五一&#xff09; ‍ 二叉树的递归遍历 #算法公开课 《代码随想录》算法视频公开课 ****(opens new window)****​ &#xff1a;​每次写递归都要靠直觉&#xff1f; 这次带你学透二叉树的递归遍历&#xf…

[UDS][OTA] 自定义 IntelHEX (IHEX) format read/write library in C

参考修改 参考github的MIT协议开源项目 ihex 改写的代码 https://gitee.com/liudegui/intelhex-c 修改点&#xff1a; 修改Makefile脚本&#xff0c;支持x86_X64平台和aarch64平台将默认读取行长度设置为16位删除与ihex和bin之间的转换无关的示例代码 十六进制描述 HEX格式…

c#绘制渐变色的Led

项目场景&#xff1a; c#绘制渐变色的button using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; using static System.Windows.Forms.AxHost;namespace WindowsFormsApp2 {public class Gradie…

接口测试及常用的接口测试工具(Postman/Jmeter)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接…

包管理工具npm、cnpm、yarn、NVM

[包]英文单词是package,代表了一组特定功能的源码集合 包管理工具&#xff1a; 管理[包]的应用软件,可以对[包]进行下载安装,更新,删除,上传等操作借助包管理工具,可以快速开发项目,提升开发效率 包管理工具是一个通用的概念,很多编程语言都有包管理工具,所以掌握好包管理工具非…

1.python爬虫爬取视频网站的视频可下载的源url

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、爬取的源网站二、实现代码总结 一、爬取的源网站 http://www.lzizy9.com/ 在这里以电影片栏下的动作片为例来爬取。 可以看到视频有多页&#xff0c;因此需要…

Java设计模式 _结构型模式_享元模式

一、享元模式 1、享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型模式。主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。主要解决有大量对象时&#xff0c;有可能会造成内存溢出&#xff0c;我们把其中共同的部分抽象出来&#x…
最新文章