Ruby APM エージェントを使用すると、 logs in context を取得できます。これにより、他の New Relic データのコンテキストでアプリのログを表示できます。 この機能の一般的な情報については、 「コンテキスト内の APM ログ」 を参照してください。
コンテキストオプションの自動ログ アプリのログとリンク メタデータを自動的に New Relic に送信するようにコンテキスト内のAPM ログを構成するには、3 つのオプションがあります。
オプション1(最も簡単):エージェントにログを装飾して転送させます。 これは最も単純なアプローチであり、ログフォワーダーの設定にアクセスしたり関心を持ったりしていない開発者や、アプリのコンテキストでログやその他のリンクメタデータの機能を確認したいアカウントに最適です。多くのオーバーヘッド。
このオプションを使用して、エージェントは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
に設定する必要があります。
Optional adjustments:
これを有効にすると、1分ごとにNewRelicに送信されるログの最大数も制御できます。デフォルト値は10,000です。 60秒のウィンドウで10,000を超えるログが受信されると、ログのサンプリングが開始されます。
より多くのログを受信するには、より大きな数値に設定します。受け取るログの数を減らすには、数値を小さく設定します。 100,000までの整数が有効です。
newrelic.yml:
max_samples_stored : 10000
環境変数:
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED = 10000
既存のログ転送ソリューションがあり、エージェントをコンテキストで自動ログを使用するように更新する場合は、disable your manual log forwarder にしてください。そうしないと、アプリは二重のログラインを送信します。アカウントによっては、二重請求になる場合があります。詳細については、手順に従い、特定のログフォワーダー を無効にしてください。
オプション2:エージェントにログを装飾させます。 あなたが好きなログフォワーダーをすでに持っていますか?私たちはあなたをカバーしています!言語エージェントは、自動ログインコンテキスト機能へのアクセスを提供するために必要なリンクメタデータでログを装飾できます。
このオプションは、エージェント内転送では使用しないでください。エージェント内転送が有効になっているときに外部ログフォワーダー を使用してログを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}|
ログメッセージが空または空白の場合、出力メッセージも空になります。 例:
NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}|.
出力されるログメッセージは空の文字列になります。
ログがトランザクションの外部で発生した場合、またはアプリケーションのコンテキストに適用できない場合、一部の属性は空になる可能性があります。
手動装飾フォーマッターNewRelic::Agent::Logging::DecoratingFormatter
よりもこのオプションをお勧めします。
言語エージェントがログを転送および装飾できるようになる前は、アプリケーションを更新してNewRelic::Agent::Logging::DecoratingFormatter
を使用してリンクメタデータを送信することにより、コンテキスト内でログを有効にすることができました。
このオプションは引き続きサポートされていますが、おすすめしません。このアプローチを使用する手順については、コンテキストオプションの手動ログを 参照してください。
また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIでインフラストラクチャエージェント を使用するように求められます。
既存のログ転送ソリューションを使用し、後でエージェントを更新してコンテキスト内の自動ログを使用することにした場合は、必ずdisable your manual log forwarder を実行してください。 そうしないと、アプリは二重のログ行を送信することになります。 アカウントによっては、二重請求が発生する可能性があります。 詳細については、特定のログフォワーダー を無効にする手順に従ってください。
このドキュメントはインストールの役に立ちましたか? データを保護する ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、難読化の式とルールに関する ドキュメントを参照してください。 New Relic UIを使用するか、GraphQL APIであるNerdGraphを使用して、ログデータをハッシュまたはマスクできます。
データを調べる ログデータを最大限に活用するには:
トラブルシューティングのヒント 通常、コンテキストでAPM ログを有効にしてから 1 分以内にログが表示され始めます。 アプリのTriage > Logs セクションを確認してください。 また、そこにエラーに関連するログパターンも 表示され始めます。
エラーまたはトレースのログが表示されない場合は、アプリにログがない可能性があります。 UIページを更新するか、選択した期間 を変更してみてください。
自動ロギングを無効にする APMログインコンテキストは、APMエージェントログデータを自動的に転送し、デフォルトで有効になっています。これは、セキュリティ、コンプライアンス、請求、またはシステムパフォーマンスに悪影響を与える可能性があります。詳細について、またはデフォルト設定を調整する必要がある場合は、手順に従って自動ロギングを無効に してください。
手動プロセスを使用してRubyのコンテキストでログを設定する必要がある場合は、次の手順に従います。
NewRelicでのロギングをすでに設定し ていることを確認してください。これには、アプリケーションログを収集し、NewRelicに転送されるメタデータを拡張するサポートされているログフォワーダーの構成が含まれます。
をインストールするか、 を最新の Ruby エージェントバージョンに更新し、 分散型トレーシングを有効にする 。 Rubyエージェントのバージョン6.7.0以降を使用 コンテキストのログを取得します。
Railsアプリケーションの場合は、 サポートされているRailsのバージョン を使用してください。
Rubyのコンテキストでログを設定する。
Ruby on Railsの標準的な構成 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との互換性がないことが知られています。
Railsの高度な設定 log_formatter
オプションを設定してもニーズが満たされない場合は、Railsロガー全体をNewRelicロガーのインスタンスに置き換えてください。次のように、ロガーのコンストラクターにパラメーターを指定します。
class Application < Rails :: Application
config . logger = :: NewRelic :: Agent :: Logging :: DecoratingLogger . new (
Railsを使わないRubyの構成 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" }