阿里数据库_阿里云_大数据大数据分析

安全 虚拟云 浏览

小编:简介 这是"故障排除"课程的回顾节点.js应用程序:在SAP Cloud Platform Cloud Foundry中进行调试,这是在最近的SAP Inside Track比利时2019活动中发生的。 会议幻灯片可在幻灯片上看到。 会议概

简介

这是"故障排除"课程的回顾节点.js应用程序:在SAP Cloud Platform Cloud Foundry中进行调试,这是在最近的SAP Inside Track比利时2019活动中发生的。

会议幻灯片可在幻灯片上看到。

会议概述回顾博客系列:

生产环境限制

上一节在本系列的博客中,我们熟悉了为调试应用程序准备环境所需的步骤节点.js部署到SCP CF的应用程序以及如何进行调试。其中一个重要步骤是启动节点.js一个启用了检查器的应用程序,以便我们以后可以通过SSH隧道将调试器附加到检查器端口。

如果启动节点.js启用检查器的应用程序不是一个选项?例如,应用程序已部署到生产租户—在应用程序启动时使用已启用的调试器端口运行应用程序对于生产环境来说并不是一个好主意。

如果我们承认并尊重此约束,但无法在其他非生产环境中重现问题,该怎么办并且需要在唯一受影响的环境(生产环境)中调试应用程序?

在技术上有可能克服这些障碍,并在这样的环境中进行应用程序调试。在我们继续描述这项技术之前,我想鼓励每个试图在实践中应用它的人仔细评估风险(如安全性、性能、一致性等)以及对已调试的应用程序和运行环境的潜在影响,并评估与在生产环境中运行调试会话相关的结果。强烈建议高度小心地应用下面描述的技术。

启用检查器

可以在已运行的系统中启用检查器节点.js通过向应用程序的进程发送特定信号USR1来应用程序。为了实现这一点,我们将启用对应用程序容器的SSH访问,如前一篇博客中所述,并建立到应用程序容器的SSH会话。完成这项工作并通过SSH登录到应用程序容器之后,首先需要标识应用程序的进程ID节点.js应用程序—例如,数据库审计,在我们继续启用检查器之前,使用Linux命令ps-aux.

,我们可以通过列出侦听的端口来验证和确认检查器尚未运行节点.js应用程序在Linux命令netstat-anp | grep{PID}的帮助下—首先,应用程序监听的唯一端口是HTTP端口(8080)。

接下来,可以使用Linux向应用程序发送相应的信号命令kill-s SIGUSR1{PID}。

现在,让我们再次检查应用程序监听的端口–正如这次将看到的,应用程序现在不仅监听HTTP端口,而且监听9229端口,这是一个检查器端口。

调试

这一部分与上一部分已经介绍的内容没有区别博客,因为我们现在有一个节点.js在启用了Inspector和SSH访问的SCP CF中运行的应用程序对应用程序容器启用了端口转发,因此节点.js应用程序可以通过SSH隧道建立,并且可以使用前面描述的远程调试技术如果调试完成,我们通常会断开(分离)调试器并隐式关闭调试会话。但是,等等——如果我们现在就这样做,我们将不会让应用程序保持其原始状态,因为当应用程序部署并启动时,检查器最初还没有启动,现在虽然调试会话关闭,但检查器仍保持启用状态并侦听传入的连接。我们将解决这一问题,并确保我们执行必要的清理活动并禁用检查器。

要启用检查器,我们可以从使用特定信号并将其发送到应用程序的进程中获益–相反,这种方法目前不能用于禁用检查器节点.js运行时不提供开箱即用从进程外部禁用检查器的功能。

选项之一是重新启动进程节点.js应用程序–假定它最初是用禁用的检查器启动的,重新启动应用程序将导致用禁用的检查器再次启动。虽然这在技术上是可行的,华为云服务器,但是这个选项看起来并不是很理想,因为它需要重新启动应用程序,而且这是我们在生产环境中宁愿避免的事情。

其他选项如下:在没有标准机制从流程外部禁用检查器的情况下,我们需要从流程内部禁用检查器使用内部API的进程,或引入一个自定义机制,该机制将触发内部API以禁用检查器,公有云服务器,并且可以从进程外部访问该机制。

我们将在本博客中重点关注的一个选项,是通过使用Node REPL console直接调用相应的内部API从流程中禁用检查器。当调试器会话仍然连接到应用程序时,在Node REPL console中,我们可以使用Inspector API并通过调用Inspector的方法require('Inspector')来触发Inspector的停用(关闭)。close():

这将指示节点.js运行时禁用检查器并关闭正在使用的相应端口上的侦听器一个检查员。这可以通过列出节点.js再应用一次,观察到应用程序仅在HTTP端口上侦听,表明已禁用检查器。

另一个–更高级–选项源自上述方法,但不需要在Node REPL控制台中调用Inspector的方法close()。相反,可以通过为尚未使用的专用进程信号实现和注册信号事件侦听器来增强应用程序:进程.on({SIGNAL},处理程序)。处理程序应实现与上述类似的逻辑,如果启用,则禁用检查器。有了这个增强,可以通过向应用程序的进程发送相应的信号来禁用检查器,云服务器和,方法与前面在运行中启用检查器时使用的方法类似节点.js应用

当前网址:http://www.vmchk.com/secaidapei/2021/0407/72260.html

 
你可能喜欢的: