菜单
开源

Ruby

Ruby Profiler 革新了 Ruby 应用程序的性能调优。与 Pyroscope 集成后,它提供实时性能数据,使开发人员能够深入研究其 Ruby 代码库。该工具对于识别性能问题、优化代码效率以及提升 Ruby 应用程序的整体速度和可靠性至关重要。

注意

请参阅可用剖析类型以获取 Ruby 支持的剖析类型列表。

开始之前

要捕获和分析剖析数据,您需要托管的 Pyroscope OSS 服务器或托管的带有 Grafana Cloud Profiles 的 Pyroscope 实例(需要免费的 Grafana Cloud 账户)。

Pyroscope 服务器可以是用于开发的本地服务器,也可以是用于生产的远程服务器。

将 Ruby 剖析添加到您的应用程序

pyroscope gem 添加到您的 Gemfile 中

bash
bundle add pyroscope

配置 Ruby 客户端

将以下代码添加到您的应用程序中。如果您使用 Rails,请将其放在 config/initializers 目录中。此代码将初始化 Pyroscope profiler 并开始剖析。

ruby
require 'pyroscope'

Pyroscope.configure do |config|
  config.application_name = "my.ruby.app" # replace this with some name for your application
  config.server_address   = "http://my-pyroscope-server:4040" # replace this with the address of your Pyroscope server
end

如何向 Ruby 应用程序添加剖析标签

Pyroscope Ruby 集成提供了多种方式来标记剖析数据。例如,您可以在初始化 profiler 时提供标签:

ruby
require 'pyroscope'

Pyroscope.configure do |config|
  config.application_name = "my.ruby.app"
  config.server_address   = "http://my-pyroscope-server:4040"

  config.tags = {
    "hostname" => ENV["HOSTNAME"],
  }
end

或者,您可以动态地标记代码的某些部分:

ruby
Pyroscope.tag_wrapper({ "controller": "slow_controller_i_want_to_profile" }) do
  slow_code
end

Rails 剖析自动插桩

默认情况下,如果您将 Pyroscope 添加到 Rails 应用程序,它将自动为您的 action 标记一个 action="<controller_name>/<action_name>" 标签。

要禁用 Rails 自动插桩,请将 autoinstrument_rails 设置为 false

ruby
Pyroscope.configure do |config|
  config.autoinstrument_rails = false
  # more configuration
end

使用 Ruby SDK 将数据发送到 Pyroscope OSS 或 Grafana Cloud Profiles

ruby
require "pyroscope"

Pyroscope.configure do |config|
  config.application_name = "example.ruby.app"
  config.server_address = "<URL>"
  config.basic_auth_username='<User>'
  config.basic_auth_password='<Password>'
  # Optional Pyroscope tenant ID (only needed if using multi-tenancy). Not needed for Grafana Cloud.
  # config.tenant_id='<TenantID>'
end

要配置 Ruby SDK 将数据发送到 Pyroscope,请将占位符 <URL> 替换为相应的服务器 URL。这可以是 Grafana Cloud URL 或您自己的自定义 Pyroscope 服务器 URL。

如果您需要将数据发送到 Grafana Cloud,您必须配置 HTTP Basic 认证。将 <User> 替换为您的 Grafana Cloud stack 用户,将 <Password> 替换为您的 Grafana Cloud API 密钥。

如果您的 Pyroscope 服务器启用了多租户,您需要配置一个租户 ID。将 <TenantID> 替换为您的 Pyroscope 租户 ID。

Ruby 剖析示例

请查看以下资源,了解更多关于 Ruby 剖析的信息:

  • Ruby 示例演示了如何使用 Pyroscope 对包括 Rails 在内的 Ruby 应用程序进行剖析。
  • play.grafana.org 上的Ruby 演示