点击上方蓝字关注我们!

对业务来说,完备的应用健康性和数据指标的监控非常重要,通过采集准确的监控指标、配置合理的告警机制,我们能够提前或者尽早发现问题,并做出响应、解决问题,进而保证产品的稳定性,提升用户体验。

过去单体服务或者微服务时代,对我们JavaBoy来说,或是通过SpringBoot的Actuator模块实现了本地应用的监控与管理,或者通过javamelody对Tomcat应用进行线程级别的监控(参考我另一篇文章:《一文看懂:性能监控神器JavaMelody》)。

如今进入到云原生时代,过去的一些监控在k8s应用部署的环境下,或是由于设计思路不同,或者开源社区不兼容等原因,变得不可用,这一下子让很多开发者变的束手无策起来。

在k8s应用部署的大背景下,下面将围绕着“建设云原生的可观测性监控指标”的主题,一起探讨“架构和业务层面可以做的事情”,最终得出建设业务监控系统平台的概念。

背景

在微服务和容器化时代,我们开始大面积拆分小应用,将业务分割为一个个小系统,通过Docker来独立部署每个小系统,但遇到了容器编排、应用扩缩容、升级繁琐、容器难管理等诸多问题;

进入云原生时代后,Kubernetes横空出世,帮助运维同学高效实现容器集群的管理;

对于开发同学来说,我们所负责的业务系统经过上云部署之后,如果需要进行应用健康性和业务数据监控,会遇到哪些可观测性监控的问题,又应该如何解决呢?

云原生破局利剑与理论依据

winter

必须先提及两个基础概念:Promutheus 和 可观测性理论。

Prometheus不必多说,它就是云原生监控的破局利剑,是兵器;可观测性理论就是我们监控的理论来源,是兵法;有了兵法和兵器,我们才能披荆斩棘,解决实际问题。

Prometheus

Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来)。

2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,并且于2015年早期对外发布早期版本。

2016年5月继Kubernetes之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。

2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。

可观测性理论:

我们通过图表来定义描述Metrics, tracing, logging三个概念,进而明确监控的作用域,使各名词的作用范围更明确。

(1)Metric:特点是可累加和有原子性,每个都是一个逻辑计量单元,或者一个时间段内的柱状图。

例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统计;输入HTTP请求的数量可以被定义为一个计数器,用于简单累加;请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。

(2)Logging:特点是描述一些离散的(不连续的)事件。

例如:应用通过一个滚动的文件输出debug或error信息,并通过日志收集系统,存储到Elasticsearch中;审批明细信息通过Kafka,存储到数据库(BigTable)中;又或者,特定请求的元数据信息,从服务请求中剥离出来,发送给一个异常收集服务,如NewRelic。

(3)Tracing:特点是它在单次请求的范围内,处理信息。任何的数据、元数据信息都被绑定到系统中的单个事务上。

例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;一次HTTP请求的业务性ID。

云原生应用特点

云原生:云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势,比如我们耳熟能详的“腾讯云”、“阿里云”等。

云原生技术包含了一组应用的模式,用于帮助企业快速,持续,可靠,规模化地交付业务软件。

云原生由微服务架构,DevOps 和以容器为代表的敏捷基础架构组成。援引宋净超同学的一张图片来描述云原生所需要的能力与特征:

因此,借由云原生技术可以实现快速和频繁的构建、发布、部署,结合云计算的特点实现和底层硬件和操作系统解耦,可以方便的满足在扩展性,可用性,可移植性等方面的要求,并提供更好的经济性。

云原生也带给开发模式、系统架构、部署模式和基础设施巨大的改变,这些改变代表着云原生应用的特点

开发模式:效率要求更高,随着DevOps模式普及,规划、开发、测试、交付的效率越来越高。

系统架构:系统更加复杂,架构从开始的一体化到分层模式,到微服务架构。

部署模式:环境动态性增强了,容器化部署模式动态性增强,使得应用实例生命周期变短,更加可控制。

基础设施:上下游依赖更多了,依赖各种云原生应用和各类云厂商的产品,上下游变多了。

云原生监控的痛点与目标使命

中小企业往往是在公有云上部署自己的云原生应用,因此国内的五大云厂商(阿里云、华为云、腾讯云、天翼云和亚马逊云)都会定时采集用户反馈。我们梳理处下面五个常见的痛点:

这些痛点,我们其实从新闻里也有听到过,对于toC用户来说,一些大故障,我们可以开诚布公,通过公开发文来解决舆论压力,比如:光缆被挖断;但是对于toB客户,云厂商面临的压力就很大,频率较高,这类产品要分类分级。

云原生监控的目标:监控体系做得好,保证一切都是可控的。

我们可以从三个方面入手:应用层面、服务层面、用户层面。

(1)应用层面:及时覆盖发现问题,进而修复问题

(2)服务层面:服务健康性感知,全链路联动发现、分析和处理问题

(3)用户层面:化被动为主动,提升用户使用质量

云原生业务立体化监控方案

云原生业务立体化监控方案针对了七个环节进行监控:

  1. 拨测监控:业务质量监控;

  2. 前端性能监控:小程序等;

    1. 举例子:健康码白屏了,前端也要重点关注的

  3. 网络质量监控:国内外的网络环境差异较大

    1. 举例子:俄乌冲突下的居民用网问题

  4. 后端指标监控/链路监控:后端比较关注

  5. 服务运营日志:中间件监控(Redis、Kafka等)

  6. 云资源监控:数据库、云硬盘、服务器资源、CPU、带宽IO等。

    1. 其实开源社区有非常多的组件支持,让数据库、中间件直接接入,就可以实时监控了

  7. 性能压测:金丝雀发布演练

以上七个环节,每个环节都有自己的侧重点,下面我们逐个分析。

业务拨测

业务拨测:依托云厂商专有的服务质量监测网络,利用分布于全球的服务质量监测点,对网站、域名、后台接口等进行周期性监控,通过查看可用率和延时随时间区间变化来帮助分析站点质量情况。。

拨测原理:云厂商利用分布全球的检测网络(例如,腾讯云提供全球200+城市的1000+拨测点资源),提供模拟终端用户体验的拨测服务,来满足我们对未来、浏览、传输、协议、流媒体的周期性监控的拨测场景;

好处:以黑盒视角重点保障关键域名、服务功能,从客户端最直接感受,做质量管控,比如下面六种场景:

(1)服务质量优化

从全球模仿用户访问服务,获取各种业务场景(电商网站性能、API 测试等)的服务质量指标。

(2)发布验证

系统升级或新功能发布后的可用性和性能验证,提前发现业务打不开、运行速度慢等用户体验差的问题。

(3)CDN 质量评估

通过主动式拨测定位 CDN 的服务质量,并提供详细数据支撑,优化业务的用户体验。

(4)防劫持和防篡改

监测域名劫持、流量劫持、页面篡改等行为,保护应用流量和品牌形象。

(5)IPV6 升级改造

对比验证 IPV6 改造后相对 IPV4 提升效果,以及全国各地区网络连通性等监测数据。

(6)竞品分析

拨测不同竞品应用的性能数据,掌握应用在行业内重点竞争对手中的优劣势。

前端监控&小程序监控

前端监控:用户终端实际用户操作行为与前端服务质量监控,低门槛、场景化,主动进行行为分析。

应用场景:

  1. 页面性能分析和优化

  2. 前端服务服务异常监控:JS/web元素异常

  3. 用户行为分析和运营数据处理

网络质量监控

网络质量监控(尤其是核心网络质量)对业务健康性是至关重要的。

网络质量作为服务可用的第一关,对用户体验影响深远,而监测网络质量的方式其实并不复杂。一台 PC,通过 Ping、Dig、Telnet 等简单的命令行指令,就能快速发现网络问题。

其中,网络监控分为网络设备交换机、路由器等监控,光缆线路监控,网络连通性探测监控等。

以腾讯云为例子,腾讯云提供全地域,运营商网络质量对比一目了然。能够帮助用户快速发现区域性、运营商网络问题,及时修复,最大化降低业务影响。

目的:云上网络质量监控,能够确保业务核心网络和骨干网的健康性监控、网络质量探测分析,业务调度容灾。

场景:有些产品对网络要求比较高,尤其是出海业务。因为国内大可不必太担忧,但是国外(中东打仗了,俄乌冲突)很多意外,基础设施上不了,导弹忽然就到了,网络就断了,非常的不稳定;另外,国外会有很多运营商,整体不是一个可控的网络。

后端监控-自定义指标

后端监控:Prometheus提供了非常多的开源组件的指标监控实现,让我们能够开箱即用的使用社区开源能力。

但也有部分业务场景,需要我们研发侧自行定义的,Prometheus提供了4 种不同的度量指标类型(metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)。

结论:针对不同的服务场景,我们可以定义不同的指标监控,如果服务调用量、卡顿率、延迟分布监控、再比如服务价格性能、垃圾回收性能监控等。Prometheus协议:已经成为一个标准。对云资源进行指标监控。

应用场景:容器、kafka、db,各大云厂商监控支持Prometheus协议,且支持微服务自定义监控架构设计。

后端监控-链路跟踪

链路跟踪:专注于后台服务APM(应用性能管理),应用性能观测(Application Performance Management ,APM)是一款应用性能管理平台,从服务代码层面实现全链路监控:调用量、成功率、耗时、异常问题详情。

作用:后端服务全链路监控、服务异常及时关联定位分析、业务活动重保护航、服务主动优化治理、业务成本优化和预算评估。

场景:大部分情况,我们是通过Skywalking进行traceid的链路传递和监控。

云资源监控

云资源监控:专注于云资源:容器、虚拟机、存储、中间件等实时监控,更加倾向于运维保障效率、软硬件性能和可用性监控。

举个简单例子:云数据库产品(以腾讯云Mysql为例子)

过去的DB部署,是由DBA专门负责的,通过DBA手动敲指令盯着Mysql性能的方式来监控;

而如今现在的DB上云之后,Paas交付给客户的只有一个DB实例了,监控手段更加多样化,可以通过云监控组件,可视化的了解各类数据库负载指标。

监控指标

可以通过大盘方便快捷的监控我们的数据库实例的四类指标:

【1】资源监控:CPU/硬盘/网卡/内存

包括不限于下面指标:CPU利用率、内存利用率、内存占用、磁盘利用率、磁盘使用空间、磁盘占用空间、IOPS、IOPS 利用率、内网出流量、内网入流量

【2】引擎监控:数据库连接/表/InnoDB/访问响应

数据库连接包括了:每秒执行操作数、每秒执行事务数、连接数利用率、当前打开连接数、最大连接数等;

访问响应包括了:慢查询数、全表扫描数、查询数、更新数、删除数、插入数、覆盖数、总请求数、查询使用率;

表:临时表数量、等待表锁次数

InnoDB:缓存命中率、缓存使用率、读磁盘数量、写磁盘数量、fsync数量、当前InnoDB打开表的数量等;

【3】引擎监控的扩展指标

包括了连接数、InnoDB写入读出量等

【4】部署监控

由于大部分企业级应用都追求高可用性,往往会采取一主多从的部署模式,因此存在主从延迟等问题,云监控能够帮助我们方便快捷的监控到这类指标。

性能压测

全链路性能压测:借助云厂商的工具,丰富我们的测试场景:从简单模式(GET/POST/PUT/PATCH/DELETE)、脚本模式、自定义录制。才有box/ship方案,支持压测引擎动态插拔,通过灵活的第三方压测引擎,丰富我们的测试场景。

我们研发开发阶段,往往会通过Jmeter等工具模拟并发请求的场景;进入云原生时代,这种压测也可以在发布阶段后,给业务进行压测。

目的:新系统上线性能压测、业务峰值稳定性测验、业务容量规划评估、技术迭代升级验证。

建设业务质量监控

业界认可的服务监控模型如上所示:越往上的指标越少(容易辨别是什么问题),越往下约多(分析维度多)。

建立云原生业务质量监控的步骤如下:

  1. 确定业务监控目标:明确需要监控的业务指标,如响应时间、成功率、用户满意度等。

  2. 选择合适的监控工具和技术:根据业务监控目标,选择合适的监控工具和技术,如 Prometheus、Grafana、InfluxDB 等。

  3. 设计监控指标和监控策略:根据业务监控目标和监控工具,设计合适的监控指标和监控策略,如告警、日志记录、性能监控等。

  4. 收集和整合监控数据:收集和整合监控系统中的数据,包括告警信息、日志记录、性能监控数据等,并进行数据清洗、汇总和分析。

  5. 建立监控告警机制:根据监控数据和分析结果,建立监控告警机制,及时发现和解决问题。

  6. 优化监控流程和系统:对监控系统进行优化和改进,提高监控效率和准确性。

总结

随着互联网业务的快速发展,云原生应用正在成为互联网应用的主流架构模式。云原生应用具有轻量、灵动、可伸缩、易于维护等特性,非常适合高并发、大流量的业务场景。

业务监控是云原生应用的关键能力之一,可以帮助运维团队实时了解应用的运行状态,发现和解决问题,确保应用的稳定性和可靠性。

总之,云原生时代的业务监控将更加智能化、高效化和可视化,帮助运维团队更加高效地管理和维护云原生应用,确保应用的稳定性和可靠性。朋友们,如果说编程已经无法提现我们的专业能力,那么云原生知识栈更应该要学起来。

往期推荐

《互联网技术峰会》

《ArchSummit:从珍爱微服务框架看架构演进》

《ArchSummit_2022_全球架构峰会》

《2021年深圳ArchSummit全球架构师峰会》

《降本30%,酷家乐海量数据冷热分离设计与实践》

《经典书籍》

《Java并发编程实战:第1章 多线程安全性与风险》

《Java并发编程实战:第2章 影响线程安全性的原子性和加锁机制》

《Java并发编程实战:第3章 助于线程安全的三剑客:final & volatile & 线程封闭》

《服务端技术栈》

《Docker 核心设计理念》

《Kafka原理总结》

《HTTP的前世今生》

《如何进行一次高质量CR》

《一时重构一时爽,一直重构一直爽》

《一文带你看懂:亿级大表垂直拆分的工程实践》

《API加速优化方案:多级缓存设计》

《一文带你读懂:云原生时代业务监控》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 模拟信号与离散信号之间的频率关系(由模拟信号采样得到的离散信号)
  2. USB入门系列之二:USB的连接模型
  3. 3.1.2 vernam 代数密码
  4. 搭建QT和VS2010集成开发环境
  5. 9-Building FIP images with support for Trusted Board Boot
  6. Python实现进度条总结
  7. 基于Xml 的IOC 容器-寻找入口
  8. 『Go 语言底层原理剖析』文末送书
  9. 狄利克雷分布公式_深入机器学习系列11-隐式狄利克雷分布
  10. 视频制作中的绿幕与拜耳阵列
  11. datetime-local 传时间戳_传世经典,此生必读——《呼兰河传》
  12. NYOJ98 - 成绩转换
  13. 线性代数及其应用(part2)--特征方程
  14. 【微信小程序】农历公历互相转换
  15. msfvenom制作简易后门程序
  16. Unity控制摄像机缓慢移动的代码(插值计算 非常丝滑)
  17. android三星s8底部菜单,三星Galaxy S8/S8+国行获更新:导航栏可隐藏/视野更宽阔
  18. 原创 关于微信拼车小程序开发的需求分析(分析建模2)
  19. js移除Array中指定元素
  20. 第8届泰迪杯C题问题总结

热门文章

  1. 解决ajax跨域问题的5种解决方案
  2. 化学专业与计算机的联系PPT,多媒体计算机辅助化学教学课件设计的理论与方法探讨...
  3. 玩转k8s:k8s介绍
  4. Excel2016滚动模式去除
  5. 2013-12-02:IBSN码
  6. 自己调的颜色面板15种色彩
  7. c语言封面图片,C语言封面
  8. 海藻酸钠-牛血清白蛋白|alginate-BSA|海藻酸钠-PEG-牛血清白蛋白
  9. pm2 和github上面的自动部署
  10. 华硕笔记本电脑爱豆adol14无法连接蓝牙