SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)

简介: 本篇是“SpringCloud 应用在 Kubernetes 上的最佳实践”系列文章的第六篇,主要介绍了如何保障生产环境服务稳定,做到随时发布,从而加快业务的迭代和上线速度。

文:骐羽

前言

在应用发布上线的时候我们最担心的莫过于因为代码的bug引发业务的问题,虽然我们可以通过灰度的方式分批发布减小影响范围,但是如果能够在发布的过程中从实时监控中快速的发现问题进行回滚,那么就能缩短业务受影响的时间。因此我们可以看到灰度、监控、回滚是整个发布过程中不可或缺的三大利器,有了这三大利器后,我们能够做到随时发布,从而加快业务的迭代和上线速度。而监控作为基础设施的一个重要环节,是保障生产环境服务稳定不可或缺的一部分,目前EDAS提供了非常丰富的监控能力,下面我们从不同的场景来详细介绍一下这些监控能力。

 

体系化监控能力搭建

监控体系,最怕的就是有覆盖不到的地方,一个覆盖全面的监控应该是从基础设施到上层应用均有对应的手段去覆盖:

  • 首先,如果故障产生时,最先感知到的其实是业务的受损,如交易量下跌、登陆的 UV 下跌等等。
  • 而如果继续往下钻,如果业务集群很大的时候,我们最先需要定位到某一个服务或者某一台机器,这个过程如果没有相应的工具相佐犹如大海捞针,所以一个分布式链路级别的应用监控会是建设 Spring Cloud 应用的很好的配搭。
  • 等到我们找到了相应的服务要开始进行定位分析的时候,根据问题类型(是错是慢?)接下来需要开始分析 JVM、内存、CPU 等维度的指标。
  • 最后我们可能会发现这个问题是由于业务代码引起,也有可能由于基础设施引起,而在 K8S 中,Prometheus 目前是属于容器领域基础监控最厉害的军刀。

1.png

如上图所示,目前 EDAS 结合阿里云上的某些云产品,完全能够满足日常的运维的需要并帮忙业务开发的同学快速的定位线上问题。

 

EDAS常规监控能力

 

系统监控

应用实例的基础监控信息:

上图功能提供了以应用实例的维度来查看每个实例的监控信息,提供的JVM/CPU/Load/内存等的监控信息也是我们经常需要关注的,当发现内存占用高,并且有频繁的FullGCC的情况时,我们可以通过创建内存快照进行分析来快速定位问题。SQL分析的能力也能快速帮助我们定位到慢查询用来排查问题。

 

应用服务监控

应用服务接口监控信息:

2.png

这里提供了以接口维度的监控信息,可以详细的看到接口在最近一段时间的请求信息,这里重点介绍一下接口快照功能,通过接口快照我们可以看到该接口的请求耗时,以及请求的TraceId,根据这个TraceId我们可以详细的看到本次请求的调用链以及调用的方法栈。

3.png
这里提供了以接口维度的监控信息,可以详细的看到接口在最近一段时间的请求信息,这里重点介绍一下接口快照功能,通过接口快照我们可以看到该接口的请求耗时,以及请求的TraceId,根据这个TraceId我们可以详细的看到本次请求的调用链以及调用的方法栈。
4.png

5.png

调用链路的追踪在分布式系统下是一个必不可少的工具,尤其是在排查上下游依赖中究竟是哪个系统拖慢了整个请求非常有用,在调用的方法栈中可以直观的追踪到调用出错的地方。

 

应用业务监控

在EDAS中我们支持应用自定义业务监控,这需要我们开启高级监控的能力。从业务的视角来衡量应用的性能和稳定性,可以通过自定义来采集业务信息,来实时展现业务指标,帮助业务进一步完善监控信息。详细的监控配置可以参考ARMS业务监控。

 

Prometheus监控

监控产品的历史由来已久,但是随着云原生技术的持续火热,Prometheus 作为新生代的开源监控系统,慢慢成为了云原生体系的事实标准。而在EDAS中的高级监控产品ARMS已经全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务,更多的详细内容可以参考ARMS Prometheus

通过以上这些监控能力,可以大大缩短线上问题从发现到定位再到解决的时间,提高开发和运维人员排查和解决问题的效率。

 

EDAS应用发布场景中的监控

以阿里巴巴集团的经验举例子,超一半以上的大故障都是在发布过程中产生,EDAS 针对发布这一场景结合 Kubernetes 的能力做了结合,其中的精髓内容总结三个词:先发再看再发。通俗的解释就是可以利用 EDAS 中分批(灰度)发布能力,同时在发布视图中,确保相关的指标回归正常之后,再开始下一批发布了。

目前EDAS能够提供在三个维度上的指标监控数据,用来判断发布是否正常,列举如下:

 

应用业务指标

目前EDAS以接口的维度提供了每个接口在发布前后的总的请求数对比以及请求该比例的图例,并且还能够详细的看到在发布前后该接口的错误数、响应时间以及单机的请求数对比,如下图所示:

6.png

通过上图,我们可以直观的看到,当我们发布后应用的接口请求是否正常,以此来判断是否会对业务产生影响。

 

应用异常

在发布的过程中,我们也需要时刻的关注在发布中是不是有新的异常产生,我们想要有地方能够看到异常信息,避免直接登录到机器上去看业务日志,我们的发布监控提供了日志聚合分析的能力,可以在发布的过程提供实时的异常日志分析展示,如下图所以:

7.png

 

系统指标

在新的业务功能上线的时候,我们除了对业务本身的一些异常和指标进行关注外,还需要关注系统的指标,这关系到我们需要评估现有的机器是否能够支撑我们的所有流量,是否需要进行水平扩容来更好的支持业务,我们的发布监控系统同样集成了系统的监控的能力,为我们的发布过程来保驾护航,详细的监控如下图所示:

8.png

以上内容我们通过三个维度为大家展示了在整个发布的过程中EDAS为我们提供的完备的监控能力,通过这个能力可以让我们的每一次发布都能做到不慌不忙,心中有数,每一次发布都能平滑让业务进行升级。同时我们也提供了查看发布报告的功能,将发布监控信息形成了一份清晰的可视化分析报告供分享他人。

 

后续及结语

本章我们介绍了EDAS中提供的监控能力以及如何对EDAS Kubernetes集群上的Spring Cloud应用在发布的过程中如何看监控发现异常信息,但是如果出现异常了该怎么办呢?接下来的文章我们将继续介绍,当出现问题后我们如何对已经发布的应用进行快速的回滚。

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mPaaS:全新移动开发平台,只为打造性能更优越的App

简介: 基于移动开发现状与技术演进预判,提供移动开发强力解决方案,洞察 mPaaS 如何帮助企业有效降低技术门槛,减少研发成本,搭建更稳定、更流畅的移动 App。 mPaaS 是源自于支付宝的移动开发平台,为移动开发…

德勤2021技术趋势:繁琐、点状的匠人AI时代将终结,MLOps时代来临

作者 | 宋慧 出品 | CSDN 头图 | 付费下载于视觉中国 德勤在近日发布《2021 年技术趋势》报告,这已经是德勤连续第十二年发布全球技术趋势报告。纵观今年的九大技术趋势,德勤给出的主题关键词是“韧性”,建议企业运用技术实现敏捷发展、构建…

Security RBAC 表结构+权限查询sql

文章目录1. 表结构2. 权限查询sql1. 表结构 /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version : 80026Source Host : localhost:3306Source Schema : sys-adminTarget Server Type …

蚂蚁架构师郭援非:分布式数据库是金融机构数字化转型的最佳路径

简介: OceanBase立志于成为世界领先的企业级数据技术解决方案提供商。 2020年8月26-28日,在中科软科技举办的中国财险科技应用高峰论坛上,蚂蚁集团高级解决方案架构师郭援非发表了《OceanBase分布式关系数据库助力保险业务创新》的主题演讲&…

实锤!Python 真没你想的那么简单…

首先我不可否认,Python确实很“火”!很多开发者都把它当做主语言或是第二语言。当做主语言原因很好理解,因为最近几年它在人工智能、数据分析、Web开发等众多领域都有着非常成熟的应用。当做第二语言,是因为用它来完成多线程、数据…

jdbcUrl is required with driverClassName错误解决

springboot 升级到2.0之后发现配置多数据源的时候报错: “jdbcUrl is required with driverClassName.”或者Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.] with root cause 主要原因是在1.0 配置数据…

用根因定位法,让运维效率再高一点!

‍‍作者 | 中国农业银行研发中心 王哲头图 | 下载于视觉中国出品 | CSDN云计算(ID:CSDNcloud)随着业务不断发展,微服务架构越来越受到各大企业的青睐,随之也给传统运维带来更大的挑战,多维KPI指标数量繁多…

零基础开发 nginx 模块

简介: 推荐学习资料: * nginx 开发指南: http://nginx.org/en/docs/dev/development_guide.html * nginx 动态模块编译博客文章: https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/ * nginx 源码: https://github.com/nginx 推荐学习资料: nginx…

勒索病毒如何防治?看阿里云双拳出击不留隐患

简介: 阿里云与合作伙伴Commvault联合发布勒索病毒防治解决方案,从公共云、混合云等场景入手,提供完善的解决方案 在众多的数据安全工作中,勒索病毒的防治是近几年备受关注的领域。从互联网诞生伊始,勒索病毒就相生相…

中国五大移动应用商店携手启动64位安卓生态迁移

为协助中国安卓开发者无缝对接全球64位开发环境,并进一步向终端用户提供最佳体验,中国五大移动应用商店(排名不计先后)—小米应用商店、OPPO软件商店、vivo应用商店、腾讯应用宝、百度手机助手,于今日共同宣布&#xf…

滴滴基于 Flink 的实时数仓建设实践

随着滴滴业务的高速发展,业务对于数据时效性的需求越来越高,而伴随着实时技术的不断发展和成熟,滴滴也对实时建设做了大量的尝试和实践。本文主要以顺风车这个业务为引子,从引擎侧、平台侧和业务侧各个不同方面,来阐述…

闲鱼直播三周内实现点击率翻倍,我们是这么做到的...

作者:闲鱼技术-莫癫 1. 业务背景 闲鱼直播业务上线后面临的最大问题是增长问题。闲鱼BI同学分析发现,对比短时观看和长时观看人群,发现两部分人群有较明显的兴趣阶段性差异。 业务希望在理解直播、主播和用户的基础根据兴趣对头部优质直播精…

Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!

数据已渗透到我们生活和工作的方方面面,如今全球正处于经济发展转型与变革的关键时期,数据作为数字经济的核心生产要素,无疑建设先进的数据中心是科技企业的硬核 IT 实力的有力保证,科技巨头纷纷强势布局数据中心: 据…

打造数字化服务能力,中国联通如何借助云原生技术实现增长突围?

简介: 中国联通与阿里云结合阿里云原生 PaaS、阿里飞天操作系统、阿里云原生数据库以及中国联通天宫平台,共同研发运营商级专有云平台“天宫云”,支撑中国联通核心业务应用。 8 月 13 日,中国联通发布《2020 年半年度报告》&#…

报名倒计时 | 「TeaTalk」技术沙龙成都站再来袭!

在5G浪潮驱动下,数据增长速度远远超过了网络带宽的增速。同时,增强现实、无人驾驶等众多新应用的出现对延迟提出了更高要求。边缘计算将网络边缘上的计算、网络与存储资源组成统一的平台为用户提供服务,使数据在源头附近就能得到及时有效的处…

爱奇艺在 Dubbo 生态下的微服务架构实践

简介: 本文整理自作者于 2020 年云原生微服务大会上的分享《爱奇艺在 Dubbo 生态下的微服务架构实践》,重点介绍了爱奇艺在 Dubbo、Sentinel 等开发框架方面的使用经验以及微服务生态体系的建设经验。 作者 | 周晓军 爱奇艺中间件团队负责人 导读&#…

记 Arthas 实现一次 CPU 排查与代码热更新

简介: 线上代码经常会出现 CPU 占用过高的情况,按以往经验我会使用 top 指令,进一步借助于 jstack 去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,及时是一个增量包,应用也需要短暂停…

灵活、高效、智慧,宁畅发布新品及“智定+”战略

4月21日,2021宁畅新品暨战略发布会在京举办,宁畅发布了新品服务器“G40”系列,并推出 “智定”战略。该战略旨在智能时代为用户提供灵活、高效、智慧的定制化基础设施和服务。 图:2021宁畅新品暨战略发布会现场 宁畅总裁秦晓宁介…

应用系统瓶颈排查和分析的思考-Arthas 实战

简介: 业务应用系统接入流程引擎来处理业务应用的流程执行,流程引擎提供多线程高性能异步化来执行流程元素的执行,但是如何设置流程引擎的线程池线程数执行,以及执行线程数和任务数,应用机器资源使用情况之间的关系如何…

Java 虚拟机诊断利器

背景 最近学习Java字节码过程中遇到了反射,有段代码是这样的: package com.example.classstudy;import java.lang.reflect.Method;/*** author TY*/ public class ReflectionTest {private static int count 0;public static void foo() {new Excepti…