支持的技术
编辑支持的技术
编辑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+)
注意: 这些库通常在未指定 Host
时假设 localhost
,因此代理也是如此。
后台处理
编辑我们使用以下方法自动检测后台处理
- 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
。否则,在代理有机会将所有分叉的事件发送到 APM 服务器之前,可能会终止分叉。
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])