支持的技术编辑

Elastic APM Ruby Agent 内置支持许多框架和库。通常,我们希望支持所有最流行的库。如果您最喜欢的库缺失,请随时在问题中提出请求,或者更好的是,创建一个拉取请求。

Ruby编辑

我们遵循 Ruby 自己的维护策略,并根据 Ruby 维护分支 正式支持所有当前维护的版本。

Web 框架和库编辑

我们对 Ruby on Rails 和所有兼容 Rack 的 Web 框架提供自动支持。

我们针对所有支持的 Rails、Sinatra 和 Grape 的次要版本进行测试。

Ruby on Rails编辑

我们目前支持 4.2 以后的所有 Rails 版本。这遵循 Rails 自己的 安全策略

请参阅 Rails 入门

Sinatra编辑

我们目前支持 1.0 以后的所有 Sinatra 版本。

请参阅 Rack 入门

Grape编辑

我们目前支持 1.2 以后的所有 Grape 版本。

请参阅 Grape 示例

数据库编辑

我们使用以下方法自动检测数据库操作

  • ActiveRecord (v4.2+)
  • DynamoDB (v1.0+)
  • Elasticsearch (v0.9+)
  • Mongo (v2.1+)
  • Redis (v3.1+)
  • Sequel (v4.35+)

外部 HTTP 请求编辑

我们使用以下库自动检测外部请求并添加对分布式跟踪的支持

  • net/http
  • Http.rb (v0.6+)
  • Faraday (v0.2.1+)

注意: 这些库通常假设 localhost(如果未指定 Host),因此代理也是如此。

后台处理编辑

我们使用以下方法自动检测后台处理

  • DelayedJob
  • Sidekiq
  • Shoryuken
  • Sneakers (v2.12.0+) (实验性,请参阅 #676)
  • Resque (v2.0.0+)
  • SuckerPunch (v2.0.0+)

Resque编辑

要使代理与 Resque 一起使用,您需要在启动 Resque 工作进程之前要求 elastic_apm/resque

例如,在您的 Rakefile

require 'resque'
require 'elastic_apm'
require 'elastic_apm/resque'

当您启动 Resque 时,您应该在 Resque 日志中看到一系列类似于以下内容的消息

I, [XXX #81227]  INFO -- : Starting worker main
D, [XXX #81227] DEBUG -- : Registered signals
I, [XXX #81227]  INFO -- : Running before_first_fork hooks
D, [XXX #81227] DEBUG -- : Starting ElasticAPM agent

另外,请确保将 Resque 环境变量 RUN_AT_EXIT_HOOKS 设置为 true。否则,在代理有机会将所有 fork 的事件发送到 APM 服务器之前,fork 可能会被终止。

SuckerPunch编辑

SuckerPunch 中异步执行的作业会自动检测。

请注意,在用户定义的 JobClass#perform 方法中引发的错误将在由代理处理之前首先由 SuckerPunch 异常处理程序处理。处理程序通过版本 2.0 中的 SuckerPunch.exception_handler 访问/设置。除非您在异常处理程序中重新引发错误,否则代理事务将被标记为成功。您也可以通过 ElasticAPM.report 在自定义 SuckerPunch 异常处理程序中显式报告错误。

gRPC编辑

我们使用 grpc gem 自动检测 gRPC。请注意,这是实验性的,因为截至 1.27.0 版本,grpc gem 对 Interceptors 的支持是实验性的。

要检测客户端,请在 Stub 创建时将 ElasticAPM::GRPC::ClientInterceptor 添加为 interceptor

Helloworld::Greeter::Stub.new(
  'localhost:50051',
  interceptors: [ElasticAPM::GRPC::ClientInterceptor.new]
)

要检测服务器,请添加 ElasticAPM::GRPC::ServerInterceptor

GRPC::RpcServer.new(interceptors: [ElasticAPM::GRPC::ServerInterceptor.new])