v8.7.0
APM logs-in-contextのログ転送がデフォルトで有効に
自動アプリケーションログ転送がデフォルトで有効になりました。このバージョンのエージェントは、エンリッチされたアプリケーションログをNew Relicに自動的に送信します。この機能の詳細についてはこちらをご覧ください。また、追加の設定オプションについてはこちらをご覧ください。アカウントごとにログの取り込みをオン/オフに切り替える方法については、こちらをご覧ください。
非同期サポートおよびスレッドの計装の改善
以前は、エージェントはすでに実行中のトランザクションの内部で作成されたスレッド内で、イベントとメトリクスを記録できませんでした。このリリースには、マルチスレッドアプリケーションによるスレッドの自動計装をサポートする2つの新しい設定オプションが含まれています。新しい設定オプションである
instrumentation.thread.tracing(デフォルトでは無効)が導入されました。これを有効にすると、エージェントはアプリケーションによって作成されたすべてのスレッド内にNew Relicトレースを挿入できるようになります。一部のスレッドのみをNew Relicによってインストゥルメントされた状態にしたいアプリケーションをサポートするために、New Relicの計装を含むスレッドを作成する新しいクラスNewRelic::TracedThreadを利用できます。詳細については、APIドキュメントをご覧ください。このリリースに含まれる新しい設定オプションは次のとおりです:
設定名
デフォルト
行動
instrumentation.threadauto(有効)エージェントが非同期トランザクション内にスパンを適切にネストできるようにします。
instrumentation.thread.tracingfalse(無効)アプリケーションで作成されたすべてのスレッドにトレースを自動的に追加します。これは、今後のリリースでデフォルトで有効になる可能性があります。
この機能のエントリーポイントをチームに提供するgistを共有していただいた@mikeantonelliに感謝いたします。
Ruby 2.2のサポートを非推奨化
Ruby 2.2は2018年3月31日にサポートを終了しました。エージェントはRuby 2.2のサポートを非推奨としました。次のメジャーリリースでは、このバージョンに対する破壊的変更が行われる予定です。
トランザクションイベントの更新された設定オプションを追加し、以前の設定を非推奨にしました。
このリリースでは、以下の計装が非推奨になります:
非推奨
置き換え
ActiveMerchant 1.64.0以下
ActiveMerchant 1.65.0以降
ActiveRecord 3.2.22.5以前
ActiveRecord 4.0.0以降
Acts As Solr(すべてのバージョン)
なし
Authlogic(すべてのバージョン)
なし
Bunny 2.6.7以前
Bunny 2.7.0以降
Dalli 2.7.6以前
Dalli 2.7.7以降
DataMapper(すべてのバージョン)
なし
Delayed Job 4.1.2以下
Delayed Job 4.1.3以降
Excon 0.55.0以下
Excon 0.56.0以降
Grape 0.19.1以前
Grape 0.19.2以降
HTTPClient 2.8.2.4以下
HTTPClient 2.8.3
HTTP.rb 2.2.1以前
HTTP.rb 2.2.2以降
Mongo 2.4.0以前
Mongo 2.4.1以上
Padrino 0.14.4以前
Padrino 0.15.0以降
Passenger 5.1.2以下
Passenger 5.1.3以降
Puma 3.8.2以前
Puma 3.9.0以降
Rack 1.6.7以下
Rack 1.6.8以降
Rails 3.2.22.5以前
Rails 4.0.0以降
Rainbows(全バージョン)
なし
Sequel 4.44.0以下
Sequel 4.45.0以降
Sidekiq 4.2.10以下
Sidekiq 5.0.0以降
Sinatra 1.4.8以下
Sinatra 2.0.0以降
Sunspot(すべてのバージョン)
なし
Typhoeus 1.1.2以下
Typhoeus 1.3.0以降
Unicorn 5.2.0以下
Unicorn 5.3.0以降
非推奨のバージョンを持つgemについては、今後multiverseスイートでそれらのバージョンのテストを行いません。ただし、引き続きエージェントと互換性がある場合があります。これらのバージョンのgemに関する問題のバグレポートについては、今後修正を行いません。
内部的に
Object.const_getを利用し、Object.const_defined?文字列からクラス定数を動的にチェックしたり、そのハンドルを取得したりする際は、可能な限り
Objectクラスの組み込みメソッドを活用して、よりシンプルでパフォーマンスの高い操作を実現してください。すべてのJRubyおよびv2.5以下のCRubyでは、指定されたものとは異なるネームスペースから意図しない定数が生成される可能性があるため、Objectが提供できる以上のサポートが少し必要になります。しかし、その他のすべてのRuby、そして入力される文字列値を100%信頼できるコンテキストにおけるRubyの場合であっても、Objectクラスのメソッドを活用してそのメリットを享受してください。rake.tasksの設定に関するドキュメントを明確化デフォルトの
newrelic.ymlファイル内のrake.tasksの説明、およびNew Relic Rubyエージェント設定ドキュメントが更新され、その動作と使用方法が明確になりました。現在、ドキュメントには次のように記載されています:自動的に計装するRakeタスクの配列を指定します。この設定オプションは、配列を正規表現リストに変換します。デフォルトで全てのタスクを許可したい場合は、
rake.tasks: [.+]を使用してください。このリストに追加されない限り、Rakeタスクはインストゥルメントされません。詳細については、(New RelicのRake計装に関するドキュメント)[/docs/apm/agents/ruby-agent/background-jobs/rake-instrumentation]を参照してください。これらの変更を提案していただいた@robotfelixに感謝いたします。
配列の設定を配列に変換する環境変数の設定を有効にします。
この変更以前は、カンマ区切りのリストが環境変数として渡された場合、
newrelic_agent.logにエラーが出力され、値として文字列が設定されていました。現在は、配列が正確に型変換されます。バグ修正:TransactionEventsが期待されるレートでサンプリングされるようにしました
TransactionEventAggregator内の
transaction_events.max_samples_storedのキャパシティ値が、想定される収集サイクルの間隔と一致しなかったため、TransactionEventsが過剰にサンプリングされていました。このバグ修正は、名前が変更されたtransaction_events*の設定に対して間隔とキャパシティが想定通りに機能するように、#952で行われた更新に基づいています。バグ修正:トランザクションの外部で作成された場合にエラーイベントの属性が欠落する問題
以前は、トランザクションのスコープ外でnotice_errorを呼び出すことによって作成されたエラーイベントに対し、エージェントは優先度を割り当てていませんでした。これにより、エラーイベントのバッファが満杯になったときにサンプリングの問題が発生し、newrelic_agent.logに
NoMethodError: undefined method '<' for nil:NilClassが出力されていました。このバグ修正により、エラーイベントには常に優先度が割り当てられるようになり、エージェントがこれらのエラーイベントを正しくサンプリングできるようになります。この問題を知らせていただいた@olleolleolleに感謝いたします。
サポートステートメント
New Relicでは、エージェントを定期的に、少なくとも3か月ごとにアップグレードすることを推奨します。このリリース以降、サポートされる最も古いバージョンは5.7.0.350です。