热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务架构:监控系统。

什么是监控系统 ?

在微服务架构中,监控系统按照原理和作用大致可以分为三类(并非严格分类,仅从日常使用角度来看):

  • 日志类(Log)

  • 调用链类(Tracing)

  • 度量类(Metrics)

下面来分别对这三种常见的监控模式进行说明:

日志类(Log)

日志类比较常见,我们的框架代码、系统环境、以及业务逻辑中一般都会产出一些日志,这些日志我们通常把它记录后统一收集起来,方便在需要的时候进行查询。

日志类记录的信息一般是一些事件、非结构化的一些文本内容。日志的输出和处理的解决方案比较多,大家熟知的有 ELK Stack 方案(Elasticseach + Logstash + Kibana),如图:

微服务架构:监控系统。使用Beats(可选)在每台服务器上安装后,作为日志客户端收集器,然后通过Logstash进行统一的日志收集、解析、过滤等处理,再将数据发送给Elasticsearch中进行存储分析,最后使用Kibana来进行数据的展示。

当然还可以升级方案为:

微服务架构:监控系统。

这些方案都比较成熟,搭建起来也比较简单,除了用作监控系统以外,还可以作为日志查询系统使用,非常适用于做分析、以及问题调试使用。

调用链类(Tracing)

调用链类监控主要是指记录一个请求的全部流程。一个请求从开始进入,在微服务中调用不同的服务节点后,再返回给客户端,在这个过程中通过调用链参数来追寻全链路行为。通过这个方式可以很方便的知道请求在哪个环节出了故障,系统的瓶颈在哪儿。

这一类的监控一般采用 CAT 工具 来完成,一般在大中型项目较多用到,因为搭建起来有一定的成本。

度量类(Metrics)

度量类主要采用 时序数据库 的解决方案。它是以事件发生时间以及当前数值的角度来记录的监控信息,是可以聚合运算的,用于查看一些指标数据和指标趋势。所以这类监控主要不是用来查问题的,主要是用来看趋势的。

Metrics一般有5种基本的度量类型:Gauges(度量)、Counters(计数器)、 Histograms(直方图)、 Meters(TPS计算器)、Timers(计时器)。

基于时间序列数据库的监控系统是非常适合做监控告警使用的,所以现在也比较流行这个方案,如果我们要搭建一套新的监控系统,我也建议参考这类方案进行。

因此本文接下来也会重点以时间序列数据库的监控系统为主角来描述。

关注的对象和指标都是什么?

一般我们做「监控系统」都是需要做分层式监控的,也就是说将我们要监控的对象进行分层,一般主要分为:

  • 系统层:系统层主要是指CPU、磁盘、内存、网络等服务器层面的监控,这些一般也是运维同学比较关注的对象。

  • 应用层:应用层指的是服务角度的监控,比如接口、框架、某个服务的健康状态等,一般是服务开发或框架开发人员关注的对象。

  • 用户层:这一层主要是与用户、与业务相关的一些监控,属于功能层面的,大多数是项目经理或产品经理会比较关注的对象。

知道了监控的分层后,我们再来看一下监控的指标一般有哪些:

  • 延迟时间:主要是响应一个请求所消耗的延迟,比如某接口的HTTP请求平均响应时间为100ms。

  • 请求量:是指系统的容量吞吐能力,例如每秒处理多少次请求(QPS)作为指标。

  • 错误率:主要是用来监控错误发生的比例,比如将某接口一段时间内调用时失败的比例作为指标。

基于时序数据库的监控系统有哪些?

下面介绍几款目前业内比较流行的基于时间序列数据库的开源监控方案:

Prometheus

Promethes是一款2012年开源的监控框架,其本质是时间序列数据库,由Google前员工所开发。

Promethes采用拉的模式(Pull)从应用中拉取数据,并还支持 Alert 模块可以实现监控预警。它的性能非常强劲,单机可以消费百万级时间序列。

架构如下:

微服务架构:监控系统。从看图的左下角可以看到,Prometheus 可以通过在应用里进行埋点后Pull到 Prometheus Server里,如果应用不支持埋点,也可以采用exporter方式进行数据采集。

从图的左上角可以看到,对于一些定时任务模块,因为是周期性运行的,所以采用拉的方式无法获取数据,那么Prometheus 也提供了一种推数据的方式,但是并不是推送到Prometheus Server中,而是中间搭建一个 Pushgateway,定时任务模块将metrics信息推送到这个Pushgateway中,然后Prometheus Server再依然采用拉的方式从Pushgateway中获取数据。

需要拉取的数据既可以采用静态方式配置在Prometheus Server中,也可以采用服务发现的方式(即图的中间上面的Service discovery所示)。

  • PromQL:是Prometheus自带的查询语法,通过编写PromQL语句可以查询Prometheus里面的数据。
  • Alertmanager:是用于数据的预警模块,支持通过多种方式去发送预警。
  • WebUI:是用来展示数据和图形的,但是一般大多数是与Grafana结合,采用Grafana来展示。

OpenTSDB

OpenTSDB是在2010年开源的一款分布式时序数据库,当然其主要用于监控方案中。

OpenTSDB采用的是Hbase的分布式存储,它获取数据的模式与Prometheus不同,它采用的是推模式(Push)。

在展示层,OpenTSDB自带有WebUI视图,也可以与Grafana很好的集成,提供丰富的展示界面。

但OpenTSDB并没有自带预警模块,需要自己去开发或者与第三方组件结合使用。

可以通过下图来了解一下OpenTSDB的架构:

微服务架构:监控系统。

InfluxDB

InfluxDB是在2013年开源的一款时序数据库,在这里我们主要还是用于做监控系统方案。它收集数据也是采用推模式(Push)。在展示层,InfluxDB也是自带WebUI,也可以与Grafana集成。

微服务架构:监控系统。

以上,就是对微服务架构中「 监控系统」的一些思考。


推荐阅读
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 近年来,BPM(业务流程管理)系统在国内市场逐渐普及,多家厂商在这一领域崭露头角。本文将对当前主要的BPM厂商进行概述,并分析其各自的优势。目前,市场上较为成熟的BPM产品主要分为两类:一类是综合型厂商,如IBM和SAP,这些企业在整体解决方案方面具有明显优势;另一类则是专注于BPM领域的专业厂商,它们在特定行业或应用场景中表现出色。通过对比分析,本文旨在为企业选择合适的BPM系统提供参考。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
手机用户2502859155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有