Rails Heroku アプリに New Relic アドオンを追加しました。New Relic は約 1 分ごとにリアルタイムの応答時間を表示するので、この機能がサイトで多くのトラフィックを生成している (または追加コストが発生している) かどうか疑問に思っています。
3 に答える
アプリにインストルメンテーションを追加すると、そのインストルメンテーションはデータの収集と送信の処理時間に影響します。そのインストルメンテーションが呼び出される回数は、コードの記述方法とコードを設定したモードによって影響を受けます (または、私は想像します)。パフォーマンスの測定に使用される gem がサイトのパフォーマンスを大幅に低下させる可能性は非常に低い (そして皮肉なことですが) と思います。
New Relic は、アプリのモードを次のように説明しています。
生産モード
本番環境で実行中のアプリケーションに関する詳細な情報を取得し、リアルタイムで監視できる newrelic.com に送信するオーバーヘッドの少ないインストルメンテーション。
開発者モード
/newrelic をアプリケーションにマッピングして、ページごとに詳細なパフォーマンス メトリックを表示する Rack ミドルウェア。Rails アプリケーションに自動的にインストールされます。
ここ ( https://newrelic.com/docs/ruby/ruby-agent-configuration ) では、本番環境での開発者モードについて意見を述べています。
developer_mode - Rails アプリケーションでは、開発者モードを true に設定すると、New Relic 開発者モードがインストールされます。これは通常、開発モードを除くすべての環境で false になるはずです。これは、本番環境では耐えられないほどの高いオーバーヘッドが発生するためです。
「低オーバーヘッド」、「高オーバーヘッド」、「耐えられない」が New Relic のコンテキストで何を意味するのかわかりません。
個人的には、New Relic を使用したトラフィックの少ないいくつかのアプリでは、オーバーヘッドに気づいていません。
New Relic Ruby エージェントは、アプリケーションの各プロセス内でバックグラウンド スレッドを生成します。これらのバックグラウンド スレッドは、プロセスからデータを収集します。データは平均値として計算され、60 秒ごとに New Relic のサーバーに送信されます。そのため、New Relic はアプリケーションへの「トラフィック」を生成しません。わずかなオーバーヘッドは、New Relic が少量のメモリと CPU を使用して平均パフォーマンス統計を追跡するためです。New Relic は、エージェントを徹底的にテストして、オーバーヘッドが最小限であることを確認します。
私は Newrelic が提供する Rack ミドルウェアについては詳しく調べていませんが、それらが高度な非同期処理や統計情報の送信を使用しているとは思えません。ただし、ラックベースのセッションを使用している可能性が高く、(私が理解していることから)一種のキューとして機能できます。Sidekiq や Resque などのソリューションほど堅牢ではありません。そのため...多少のオーバーヘッドが発生する可能性がありますが、私の経験ではそれほど重要ではありません。