如何监控和调试Serverless平台运行SpringBoot应用?(组图)

SpringBoot 是一个基于 Java Spring 框架的套件。它预装了一系列 Spring 组件,允许开发人员以最少的配置创建独立的应用程序。在云原生世界中,有大量的平台可以运行 SpringBoot 应用程序,例如虚拟机、容器等,但其中最吸引人的就是以 serverless 的方式运行 SpringBoot 应用程序。

通过一系列文章,我将从架构、部署、监控、性能、安全五个方面分析在Serverless平台上运行SpringBoot应用的优缺点。为了让分析更具代表性,我选择了github上star数超过50k的电商应用商城作为例子。通过《SpringBoot Serverless 实践——部署》一文,相信大家在网上已经感受到了 Serverless 应用的便捷。这是向您展示如何监控和调试无服务器应用程序的系列文章中的第三篇。

实时日志

对于运行在远程云平台上的应用程序,日志是主要的调试手段。分布式应用程序中存在多个实例,收集和分析日志非常具有挑战性。虽然有很多成熟的开源产品,但构建和维护这些软件的成本不小。函数计算内置了对日志收集/分析的全面支持。用户只需要在应用逻辑中输出日志,这些日志都是这些天自动收集的,可以实时查看、汇总、多种方式查询。

在上一篇文章中,我们已经通过 Serverless Devs 工具为应用程序自动创建了一个日志仓库。您可以在函数计算控制台中查看请求和应用级日志,并可以使用 SQL 语言进行高级查询。此外,Serverless Devs 工具还提供了实时日志功能,对于应用调试非常有帮助。

在项目根目录下,即s.yaml所在目录b本地调试工具,执行如下命令,输出s.yaml中定义的所有服务的日志。

sudo -E s 日志

用户还可以查看指定服务的日志。

sudo -E s 商城管理员日志

通过-t参数,用户还可以进入观察模式,实时查看日志。

sudo -E s 商城管理员日志 -t

此时,Serverless Devs 工具会实时监控 mall-admin 应用下所有实例的日志,并实时显示新生成的日志。之后,当我们通过浏览器或者 curl 向 mall-admin 应用发送请求时,可以看到对应的请求处理日志输出。

Serverless Devs 还支持根据关键字查询日志。例如,我们可以执行以下命令查看 mall-admin 应用程序的 ERROR 级别日志。

s mall-admin 日志 -t –keyword=ERROR

指标多维查询展示

除了 Serverless Devs 的命令行工具外,用户还可以在函数计算控制台上查看函数、实例、请求等多个维度的日志。

以 mall-admin 为例,在函数计算控制台左侧导航栏中,点击“服务和函数”,选择 mall-admin 服务,然后选择服务下的同名函数进入 mall-管理功能详情页面。单击监控指标选项卡。

如下图所示,请求列表展示了请求的执行情况,包括成功/失败、执行在哪个函数版本上、执行时间、内存使用情况、执行在哪个实例上等。查询和请求相关日志也很方便。

下图展示了实例维度的信息。除了指标,用户还可以滚动到页面底部查看对应的实例列表,并登录实例进行相关操作。

注意:函数计算的计量实例完全由系统管理,实例空闲一段时间后由系统回收。回收的实例不再使用,无法登录。下图中灰色显示。

通过函数计算平台提供的日志采集和查询能力,无缝连接用户的开发过程。修改代码,使用Serverless Devs工具部署应用,查看日志,整个过程如丝般顺滑。

本地调试

在将应用部署到云平台之前,我们通常希望将应用部署到本地进行调试。无服务器开发工具提供在本地运行应用程序的能力。

在项目根目录(s.yaml所在目录),执行命令启动对应服务。auto参数是指自动为实例生成一个与web框架兼容的测试域名。例如,执行以下命令:

sudo -E s mall-admin 本地启动自动

该工具将在本地启动函数实例并提供要调用的 url。这样我们就可以在本地调试web应用,提高效率。

注意:每次启动本地实例时,监听端口都是随机生成的。

端云联调

很多时候,构成应用程序的微服务/功能需要与其他服务相互调用。除了在本地进行简单的单元测试外,联调或集成测试还必须将代码部署到云端。这种方式使得开发调试过程相对较长,云端的复杂环境也增加了问题诊断的难度。例如:

为了解决以上问题,Serverless Devs 提供了端云联调功能。通过端云联调,开发者可以在本地启动实例,无缝对接云环境b本地调试工具,快速进行测试和问题调试。端云联调可以帮助开发者:

修改代码,实时查看结果,用最短闭环调试迭代。它可以以最高的效率重用丰富的本地开发和调试工具。

端云联调,建立本地开发机与云应用VPC环境之间的安全隧道连接。访问云应用的流量会自动转发到本地开发机;同时,本地实例访问的外网流量也会自动转发到云应用的VPC环境。例如,本地实例访问云端的RDS数据库实例时,传统方式中,开发者只能释放RDS实例的公网访问权限。通过端云联调,可以直接通过内网访问RDS实例,无需修改任何配置。

以 mall 应用为例,整个应用由 mall-admin-web、mal-admin、mal-portal、mal-search 等多个服务组成。服务之间存在上游和下游依赖关系。例如, mall-admin-web 将向下游 mall-admin 服务发送请求。假设我们已经在测试环境部署了一整套 mall 应用服务,现在想在开发机全链路调试 mall-admin 服务,我们需要部署 mall-admin 等全套服务和数据库-web到开发机,或者通过公网与云VPC中的服务和数据库进行交互非常繁琐甚至不现实。端云联调可以让我们在本地开发机环境启动一个 mall-admin 服务的实例,并与云 VPC 环境中的其他服务和数据库安全无缝地交互。用户无需进行任何设置。

首先在 s.yaml 所在目录执行如下命令,启动 mall-admin 服务端云联调。

sudo -E s mall-admin 代理设置

然后在控制台访问 mall-admin-web 应用,可以看到相关请求已经转发到本地 mall-admin 函数实例。并且本地实例可以无缝访问云 VPC 中的数据库或其他服务。

注意:使用端云联调时,所有流量都会发送到本地实例。在函数计算上恢复实例的流量,需要执行 s deploy 重新部署相关函数。

总结

从下图中的两份报告可以看出,在 serverless 领域,调试和可观察性一直是 serverless 开发从业者的两大痛点。

函数计算作为Serverless产品,始终贯彻开发者优先的理念,在调试和可观察性方面领先于所有云厂商。在调试方面,Serverless Devs 工具支持本地调试、端云联调甚至远程调试。调试; 在可观察性方面,引入了其他厂商没有的秒级监控、实例指标、实例登录,大大提高了Serverless开发者的工作效率和幸福感。服务器更少,价值更高!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论