写点什么

微服务架构下的监控系统设计(一)——指标数据的采集展示

  • 2019-11-12
  • 本文字数:1867 字

    阅读完需:约 6 分钟

微服务架构下的监控系统设计(一)——指标数据的采集展示

微服务是一种架构风格,一个大型复杂软件应用通常由多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。


微服务之前很多单体应用,其监控复杂度较低,场景也比较单一。微服务下,由于业务逻辑散布在众多进程中(很多大型业务,一个业务流程涉及的服务有几十个),一旦业务出现问题,追查其源头就好比大海捞针,这个时候就需要完善的监控体系。


一个完善的监控体系,其构建周期比较漫长,而且随着业务场景的变化,自身也是需要不断迭代优化的。本文仅从几个监控维度以及原子化场景谈谈如何建立统一的监控数据收集、展示系统,希望能够启发大家继续深入地思考监控体系的建设。

微服务下的几个监控维度

微服务监控与传统应用的监控相比,最明显的改变就是视角的改变,我们把监控从机器视角转换成以服务为中心的视角,在微服务的视角下,监控可以从数据维度、资源维度和代码维度进行分层,如下图:


数据维度

当前 WEB 化服务是主流,每一个 WEB 服务都有一个入口,不管是 APP 还是 WEB 网页,入口负责跟用户交互,并将用户的信息发给后台,后台一般都会有接入 LB 或者 Gateway,负责负载均衡并将数据转发给具体的应用处理,最后由应用处理之后写入数据库。

资源维度

现在很多服务部署在云端,涉及虚拟化技术,虚拟主机运行在物理服务器上,虚拟主机之间通过虚拟网络相互连接。在资源层面的监控,是不可缺少的一环,我们不但需要采集虚拟主机的性能指标,同时还需要知道运行虚拟主机的服务器上的 CPU、内存、磁盘 IO 等数据,以及连接虚拟主机之间的虚拟网络的带宽负载等。

代码维度

APM,也就是应用性能分析,代码侧的监控采集,是随着微服务的兴起而出现的。在微服务场景下,一个业务流程横跨几十个服务的场景,只有传统的监控数据,很难定位到问题的根源。


我们可以针对代码的技术栈,开发出特定的采集框架,在性能损耗可以接受的范围之内,采集函数之间的调用关系,服务之间的调用拓扑,并测量函数或者服务的响应时间,才能有针对性地优化性能或者提前预判故障。

关键监控指标的场景描述

微服务监控最大的特点,用一句话概括:就是服务特别多,服务间的调用也非常复杂。当系统出现问题时,想要在上百个相关的、依赖错综复杂的服务系统之中快速定位到出错的系统,需要依靠关键的监控指标。我们在上述的三个维度之上,分析了每个维度下每个层级可能会产生的告警情况,总结了 URL 监控、主机监控、产品监控等八个原子化监控场景。



URL 监控:无论是 APP 还是 WEB,本质上都是通过 URL 发起后台调用,可以通过 MOCK 调用 API 获取响应时间、响应状态码等指标,展示监测业务的整体健康状况。


主机监控:通过安装代理采集主机上基本的监控信息如 CPU、内存、IO 等数据,同时用户可以通过配置文件打开其它开源应用如 Tomcat、Nginx 等数据采集开关。


产品监控:公有云将主机、网络、存储以及一些中间件以产品的形式提供给用户使用,产品服务后台上报各个产品相关指标数据,用来监控各个产品资源的健康状况。


组件监控:一些开源组件,比如 Tomcat、Nginx、Netty 等监控数据的采集,可以通过主机上的代理加载相应组件的监控采集程序。


自定义监控:服务实例收集业务相关数据,定时调用 API 接口上报数据,支持多个服务实例同时上报一个监控项,并且支持多维度查询告警。


资源监控:用户以资源为维度上报自定义数据,每个资源都有相同的几个监控项,各个资源的监控项之间相互独立。


APM:根据各语言栈的不同,分别实现函数调用关系、服务之间调用拓扑的展示。根据各个语言的不同,有的需要入侵代码,以 SDK 嵌入的形式收集数据,有的则与代码解耦,通过元编程重载一些方法来实现数据采集。


事件监控:针对公有云产品、业务逻辑中的不连续事件,比如云盘的不可用事件、SSD 硬盘的 Reset 事件等,提供统一的存储、分析、展示。


有了以上原子化场景的数据收集,我们就可以通过 UI 统一展示监控数据,可以按照前文描述的三个维度,以用户体验为核心,设计图形化页面。图形化一般是以时间序列为横轴,展示指标随时间变化,针对一些统计指标,也可以通过饼图、柱状图等展示分析、对比结果。


本文主要阐述了监控体系中数据的采集、展示。至于数据的存储及告警流程,有兴趣的同学可以继续关注后续监控相关文章。


作者介绍;


董磊,UCloud 技术专家。十年 IT 行业开发经验,目前负责 UCloud 混合云、监控产品的设计开发,持续关注微服务架构、监控、DevOps 等领域。


本文转载自公众号 UCloud 技术(ID:ucloud_tech)。


原文链接:


https://mp.weixin.qq.com/s/RjvzQQSa-wzOi8Tr6FnSPQ


2019-11-12 10:333465

评论

发布
暂无评论
发现更多内容

阿里大牛耗时三年整理出来的4588页Java面试诛仙手册,已全面开源

Java~~~

Java 架构 面试 JVM 架构师

上线半天下载量破100W!美团内部微服务进阶笔记,超详细

Java 架构 面试 微服务 美团

学完阿里P8推荐的实时流计算系统设计与实现PDF,终入淘宝

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

币安智能链智能合约DAPP开发|智能合约DAPP源码搭建

量化系统19942438797

dapp 币安智能链

全靠这份阿里大佬的“Java进阶面试手册”收获蚂蚁offer

Java~~~

Java 架构 面试 算法 JVM

鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割

华为云开发者联盟

鲲鹏 openLooKeng

MySQL 系列教程之(九)MySQL 必修:事务

若尘

MySQL 数据库 8月日更

全链路压测实践

超凡生

imtoken钱包搭建,区块链去中心化钱包搭建

币安智能链智能合约DAPP开发

Geek_23f0c3

智能合约 DAPP智能合约交易系统开发 DAPP系统开发 币安智能链

图解:为什么非公平锁的性能更高?

Java 程序员 面试 后端 计算机

多种云资源管理用什么软件好?你知道吗?

行云管家

云计算 云服务 云资源

谷歌高级架构师十年心血终成Kubernetes微服务实战文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

终于读完谷歌高级架构师分享的Kubernetes源码剖析文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

云小课|MRS基础原理之ClickHouse组件介绍

华为云开发者联盟

mapreduce 开源 Clickhouse EI企业智能 列式数据库

基于java springboot vue活动报名系统源码(毕设)

清风

Java springboot elementUI 毕业设计

人类高质量 Java 学习路线【一条龙版】

程序员鱼皮

Java 数据库 后端 求职 编程学习

聊聊 Kafka: 在 Linux 环境上搭建 Kafka

编程susu

Java IT 计算机 编程开发 技术宅

深度解读鸿蒙轻内核CPU占用率

华为云开发者联盟

鸿蒙 cpu 任务 CPUP LiteO

使用 GitHub Issues 来写博客,真香。

彭宏豪95

GitHub 写作 博客

“性能混合架构”了解了吗?英特尔Alder Lake惊艳来袭

科技新消息

gopher成长之路(三):出差小记

非晓为骁

个人成长 蜕变

Github高分爆赞,一天遭狂转 10w+ 次!20万字的Java面试手册来了

Java~~~

Java 架构 面试 JVM 架构师

阿里P8耗时一个月肝出这份26W字Java面试手册,在Github标星30K+

Java~~~

Java spring 架构 面试 JVM

GitHub再现神作,阿里大牛面试30家大厂,整合出这份Java面试手册

Java~~~

Java 架构 面试 JVM 架构师

万物皆为向量:在线向量召回工程服务化实践

爱奇艺技术产品团队

深度学习 推荐 向量

ToB迎来上市潮,谁是下一个IPO黑马?

ToB行业头条

IPO

Flutter 与 Swift - 在创建 iOS 应用程序时应该押注什么技术?

iOSer

flutter swift ios开发

记一次10人跨组织、跨地域的开源协作经历

腾源会

开源 腾讯 腾讯开源

超赞!GitHub上百万下载量Java面试手册!颠覆你的认知

Java~~~

Java 架构 面试 网络 架构师

NodeJs深入浅出之旅:模块🌀

空城机

大前端 Node 8月日更

微服务架构下的监控系统设计(一)——指标数据的采集展示_文化 & 方法_董磊_InfoQ精选文章