【译】Lightrun - 调试Java程序生产问题的优秀工具转载
介绍
在本文中,我将向您展示Lightrun,这是我最近在开发RevoGain时发现的一个非常有用的工具,它帮助我调试生产中出现的问题。
Lightrun与我以前使用过的其他工具不同,因为它允许我们在运行时动态插入日志条目,捕获快照,甚至在不更改生产代码的情况下注入指标。
这在调查客户报告的问题时特别有用,因为我们可以在用户执行可以复制问题的操作时找出问题。酷,对吧?
Lightrun入门
设置Lightrun非常简单,配置它只需要不到5分钟:
- 第1步:安装Lightrun IntelliJ IDEA插件,该插件适用于Ultimate版本和社区版,
- 第2步:在Lightrun应用程序平台上创建一个帐户。
- 第3步:安装Lightrun JVM代理,该代理将用于内省我们的应用程序。在Lightrun应用程序平台上,你可以根据开发和生产系统要求找到有关如何设置代理的说明,
- 第4步:将你的应用程序配置为使用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动态日志记录
解析交易报表的一个非常常见的问题是交易余额加起来不出来。对于尚未支持的操作,或者因为语句文件或解析逻辑被破坏,可能会发生这种情况。
调试此类问题需要具有交易对账单,不幸的是,并非所有客户都愿意提供它,以便我们在本地调试它。因此,在这些特殊情况下,添加动态日志条目将帮助我们在用户解析其语句时发现问题。
因此,让我们添加一个动态日志条目,显示特定用户的计算交易余额:
“Format
”文本栏位定义了要记录的消息。在执行相关方法时,{calculatedBalance}
占位符将被calculatedBalance
局部变量的值替换。
Condition
文本字段允许我们定义过滤条件,以便仅在提供的条件计算为true
时才记录消息。在我们的案例中,我们希望仅为标识符值为1的用户显示此消息,如高级日志弹出式屏幕截图所示。
因此,此日志消息仅为id
值为1的用户打印,而对于其他用户,它将被忽略。
Lightrun日志消息打印在应用程序日志中,但我们也可以将它们管道到我们的IDE。
Next, we can ask the user to import a new trading statement, and the calculatedBalance
log entries are going to be printed in the Lightrun Console, as follows:
太棒了!
查看如何根据我们从对账单中解析的交易操作计算余额。如果计算的余额与语句提供的余额值不匹配,我们可以向客户确定导致问题的原因,以便他们也可以检查它。
没有Lightrun,我们不能只是调试生产系统,因为整个服务器将停止,从而影响可用性。
而且,这还不是全部。Lightrun允许我们捕获动态快照,我们将在下一节中看到。
Lightrun运行时快照
Lighrun提供的另一个很酷的功能是能够捕获运行时快照,这些快照包含堆栈跟踪和拍摄快照时可用的变量。
由于RevoGain用户仅限于外部支付处理器FastSpring当前运行的国家/地区,我们希望调查用户国家无法解决的情况,因此,我们将使用以下Lightrun快照。
只有当country
本地变量为null
时,Condition
文本字段才用于激活快照,这意味着无法获取位置。
当尝试从GeoLocationService
无法处理的IP地址访问应用程序时,我们可以看到Lightrun如何在创建快照时捕获内存上下文:
注意在country
对象无法解析时捕获的geoLocationDTO
对象。
这是一个非常有价值的功能,因为它可以让我们一次聚合多个信息,而不必使用单个日志。
Lightrun动态指标
我们还可以动态添加指标,而无需更改我们正在监控的源代码。例如,我使用此功能来计算使用Stop Forum Spam API验证电子邮件地址需要多长时间。
我验证电子邮件地址的原因是,互联网上运行的大量机器人试图用消耗数据库空间的无用帐户感染我们的应用程序。
使用Lightrun添加持续时间指标非常简单,就像动态日志和运行时快照一样,我们可以直接从IntelliJ IDEA进行操作:
现在,每次用户注册时,Lightrun都会拦截和监控 isSpam
方法调用,我们将在Lightrun控制台中打印通话持续时间:
结论
Lightrun易于使用,但功能非常强大,因为我们可以使用指标注入日志、收集快照或检测我们的代码,而无需更改需要重新部署的生产源代码。这很重要,因为我正在为我的客户提供实时聊天,我可以在我们的实时对话中调试他们的生产问题。这有助于我为客户提供卓越的支持,如果没有像Lightrun这样的工具,我无法提供这种支持。
对于这篇文章,我使用了Lightrun Free Tier,它仅限于3个代理。然而,由于RevoGain是一块雄伟的巨石,这对我来说不是问题。
如果你使用的是微服务架构,并且希望部署3个以上的代理,那么必须使用专业版。