自定义插桩
编辑自定义插桩编辑
安装并正确配置后,ElasticAPM 会自动将应用程序的请求/响应包装在事务中并报告其错误。如果您使用 Sidekiq 或 DelayedJob,它还会包装每个后台作业。
但也可以创建您自己的事务,并为任何自动或自定义事务提供跨度。
请参阅 ElasticAPM.start_transaction
和 ElasticAPM.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。