自定义插桩编辑

安装并正确配置后,ElasticAPM 会自动将应用程序的请求/响应包装在事务中并报告其错误。如果您使用 Sidekiq 或 DelayedJob,它还会包装每个后台作业。

但也可以创建您自己的事务,并为任何自动或自定义事务提供跨度。

请参阅 ElasticAPM.start_transactionElasticAPM.start_span

助手编辑

如果您只想检测常规方法,ElasticAPM 包含一些很棒的助手。

class Thing
  include ElasticAPM::SpanHelpers

  def do_the_work
    # ...
  end
  span_method :do_hard_work # takes optional `name` and `type`

  def self.do_all_the_work
    # ...
  end
  span_class_method :do_hard_work, 'Custom name', 'custom.work_thing'
end

自定义跨度示例编辑

如果您已经在事务中(很可能),并且想要检测其中的某些工作,请添加自定义跨度

class ThingsController < ApplicationController
  def index
    @result_of_work = ElasticAPM.with_span "Heavy work" do
      do_the_heavy_work
    end
  end
end

自定义事务示例编辑

如果您不在事务中(例如,在您的常见 Web 应用程序之外),请像这样启动和管理您自己的事务

class Something
  def do_work
    transaction = ElasticAPM.start_transaction 'Something#do_work'

    begin
      Sequel[:users] # many third party libs will be automatically instrumented
    rescue Exception => e
      ElasticAPM.report(e)
      raise
    ensure
      ElasticAPM.end_transaction('result')
    end
  end
end

注意:如果代理事先未启动,则此操作将无效。请参阅 ElasticAPM.start