私たちのJavaで これにより、他の New Relic データのコンテキスト でアプリのログを確認できます。 この機能の一般的な情報については、 コンテキスト内の APM ログ を参照してください。
コンテキストオプションの自動ログ
サポートされているフレームワークを使用している場合、コンテキスト内で APM ログを構成して、アプリのログとリンク メタデータを New Relic に自動的に送信する 2 つのオプションがあります。1 つのオプションは、ログを装飾するログ拡張機能を手動で構成し、それを自分自身に転送することです。もう 1 つのオプションは、Java エージェントがログの装飾と転送を自動的に処理するようにすることです。コンテキスト内の自動ログでサポートされているフレームワークには、次のものがあります。
- Log4j1 1.2.17 以降
- Log4j2 2.6 以降
- ログバック1.1以降
- 7 月 (java.util.logging)JDK8+
- JBoss Logging 1.3.0.Final から 2.x
- Dropwizard Logging (Logback インストルメンテーション経由で取得、以下の既知の問題を参照)
重要
JBoss ロギング
JBoss Logging は、ローカル装飾機能を JUL 計測に委譲するため、次の 2 つの計測モジュールによって完全に制御できます。
com.newrelic.instrumentation.java.logging-jdk8:
com.newrelic.instrumentation.jboss.logging:
重要
Dropwizard のログに関する既知の問題
デフォルトでは、Dropwizard はログ バックエンドに Logback を使用します。また、すべての java.util.logging、Log4j、および Logback による Apache Commons Logging の使用。このルーティング動作により、Java エージェントが Logback の計測に加えて、これらの他のロギング ライブラリのいずれかを計測する場合、重複したログが New Relic に報告される可能性があります。
Dropwizard ログの使用時に重複したログが報告されるのを避けるために、Logback を除くすべてのログ フレームワーク インストルメンテーションを無効にすることをお勧めします。 これは、エージェント構成ファイルのclass_transformer
セクションで実行できます。
com.newrelic.instrumentation.logback-classic-1.2:
com.newrelic.instrumentation.apache-log4j-1:
com.newrelic.instrumentation.apache-log4j-2:
com.newrelic.instrumentation.java.logging-jdk8:
com.newrelic.instrumentation.jboss.logging:
重要
エージェントリリース7.7.0以降では、デフォルトでエージェント設定ファイルでこの機能が有効になっています。
サポートされているフレームワークが検出されると、エージェントのログ転送によりデータの消費量が増加します。この量は、アプリケーションとそれが生成するログの量によって異なります。この機能は無効にすることができます。オプションの詳細については、 「自動ログを無効にする」を参照してください。
すでにログ転送ソリューションを導入している場合は、この機能を無効にする必要があります。
Java エージェントにログを転送させるのではなく、独自のログ フォワーダーを使用したい場合は、トレース コンテキスト メタデータでログを装飾するための コンテキスト ソリューションの手動ログが 適切なソリューションになります。
これは最も単純なアプローチであり、ログフォワーダーの設定にアクセスしたり関心を持ったりしていない開発者や、アプリのコンテキストでログやその他のリンクメタデータの機能を確認したいアカウントに最適です。多くのオーバーヘッド。
このオプションを使用して、エージェントはspan.id
、 trace.id
、 hostname
、 entity.guid
、およびentity.name
を追加します。ログ転送の制限について学習します。
この機能はデフォルトで有効になっています。
必要なのは、ログ転送機能を備えたエージェント バージョン ( Java エージェント 7.6.0 以降) をインストールすることだけです。転送が無効になっている場合は、次の構成を使用できます。
構成ファイル ( newrelic.yml
)、共通セクションの下にスペース 2 つインデントされています。
max_samples_stored: 10000
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000
NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=false
システムプロパティ:
-Dnewrelic.config.application_logging.enabled=true
-Dnewrelic.config.application_logging.forwarding.enabled=true
-Dnewrelic.config.application_logging.forwarding.max_samples_stored=10000
-Dnewrelic.config.application_logging.local_decorating.enabled=false
オプションの調整(max_samples_stored):
この機能を有効にすると、1分ごとにNewRelicに送信されるログ行の最大数も制御できます。デフォルト値は10,000です。エージェントが60秒のウィンドウで10,000を超えるログ行を確認すると、ログのサンプリングが開始されます。
より多くのログを受信するには、より大きな数値に設定します。受け取るログの数を減らすには、数値を小さく設定します。負でない整数はすべて有効です。
ヒント
これは、 1分あたりに送信されるログの数を指します。max_samples_stored
を12未満の値に設定すると、ログが送信されないという効果があります。
構成ファイル( newrelic.yml
):
max_samples_stored: 10000
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED=10000
NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=false
システムプロパティ:
-Dnewrelic.config.application_logging.enabled=true
-Dnewrelic.config.application_logging.forwarding.enabled=true
-Dnewrelic.config.application_logging.forwarding.max_samples_stored=10000
-Dnewrelic.config.application_logging.local_decorating.enabled=false
重要
既存のログ転送ソリューションがあり、コンテキストで自動ログを使用するようにエージェントを更新している場合は、手動ログ転送を必ず無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
あなたが好きなログフォワーダーをすでに持っていますか?私たちはあなたをカバーしています!Javaエージェントは、自動ログインコンテキスト機能へのアクセスを提供するために必要なリンクメタデータでログを装飾でき、手動ログフォワーダーを使用してそれらをNewRelicに送信できます。
重要
このオプションは、エージェント内転送では使用しないでください。エージェント内転送が有効になっているときに外部ログフォワーダーを使用してログをNewRelicに送信すると、ログがNewRelicに2回送信されます。アカウントによっては、二重請求が発生する場合があります。
エージェントの構成を更新してログ転送を無効にし、ローカルデコレーションを有効にしてから、エージェントを再起動してログのデコレーションを開始します。
構成ファイル ( newrelic.yml
)、共通セクションの下にスペース 2 つインデントされています。
環境変数:
NEW_RELIC_APPLICATION_LOGGING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=false
システムプロパティ:
-Dnewrelic.config.application_logging.enabled=true
-Dnewrelic.config.application_logging.local_decorating.enabled=true
-Dnewrelic.config.application_logging.forwarding.enabled=false
デコレータは、アプリケーションログファイルのすべてのログメッセージに、 entity.guid
、 hostname
、 trace.id
、 span.id
、 entity.name
の5つの属性を追加します。例:
This is my log message. NR-LINKING|{entity.guid}|{hostname}|{trace.id}|{span.id}|{entity.name}|
ログがトランザクションの外部で発生した場合、またはアプリケーションのコンテキストに適用できない場合、一部の属性は空になる可能性があります。
データを保護する
ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、難読化の式とルールに関するドキュメントを参照してください。 New Relic UIを使用するか、GraphQL APIであるNerdGraphを使用して、ログデータをハッシュまたはマスクできます。
データを調べる
ログデータを最大限に活用するには:
トラブルシューティングのヒント
通常、有効にしてから 1 分以内にログが表示され始めます。 コンテキストでログインします。 アプリの Triage > Logs セクションを確認してください。 また、そこにエラーに関連する ログ パターンが 表示されるようになります。
エラーまたはトレースのログが表示されない場合は、アプリにログがない可能性があります。 UIページを更新するか、選択した期間を変更してみてください。
自動ロギングを無効にする
コンテキスト内の APM ログは自動的に転送されますエージェントのログ データであり、デフォルトで有効になっています。これは、セキュリティ、コンプライアンス、請求、システム パフォーマンスに悪影響を与える可能性があります。自動ログを無効にするには:
- New Relic UI のユーザー メニューから、 Manage your data > Log settingsをクリックします。
- アカウントの行の右側にある省略記号...メニューをクリックします。
- 確認ボタンをクリックして、自動ロギングを有効または無効にしてロックまたはロック解除するか(親アカウント)、有効または無効のみ(子アカウント)にします。
詳細について、またはデフォルト設定を調整する必要がある場合は、自動ログを無効にする手順に従ってください。
コンテキストオプションの手動ログ
言語エージェントがログを転送および装飾できるようになる前は、手動ソリューションを使用してリンクメタデータを送信できました。
このオプションは引き続きサポートされていますが、推奨されなくなりました。また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIでインフラストラクチャエージェントを使用するように求められます。
既存のログ転送ソリューションを使用することにし、後でエージェントを更新してコンテキストで自動ログを使用することにした場合は、必ず手動ログ転送を無効にしてください。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って特定のログフォワーダーを無効にしてください。
手動プロセスを使用してJavaのコンテキストでログを設定する必要がある場合は、次の手順に従います。
- NewRelicでのロギングをすでに設定していることを確認してください。これには、アプリケーションログを収集し、NewRelicに転送されるメタデータを拡張するサポートされているログフォワーダーの構成が含まれます。
- 最新のJavaエージェントバージョンをインストールまたは更新します。コンテキスト内のログには、 Javaエージェントバージョン5.6.0以降を使用してください。
- JVM引数
-javaagent
を有効にし、分散トレースを有効にします。 - 必要に応じて次の拡張機能のいずれかを使用して、Javaのコンテキストでログを構成し、ログデータを強化します。SpringまたはSpringBootを使用していて、必要な拡張機能がわからない場合は、 Springのドキュメントを参照してください。
Javaエージェントとのコンテキストでログ用のDropwizard拡張機能を提供します。開始するには、GitHubのコードとサンプルアプリケーションを確認してください。
DropWizard拡張機能を使用してJavaアプリのコンテキストでログを構成するには:
Dropwizard 1.3以降のパッケージがインストールされ、アプリケーションで動作していることを確認してください。インストールされ、アプリケーションで動作している元のDropwizardアペンダーとロギングファクトリを使用します。
アプリケーションにNewRelicJavaエージェントバージョン5.6.0以降がインストールされていること、およびJVM引数-javaagent
が有効になっていることを確認してください。
プロジェクトの依存関係を更新して、必要に応じてDropwizard1.3拡張機能を含めます。
Gradle: build.gradle
ファイルに以下を追加します。
implementation("com.newrelic.logging:dropwizard:2.0")
Maven: pom.xml
ファイルに以下を追加します。
<groupId>com.newrelic.logging</groupId>
<artifactId>dropwizard</artifactId>
Dropwizard .yaml
構成ファイルをnewrelic-json
レイアウトで更新し、現在使用されているtype: console
またはtype: file
を必要に応じてtype: newrelic-console
またはtype: newrelic-file
に置き換えます。例えば:
# Add the two lines below if you don't have a layout specified on the appender.
# If you have a layout, remove all parameters to the layout and set the type.
New Relic Dropwizard拡張機能は、標準のDropwizardログを使用するlog-format
レイアウトタイプもサポートしています。テストの目的で、1行の変更でレイアウトのタイプを変更できます。
# This format will be ignored by the newrelic-json layout, but used by the log-format layout.
logFormat: "%date{ISO8601} %c %-5p: %m trace.id=%mdc{trace.id} span.id=%mdc{span.id}%n"
Javaエージェントとのコンテキストでログ用のjava.util.logging拡張子を提供します。開始するには、GitHubのコードとサンプルアプリケーションを確認してください。
java.util.logging
拡張子の付いたJavaアプリのコンテキストでログを構成するには:
java.util.loggingパッケージがインストールされ、アプリケーションで動作していることを確認してください。
アプリケーションにNewRelicJavaエージェントバージョン5.6.0以降がインストールされていること、およびJVM引数-javaagent
が有効になっていることを確認してください。
プロジェクトの依存関係を更新して、必要に応じてjava.util.logging
拡張子を含めます。これらのファイルを編集できない場合は、代わりにjarをアプリケーションclasspath
に直接追加できます。
Gradle: build.gradle
ファイルに以下を追加します。
implementation("com.newrelic.logging:jul:2.0")
Maven: pom.xml
ファイルに以下を追加します。
<groupId>com.newrelic.logging</groupId>
<artifactId>jul</artifactId>
ログファイルのhandlers
プロパティがNewRelicMemoryHandler
以外に設定されているかどうかを確認してください。次のように、ルートロガーのハンドラーを一覧表示する行を探します。
handlers = java.util.logging.FileHandler
ロギングプロパティファイルを更新して、ルートロガーのハンドラーをNewRelicMemoryHandler
に設定し、別のハンドラー宛てのメッセージをインターセプトします。
handlers = com.newrelic.logging.jul.NewRelicMemoryHandler
以前にルートロガーに割り当てられたハンドラーにターゲットを設定してNewRelicMemoryHandler
を構成します。これにより、ログメッセージの送信元のスレッドでNewRelicが必要とするデータがキャプチャされます。
com.newrelic.logging.jul.NewRelicMemoryHandler.target = java.util.logging.FileHandler
最終ハンドラーにはNewRelicFormatter
を使用します。次の例のように、ログプロパティファイルを更新してformatter
プロパティを設定します。フォーマッタを設定するハンドラが前の手順のtarget
ハンドラ(この例ではjava.util.logging.FileHandler
)であることを確認してください。
java.util.logging.FileHandler.formatter = com.newrelic.logging.jul. NewRelicFormatter
New Relicのログ形式は、トランザクションとログを相互に関連付けるために使用するテレメトリメタデータを使用したJSONです。現在、その形式のカスタマイズはサポートされていません。
完了すると、テキストの代わりにJSONがログに記録されます。JSONは、1行に1つずつ、単一のオブジェクトとしてフォーマットする必要があり、 log.level
やthread.name
などのフィールドを含める必要があります。コンテキスト内のログに必要なtrace.id
は、トランザクション内で発生するログメッセージの値のみを持つ必要があります。
ログインコンテキスト拡張機能を取得する最も直接的な方法は、これらの依存関係をMavenのpom.xml
またはGradleのbuild.gradle
に追加することです。これにより、パッケージツールは正しい依存関係を取得できます。
これらのファイルを編集できない場合は、代わりに、ロギングフレームワークの構成用のアプリケーションclasspath
にjarを直接追加できます。
クラスパスを変更する前に:
- アプリのJavaエージェントでJVM引数
-javaagent
を有効にします。 - アプリケーションが使用しているロギングフレームワークを確認します。
- ロギングフレームワークの構成を変更できることを確認してください。
- 次の3つのjarがまだ存在しない場合は、クラスパスに追加します。通常、MavenCentralで公開されている最新バージョンを使用することをお勧めします。
Javaエージェントに関連する手動ログ用のLog4j1.x拡張機能を提供します。開始するには、GitHubのコードとサンプルアプリケーションを確認してください。
Log4j 1.x拡張機能を使用してJavaアプリのコンテキストで手動ログを構成するには、コードまたはXMLを介してLog4j拡張機能を構成する必要があります。AsyncAppender
インスタンスはXMLを介してのみ自動的に構成できるため、プロパティファイルはサポートされていません。
Log4j 1.xパッケージがインストールされ、アプリケーションで動作していることを確認してください。
アプリケーションにNewRelicJavaエージェントバージョン5.6.0以降がインストールされていること、およびJVM引数-javaagent
が有効になっていることを確認してください。
プロジェクトの依存関係を更新して、必要に応じてLog4j1.x拡張機能を含めます。
Gradle: build.gradle
ファイルに以下を追加します。
implementation("com.newrelic.logging:log4j1:2.0")
Maven: pom.xml
ファイルに以下を追加します。
<groupId>com.newrelic.logging</groupId>
<artifactId>log4j1</artifactId>
ロギング構成XMLファイルで、 <appender>
要素をNewRelicLayout
で更新し、 <layout class="com.newrelic.logging.log4j1.NewRelicLayout"/>
を追加します。
<appender name="TypicalFile" class="org.apache.log4j.FileAppender">
<param name="file" value="logs/log4j1-app.log"/>
<param name="append" value="false"/>
<layout class="com.newrelic.logging.log4j1.NewRelicLayout"/> <!-- only this line needs to be added -->
NewRelicAsyncAppender
を使用して、NewRelicのログフォワーダーを対象とするすべてのアペンダーをラップします。例えば:
<appender name="NewRelicFile"
class="com.newrelic.logging.log4j1.NewRelicAsyncAppender">
<appender-ref ref="TypicalFile" />
ルートロガーで非同期アペンダーを使用します。例えば:
<appender-ref ref="NewRelicFile" />
Log4j 1.x拡張機能の構成ファイルの例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false">
<appender name="TypicalFile" class="org.apache.log4j.FileAppender">
<param name="file" value="logs/log4j1-app.log"/>
<param name="append" value="false"/>
<!-- layout has been replaced -->
<layout class="com.newrelic.logging.log4j1.NewRelicLayout"/>
<!-- this appender was added -->
<appender name="NewRelicFile"
class="com.newrelic.logging.log4j1.NewRelicAsyncAppender">
<appender-ref ref="TypicalFile" />
<appender name="TypicalConsole" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
<!-- the new appender was used here -->
<appender-ref ref="NewRelicFile" />
<appender-ref ref="TypicalConsole" />
Javaエージェントとの関連でログ用のLog4j2.x拡張機能を提供します。開始するには、GitHubのコードとサンプルアプリケーションを確認してください。
Log4j 2.x拡張機能を使用してJavaアプリのコンテキストでログを構成するには、次のようにします。
Log4j2.13.2以降またはLogs4j2バインディングパッケージがインストールされ、アプリケーションで動作していることを確認してください。
アプリケーションにNewRelicJavaエージェントバージョン5.6.0以降がインストールされていること、およびJVM引数-javaagent
が有効になっていることを確認してください。
プロジェクトの依存関係を更新して、必要に応じてLog4j2.x拡張機能を含めます。
Gradle:強調表示されたセクションをbuild.gradle
ファイルに追加します:
implementation("com.newrelic.logging:log4j2:2.0")
Maven:強調表示されたセクションをpom.xml
ファイルに追加します。
<groupId>com.newrelic.logging</groupId>
<artifactId>log4j2</artifactId>
ロギング構成XMLファイルで、強調表示されたセクションを追加して<configuration>
要素を更新します。
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config"
packages="com.newrelic.logging.log4j2"
プロパティファイルを使用している場合は、 packages=com.newrelic.logging.log4j2
を追加します。
<NewRelicLayout/>
を追加して、いずれかのアペンダー内でNewRelicLayout
要素を使用します。例えば:
<File name="MyFile" fileName="logs/app-log-file.log">
プロパティファイルを使用している場合は、 layout.type
のみを変更してください。
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = NewRelicLayout
既存のアペンダーのみを変更した場合は、この手順をスキップしてください。新しいアペンダーを追加した場合は、 <Root>
}内に<AppenderRef/>
を追加して、このアペンダーを使用します。ref
属性を使用して、前の手順で作成したアペンダーname
を参照します。例えば:
<AppenderRef ref="MyFile"/>
プロパティファイルを使用していて、新しいアペンダーを追加した場合は、次を追加します。
rootLogger.appenderRef.stdout.ref = STDOUT
Javaエージェントに関連するログのログバック拡張機能を提供します。開始するには、GitHubのコードとサンプルアプリケーションを確認してください。
Logbackを使用してJavaアプリのコンテキストでログを構成するには:
Logbackバージョン1.2.0以降とNewRelicJavaエージェントバージョン5.6.0以降がインストールされ、アプリケーションで動作していることを確認してください。
アプリケーションにNewRelicJavaエージェントバージョン5.6.0以降がインストールされていること、およびJVM引数-javaagent
が有効になっていることを確認してください。
プロジェクトの依存関係を更新して、必要に応じてLogback拡張機能を含めます。
Gradle:強調表示されたセクションをbuild.gradle
ファイルに追加します:
implementation("com.newrelic.logging:logback:2.0")
Maven:強調表示されたセクションをpom.xml
ファイルに追加します。
<groupId>com.newrelic.logging</groupId>
<artifactId>logback</artifactId>
ロギング構成xml
を更新して、既存の<encoder>
要素を置き換えます。
コンソール( stdout/stderr
)にログを記録している場合は、 ConsoleAppender
を探して置き換えます。
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.newrelic.logging.logback.NewRelicEncoder"/>
ファイルにログを記録している場合は、 FileAppender
を探して{ <encoder>
}を置き換えます。
<appender name="LOG_FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app-log-file.log</file>
<encoder class="com.newrelic.logging.logback.NewRelicEncoder"/>
ロギング設定xml
をNewRelicAsyncAppender
で更新します。NewRelicAsyncAppender
がNewRelicのログフォワーダーをターゲットとするすべてのアペンダーを確実にラップするようにするには、次のセクションを追加します。"LOG_FILE"
を、前の手順で更新したアペンダーの名前に変更します。
<appender name="ASYNC" class="com.newrelic.logging.logback.NewRelicAsyncAppender">
<appender-ref ref="LOG_FILE" />
NewRelicAsyncAppender
がロガーで使用される最初のアペンダーであることを確認してください。ルートロガーのアペンダーを、前の手順で作成したASYNC
アペンダーに置き換えます。次に、 <root>
リストのNewRelicAsyncAppender
の後に他のアペンダーをリストします。
<appender-ref ref="ASYNC" />
Logback拡張機能の更新されたログ.xml
ファイルの例を次に示します。GitHubでも実際の例を見ることができます。
シングルコンソールアペンダーの例
ロギング拡張情報を追加した後の構成ファイルの例:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- changed the encoder -->
<encoder class="com.newrelic.logging.logback.NewRelicEncoder"/>
<!-- added the ASYNC appender -->
<appender name="ASYNC" class="com.newrelic.logging.logback.NewRelicAsyncAppender">
<appender-ref ref="STDOUT" />
<!-- changed the root logger -->
<appender-ref ref="ASYNC" />
2つのコンソールアペンダーの例
この例では、New Relicのログをファイルに送信しますが、標準のログをコンソールに送信します。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<encoder class="com.newrelic.logging.logback.NewRelicEncoder"/>
<!-- this appender does normal console logging -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<pattern>%msg%n</pattern>
<!-- The required New Relic ASYNC appender wraps the FILE appender -->
<appender name="ASYNC" class="com.newrelic.logging.logback.NewRelicAsyncAppender">
<appender-ref ref="FILE" />
<!-- ASYNC is one of the main appenders -->
<appender-ref ref="ASYNC" />
<!-- Send every message to normal console logging, as well. -->
<appender-ref ref="STDOUT" />
SpringおよびSpringBootの現在のバージョンの拡張機能を提供しています。ロギングライブラリをすでに知っている場合は、そのドキュメントに直接スキップできます。