支持的技术
编辑支持的技术编辑
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])