私たちのルビーで これにより、他の New Relic データのコンテキスト でアプリのログを確認できます。 この機能の一般的な情報については、 コンテキスト内の APM ログ を参照してください。
コンテキストオプションの自動ログ
設定には 3 つのオプションがあります アプリのログとリンク メタデータを New Relic に自動的に送信するコンテキスト内のログ。
これは最も単純なアプローチであり、ログフォワーダーの設定にアクセスしたり関心を持ったりしていない開発者や、アプリのコンテキストでログやその他のリンクメタデータの機能を確認したいアカウントに最適です。多くのオーバーヘッド。
このオプションを使用して、エージェントはspan.id
、 trace.id
、 hostname
、 entity.guid
、およびentity.name
を追加します。ログ転送の制限について学習します。
必要なのは、ログ転送機能を備えたエージェント バージョン ( Ruby エージェント 8.6.0 以降) をインストールすることだけです。転送が無効になっている場合は、次の構成を使用できます。
newrelic.yml:
環境変数:
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=true
このオプションは、バージョン 8.7.0 以降ではデフォルトで有効になっています。ログ転送を無効にするには、値をfalse
に設定する必要があります。
オプションの調整:
これを有効にすると、1分ごとにNewRelicに送信されるログの最大数も制御できます。デフォルト値は10,000です。 60秒のウィンドウで10,000を超えるログが受信されると、ログのサンプリングが開始されます。
より多くのログを受信するには、より大きな数値に設定します。受け取るログの数を減らすには、数値を小さく設定します。 100,000までの整数が有効です。
newrelic.yml:
max_samples_stored: 10000
環境変数:
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000
既存のログ転送ソリューションがあり、コンテキストで自動ログを使用するようにエージェントを更新している場合は、手動ログ転送を必ず無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
あなたが好きなログフォワーダーをすでに持っていますか?私たちはあなたをカバーしています!言語エージェントは、自動ログインコンテキスト機能へのアクセスを提供するために必要なリンクメタデータでログを装飾できます。
このオプションは、エージェント内転送では使用しないでください。エージェント内転送が有効になっているときに外部ログフォワーダーを使用してログをNewRelicに送信すると、ログがNewRelicに2回送信されます。アカウントによっては、二重請求が発生する場合があります。
このオプションは、手動のログ装飾フォーマッタでも使用しないでください。コードベースに手動フォーマッターへの参照がある場合は、このオプションを有効にする前にそれらを削除してください。
このオプションを使用する場合は、エージェント内転送構成オプションが無効になっていることを確認してください。
newrelic.yml:
構成でログの装飾を有効にしてから、エージェントを再起動してログの装飾を開始します。
newrelic.yml:
環境変数:
NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=true
デコレータは、すべてのログメッセージに5つの属性を追加します: entity.guid
、 entity.name
、 hostname
、 trace.id
、およびspan.id
。例:
This is my log message. NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}|
ログがトランザクションの外部で発生した場合、またはアプリケーションのコンテキストに適用できない場合、一部の属性は空になる可能性があります。
手動装飾フォーマッターNewRelic::Agent::Logging::DecoratingFormatter
よりもこのオプションをお勧めします。
言語エージェントがログを転送および装飾できるようになる前は、アプリケーションを更新してNewRelic::Agent::Logging::DecoratingFormatter
を使用してリンクメタデータを送信することにより、コンテキスト内でログを有効にすることができました。
このオプションは引き続きサポートされていますが、推奨されなくなりました。このアプローチを使用する手順については、コンテキストオプションの手動ログを参照してください。
また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIでインフラストラクチャエージェントを使用するように求められます。
既存のログ転送ソリューションを使用することにし、後でエージェントを更新してコンテキストで自動ログを使用することにした場合は、必ず手動ログ転送を無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
データを保護する
ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、難読化の式とルールに関するドキュメントを参照してください。 New Relic UIを使用するか、GraphQL APIであるNerdGraphを使用して、ログデータをハッシュまたはマスクできます。
データを調べる
ログデータを最大限に活用するには:
トラブルシューティングのヒント
通常、有効にしてから 1 分以内にログが表示され始めます。 コンテキストでログインします。 アプリの Triage > Logs セクションを確認してください。 また、そこにエラーに関連する ログ パターンが 表示されるようになります。
エラーまたはトレースのログが表示されない場合は、アプリにログがない可能性があります。 UIページを更新するか、選択した期間を変更してみてください。
自動ロギングを無効にする
APMログインコンテキストは、APMエージェントログデータを自動的に転送し、デフォルトで有効になっています。これは、セキュリティ、コンプライアンス、請求、またはシステムパフォーマンスに悪影響を与える可能性があります。詳細について、またはデフォルト設定を調整する必要がある場合は、手順に従って自動ロギングを無効にしてください。
手動プロセスを使用してRubyのコンテキストでログを設定する必要がある場合は、次の手順に従います。
- NewRelicでのロギングをすでに設定していることを確認してください。これには、アプリケーションログを収集し、NewRelicに転送されるメタデータを拡張するサポートされているログフォワーダーの構成が含まれます。
- をインストールするか、 を最新の Ruby エージェントバージョンに更新し、 分散型トレーシングを有効にする 。 Rubyエージェントのバージョン6.7.0以降を使用 コンテキストのログを取得します。
- Railsアプリケーションの場合は、 サポートされているRailsのバージョン を使用してください。
- Rubyのコンテキストでログを設定する。
Railsのロギングは2つのコンポーネントによって制御されています。
設定してカスタマイズできるロガー config.logger
config.log_formatter
を設定してカスタマイズできるログフォーマッタ
ほとんどの場合、Railsアプリケーションでconfig.log_formatter
をDecoratingFormatter
に設定して、コンテキストでログを構成する必要があります。 Rails構成の詳細については、 rubyonrails.orgのドキュメントを参照してください。
アプリケーションの構成で、 newrelic_rpm
を要求してから、次の行を追加します。
class Application < Rails::Application
config.log_formatter = ::NewRelic::Agent::Logging::DecoratingFormatter.new
この設定では、ログメッセージにNew Relicのフォーマッターを使用しますが、残りの設定は他のRailsの設定によって行われます。
New Relicのデコレーションロガーは、以下のgemとの互換性がないことが知られています。
log_formatter
オプションを設定してもニーズが満たされない場合は、Railsロガー全体をNewRelicロガーのインスタンスに置き換えてください。次のように、ロガーのコンストラクターにパラメーターを指定します。
class Application < Rails::Application
config.logger = ::NewRelic::Agent::Logging::DecoratingLogger.new(
Rails以外のアプリケーションの場合は、次のように、Ruby標準::Logger
の代わりにDecoratingLogger
を使用します。
logger = ::NewRelic::Agent::Logging::DecoratingLogger.new(
DecoratingLogger
は、Ruby標準::Logger
のドロップイン置換です。それらのコンストラクターは同じパラメーターを受け入れます。
別のロギング実装または独自のカスタムロガーでロギング拡張機能を使用するには、 DecoratingFormatter
を使用します。例えば:
class Application < Rails::Application
config.logger = ::YourCustomLoggerImplementation.new(
formatter: ::NewRelic::Agent::Logging::DecoratingFormatter.new
- ログアペンダーが正しく構成されていることを確認するには、アプリケーションを実行してから、クエリ演算子
has:span.id has:trace.id
を使用してNewRelicUIでログデータを確認します。
すべてが正しく構成され、データが強化されたメタデータとともにNew Relicに転送されている場合、ログはJSONとして出力され、 trace.id
}フィールドとspan.id
フィールドが含まれているはずです。
/config/application.rb
または/config/environments/development.rb
でロギングを構成した場合は、アプリケーションをローカルで実行し、ロギング出力を確認してください。次のような出力が表示されます。
{"entity.name":"your_app_name","entity.type":"SERVICE","hostname":"79bcbf8d","trace.id":"79bcbf8d","span.id":"00fc7d46","timestamp":1567701375543,"message":"example log message one","log.level":"DEBUG"}
{"entity.name":"your_app_name","entity.type":"SERVICE","hostname":"79bcbf8d","trace.id":"79bcbf8d","span.id":"6754870b","timestamp":1567702843604,"message":"example log message two","log.level":"DEBUG"}