Lightrun - 调试生产问题的最佳方法

658 阅读5分钟

简介

在这篇文章中,我将向你介绍Lightrun,这是我最近在开发RevoGain时发现的一个非常有用的工具,它帮助我调试生产中发生的问题。

Lightrun与我之前使用过的其他工具不同,因为它允许我们在运行时动态插入日志条目,捕捉快照,甚至注入指标,而无需改变你的生产代码。

这在调查客户报告的问题时特别有用,因为我们可以在用户执行可以复制问题的操作时找出问题。很酷,对吗?

开始使用Lightun

设置Lightrun非常简单,只需不到5分钟就可以完成配置。

  • 第1步:安装Lightrun IntelliJ IDEA插件,该插件在终极版和社区版中都适用。
  • 第2步:在Lightrun应用平台上创建一个账户。
  • 第3步:安装Lightrun JVM代理,该代理将被用来反省我们的应用程序。在Lightrun App平台上,你可以找到关于如何根据你的开发和生产系统要求来设置代理的说明。
  • 第四步:配置你的应用程序以使用Lightrun JVM代理。

在我的案例中,由于RevoGain是一个Spring Boot应用程序,我可以在我的本地Windows环境中提供代理,像这样。

java -agentpath:%USER_HOME%/agent/lightrun_agent.dll ^ 
     -jar revogain-%REVOGAIN_VERSION%.jar

而且,对于生产系统,我可以使用这个基于Linux的命令。

java -agentpath:~/agent/lightrun_agent.so -jar revogain-$REVOGAIN_VERSION$.jar

Lightrun动态日志

解析交易报表的一个很常见的问题是交易余额不相加。这可能发生在还不支持的操作上,或者是因为报表文件或解析逻辑被破坏了。

调试这类问题需要有交易报表,不幸的是,并不是所有的客户都愿意提供报表让我们在本地进行调试。所以,在这些特殊的情况下,添加一个动态日志条目是可以帮助我们在用户解析他们的报表时发现问题的。

因此,让我们添加一个动态日志条目,显示特定用户的计算交易余额。

Lightrun simple log popup

Format 文本字段定义了要被记录的信息。{calculatedBalance} 占位符将在执行相关方法时被替换为calculatedBalance 局部变量的值。

Condition 文本字段允许我们定义过滤条件,这样只有当所提供的条件评估为true ,信息才会被记录下来。在我们的案例中,我们只想为标识符值为1 的用户显示这个信息,如高级日志弹出屏幕中所示。

LightRun log advanced popup

1因此,这条日志信息只对标识值为id 的用户打印,而对其他用户,它将被忽略。

Lightrun的日志信息被打印在应用程序日志中,但我们也可以把它们输送到我们的IDE中。

接下来,我们可以要求用户导入一个新的交易报表,calculatedBalance 的日志条目将被打印在Lightrun控制台中,如下所示。

Lightrun log messages

聪明!

看看余额是如何根据我们从报表中解析出的交易操作来计算的。如果计算出来的余额与报表提供的余额值不一致,我们就可以向客户指出是什么原因导致了这个问题,以便他们也能检查出来。

如果没有Lightrun,我们就不能只对产品系统进行调试,因为整个服务器会停顿,因此会影响可用性。

而且,这还不是全部。Lightrun允许我们捕捉动态快照,我们将在下一节看到。

Lightrun运行时快照

Lighrun提供的另一个很酷的功能是捕捉运行时快照,其中包含堆栈跟踪和快照拍摄时的可用变量。

由于RevoGain用户被限制在外部支付处理器FastSpring目前运营的国家,我们想调查用户国家无法解决的情况,为此,我们将使用以下Lightrun快照。

Lightrun snapshot popup

Condition 文本字段仅在country 本地变量为null 时用于激活快照,这意味着位置无法被获取。

当试图从一个GeoLocationService 无法处理的IP地址访问应用程序时,我们可以看到Lightrun是如何在创建快照时设法捕获内存中的上下文的。

Lightrun snapshot result

请注意,在country 对象不能被解决的时候,geoLocationDTO 对象被捕获。

这是一个非常有价值的功能,因为它可以让我们一次汇总多种信息,而不是使用单独的日志来实现。

Lightrun动态度量

我们还可以动态地添加指标,而不用改变我们正在监控的源代码。例如,我采用这一功能来计算使用Stop Forum Spam API验证电子邮件地址所需的时间。

我验证电子邮件地址的原因是,有大量的机器人在互联网上运行,试图用无用的账户侵扰我们的应用程序,消耗数据库的空间。

使用Lightrun添加持续时间指标非常容易,就像动态日志和运行时快照的情况一样,我们可以直接从IntelliJ IDEA中完成。

Lightrun metrics duration popup

现在,每次用户注册时,isSpam 方法的调用都会被Lightrun拦截和监控,我们会在Lightrun控制台中得到调用持续时间。

Lightrun metrics duration result

棒极了,对吗?

结论

Lightrun很容易使用,但非常强大,因为我们可以注入日志,收集快照,或使用度量标准来检测我们的代码,甚至不需要改变生产源代码,这就需要重新部署。这一点很重要,因为我为我的客户提供即时聊天,我可以在我们的即时对话中调试他们的生产问题。这有助于我为我的客户提供特殊的支持,如果没有Lightrun这样的工具,我是无法提供这种支持的。

在这篇文章中,我使用了Lightrun免费层,它仅限于3个代理。然而,由于RevoGain是一个宏伟的巨石,这对我来说不是一个问题。

如果你使用的是微服务架构,并且你希望部署超过3个代理,那么你将不得不使用专业版来代替。