こんにちは!kossyです!
さて、今回はDatadog の Ruby 用トレースクライアントであるddtrace gemで、Datadogのトレース対象とするリクエストをフィルタリングする方法について、ブログに残してみたいと思います。
環境
Rails 6.1.4
Ruby 2.7.6
ddtrace 1.4.1
実装方法
結論、以下のコードをconfig/initializers/datadog.rbに記載すればOKです。
Datadog::Pipeline.before_flush( Datadog::Pipeline::SpanFilter.new { |span| span.resource =~ /フィルタリングしたいControllerクラス/ }, )
例えばサーバーヘルスチェック用のAPIをトレース対象から除外したい場合は、
Datadog::Pipeline.before_flush( Datadog::Pipeline::SpanFilter.new { |span| span.resource =~ /HealthcheckController/ }, )
のように記載すればOKです。
複数のAPIをフィルタリングしたい場合
複数のクラスをトレース対象から除外したい場合は、「|」で繋いで記載すればOKです。
Datadog::Pipeline.before_flush( Datadog::Pipeline::SpanFilter.new { |span| span.resource =~ /HealthcheckController|PingController/ }, )
意図通り動くか、正規表現部分のチェックをしてみましょう。
# マッチした場合は0が返る "HealthcheckController" =~ /PingController|HealthcheckController/ => 0 # マッチしない場合はnilが返る "HealthcheckController" =~ /PingController/ => nil "HealthcheckController" =~ /HealthcheckController/ => 0