Ruby 故障排除
使用 Instana 监控 Ruby 应用程序时,您可以采取以下步骤来诊断可能出现的任何问题。 Instana gem 是全自动的,但如果出现问题,请打开支持案例。
受支持的组件
在花太多时间诊断问题之前,首先要确保相关组件和环境是受支持的。 所有支持组件的列表可在 Ruby 支持版本中找到。
问题领域
您可能会遇到以下问题:
仪表板中不显示 Ruby 进程
要解决这个问题,请完成以下步骤
验证您的环境是否受支持,以及您运行的 Ruby 版本是否受支持。
在花太多时间诊断问题之前,首先要确保相关组件和环境是受支持的。 所有支持组件的列表可在 Ruby 支持版本中找到。
检查安装步骤。
验证是否正确遵循了安装步骤。
验证应用程序捆绑包中是否安装了 Instana Ruby gem。
您可以通过查看应用程序
Gemfile中的gem "instana"和Gemfile.lock文件中提及的instana进行验证。 或者, 在 Ruby 应用程序目录下运行bundle exec gem list。 此命令会列出应用程序捆绑包中的所有 Ruby gem。 验证 Instana Ruby gem 是否在该列表中。确保 Instana gem 是最新版本。
发布的最新版本可在 RubyGems. 在
Gemfile.lock中,您必须看到 Instana Ruby gem 的最新版本,并在名称旁边注明,如instana (x.x.x)。验证应用程序日志输出中是否提到 Instana。
应用程序或容器日志必须始终包含类似于
Stan is on the scene. Starting Instana instrumentation version x.x.x启用调试输出并重新检查应用程序或容器日志。
为 Ruby 流程设置环境变量
INSTANA_DEBUG=true,然后重新验证应用程序或容器日志(与 #3相同)。 特别注意是否存在任何与 Instana 相关的错误信息。检查 Instana 主机代理日志,查看是否有与 Ruby 进程相关的信息。
尝试从控制台以 "verbose(详细)"模式启动 Ruby 应用程序。
如需启动,请参阅应用程序中的测试部分。 特别注意查看 Ruby 应用程序输出中是否出现任何与 Instana 相关的错误信息。
提交支持单。
如果您验证了前面的所有步骤,但 Ruby 进程仍未显示在 Instana 面板上,请打开支持案例进行进一步调查。
支持票据必须包括
- 环境详情:平台、Ruby 版本和使用的框架
- 前面所有验证的总结。
Ruby 应用程序没有痕迹
如果 Instana Ruby 应用程序在 Instana 面板上,但应用程序似乎没有任何痕迹,请完成以下步骤:
检查是否支持您的应用程序框架。
检查 Ruby 应用程序中正在使用的组件是否受支持。
检查
::Instana::Rack中间件是否处于活动状态。如果使用的是基于 Rack 的框架(如 Ruby on Rails),请确保
::Instana::Rack中间件已作为中间件正确安装。 在正常情况下,会针对各种框架自动安装此中间件。要在 Ruby on Rails 中进行验证,可以运行以下命令:
bundle exec rake middleware您必须查看
::Instana::Rack的条目。 如果需要安装,可以手动安装。在 Gemfile 中使用
require => false检查是否延迟加载 Instana gem。不鼓励延迟加载 Instana Ruby gem,因为各种堆栈中的引导过程通常严格且依赖于顺序。 延迟加载的一个常见症状是缺少
::Instana::RackRack 中间件,而该中间件可启动对传入请求的跟踪。如果出于某种原因,你仍然喜欢后期加载 Instana Ruby gem,那么请务必按照安装 Instana Rack 中间件的手册说明 (如有需要)进行安装。
启用调试输出并重新检查应用程序或容器日志。
为 Ruby 流程设置环境变量
INSTANA_DEBUG=true,然后重新验证应用程序或容器日志(与 #3相同)。 特别注意是否出现任何与 Instana 相关的错误信息。从应用程序控制台生成自定义跟踪。
如果其他方法都不奏效,可以打开应用程序控制台,运行以下命令生成自定义跟踪:
require "instana" Instana.tracer.in_span(:my_custom_trace) do sleep 1 end成功并启用调试输出(如上一步所述)后,必须在应用程序日志中看到以下一行:
Instana:: Reporting 1 spans然后,查看 Instana 仪表板(查询分析下的
call.span_typeSDK)。 您必须看到一个名为 "my_custom_trace "的跟踪。检查 Instana 主机代理日志,查看是否有与 Ruby 进程相关的信息。
提交支持单。
如果您验证了所有步骤,但 Instana 仪表板上仍看不到 Ruby 跟踪,请提交支持票据以进一步调查。
支持票据必须包括
- 环境详情:平台、Ruby 版本和使用的框架
- 前面所有验证的总结。
容器化环境中代理 CPU 占用率高
在使用 fork 作为并发基元的 Ruby 进程的容器化环境中,代理在尝试跟踪新创建的进程时可能会超负荷。
确保代理有足够的资源来处理请求
如果采取了限制代理所需 CPU 和内存的措施,请确保所设置的限制为代理提供了足够的资源,使其能够完成所有必要的任务。
禁用流程查找
通过将下列内容添加到代理程序配置,您还可以禁用代理程序的“快速路径”。 这种配置可以减少代理消耗的资源,但如果进程在向代理发送任何数据之前退出,则可能导致跟踪被丢弃。 对于使用
fork作为并发基元并带有短暂子进程的应用程序,通常会出现这个问题。com.instana.processlookup: enabled: false
日志和环境变量
默认情况下, gem 只记录显示是否遇到任何问题的信息。 如果需要更详细的日志记录输出,请设置 INSTANA_DEBUG 环境变量。 它能在 Instana gem 中启用调试级日志记录。
下图显示 Instana 控制台输出:

在上例中,可以看到主机代理不可用(因为它没有运行或没有安装)。 主机代理可用后,Instana gem 将自动重新连接,无需任何干预。
有关控制日志输出方法的更多信息,请参阅 Ruby 配置页面。
在应用程序中进行测试
要从应用程序中诊断 Instana gem,通常打开带有详细日志记录的应用程序控制台就足以发现问题。
下图显示 Rails 控制台输出: 
在前面的示例中,你可以看到 Instana Ruby gem 初始化、安装一些组件和成功通知: Host agent available. We're in business。
禁用单个组件
如果 gem 的特定部分(比如,检测)对您造成问题,那么您可以通过仅禁用该组件来暂时避免此问题。 有关如何启用和禁用单个组件的更多信息,请参阅 Ruby 配置页面。