线上Bug照妖镜——应用观测器(App Observer)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 应用观测器(App Observer)是一款代码行级别的实时非阻塞应用调试工具,其动态日志、非阻塞断点与实时Metrics功能可以让你轻松在线上系统完成对问题的排查与实时观测。

(全文约1700字,阅读时间约5分钟)

随着业务的发展,程序逻辑会变得越来越复杂,为了保证线上系统不出 Bug,我们可能做了很多努力。但是,谁又能保证不出线上 Bug 呢?

唉!世界上最痛苦的是:工作还在,奖金没了。只有尽快解决才能挽救年终奖。然而世界上最遥远的距离就是可以调试的本地和出现 Bug 的线上。那么面对一些系统,既不能打断点调试,Bug 又无法在本地复现,我们该如何解决?

接下来,我们就来讨论一下这一富有挑战性的工作。

假如生产环境有个 Bug


调查线上问题,我们首先会借助于 Log、Tracing 和 Metrics。对于简单的报错,查 Log 就能解决。对于复杂的系统调用和逻辑错误,可能要借助于 Tracing 查看上下文。调查性能问题,查看 Metrics 会更有帮助。

如果通过上述手段就已经定位到了问题,是很幸运的。但有时我们会发现关键的位置缺少了日志,没法准确的获知代码运行情况,这会极大阻碍我们清晰的定位问题。

缺少日志只能补上,再发布一次。对于大多数应用系统来说,发布一次的时间成本是不低的,从数分钟到数小时不等。补日志的过程来上几次,要耗费很多心力,同时也要顶住不小的业务侧的压力。所以生产系统上发现了 Bug,找起来通常很不容易。

有没有更好的方法?


和稍有经验的同事讨论,相信他一定会给你推荐 Arthas。Arthas 相比与远程 Debug,对于环境的依赖更少,也不会因为打断点而阻塞业务请求。但是如果你不是一个运维老炮,那当线上问题发生了,求助于Arthas,你可能会发现短时间内不知从何入手,Arthas 大概有30+ 子命令,每个子命令都有一系列的参数。

有没有一款工具,即像远程 Debug 一样操作简便,又像 Arthas 那样对生产环境的要求和影响都比较小?答案是:当然!这款工具正是本文要向大家介绍的应用观测器(App Observer),一款代码行级别的实时非阻塞应用调试工具。



应用观测器(App Observer)


动态日志 —— 即时添加,即时生效


在排查问题时,你是否后悔过当初忘记打印日志?有了动态日志,再也不会有这样的烦恼。动态日志的生效过程,不需要重启应用程序,做到了“即时添加,即时生效”。添加动态日志时,可以使用条件表达式控制日志的打印与否,还可以在日志表达式中观测变量值。在整个过程中,动态日志不会改变原有的代码行数,不影响通过原日志系统排查问题。


非阻塞断点 —— 让你像 Debug 一样排查问题


非阻塞断点在问题排查上,比动态日志跟进一步。最显著的增强点在于可以观测程序的执行堆栈,让程序的调用链路一目了然。此外,在观测变量值方面,可以一步到位,自动观测函数体内的所有变量。所有的观测行为,都不会阻塞程序的执行,真正做到了似断点又非断点。


实时 Metrics —— 清爽易用的性能统计工具


实时 Metrics 用于辅助排查程序的性能问题,不需要添加非业务代码,在保持了程序逻辑清爽的同时,完成了统计观测:

  • 计数器:用于统计某一行代码的执行次数;
  • 方法执行耗时:用于统计函数体的执行耗时;

获取方式


应用观测器(App Observer)是Alibaba Cloud Toolkit for IntelliJ 插件的一部分,已经随着 2021.11.1 版本的插件上架插件市场:https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit。已经安装 IntelliJ IDEA 的开发者也可以在 IDEA 的插件市场搜索 “Alibaba Cloud Toolkit” 进行安装。

详细的使用方式,可以参考官方的使用文档:https://help.aliyun.com/document_detail/326231.html


未来可期


支持更多的 Platform 和 Runtime


当前应用观测器仅支持 Java 应用,接下来我们会增加更多语言的支持。当前发布版本也仅支持观测运行在 Linux 中的应用服务,后续会逐步支持观测 Windows 下的应用程序。


云端控制台


当前应用观测器采用了插件直连应用的模式,在网络通路上我们借到了 SSH。这需要假设用户有 SSH 访问权限。接下来我们计划提供一个云端服务。有了云端服务后,可以把观测数据给记录下来,绘制成图表,方便用户在较大的时间尺度上了解服务健康状况。同一个应用下不同开发者添加的观测点也可以相互看到,会成为一种运维协作的新方式。


云原生应用平台集成


当前,在首次使用应用观测器时,有一个添加 Java Agent 参数并重启的过程。对于云原生应用来说,应用观测的能力,最好是与生俱来的。所以应用观测器这类工具,势必会成为云原生应用的 Sidecar。我们后续会和 ACK 服务、Serverless 服务、SAE 服务进行集成,让云原生用户能使用上开箱即用的实时应用观测能力。


联系方式


关于应用观测器的任何问题,都可以加入钉钉群(群号:34965379)寻求帮助,后续的新特性也会在钉钉群里进行更新。

此外,也欢迎把您遇到的问题反馈至我们的 Github Issue 空间:https://github.com/alibaba-cloud-toolkit/cloud-toolkit-jetbrains/issues


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
3月前
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
|
3月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
3月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
127 0
|
3月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
|
3月前
|
开发框架 前端开发 JavaScript
【Azure App Service】.NET应用读取静态文件时遇见了404错误的解决方法
【Azure App Service】.NET应用读取静态文件时遇见了404错误的解决方法
|
3月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
3月前
|
存储 大数据 索引
【Azure Contianer Apps】在云上使用容器应用时收集日志遇见延迟问题
【Azure Contianer Apps】在云上使用容器应用时收集日志遇见延迟问题
|
3月前
|
安全 API 网络架构
【Azure Logic App】使用 Easy Auth 在标准逻辑应用(Standard Logic App)中触发工作流
【Azure Logic App】使用 Easy Auth 在标准逻辑应用(Standard Logic App)中触发工作流
|
3月前
|
开发者
【Azure Logic App】中国区标准版本的逻辑应用(Standard Logic App)无法查看历史执行记录的解决之道
【Azure Logic App】中国区标准版本的逻辑应用(Standard Logic App)无法查看历史执行记录的解决之道