私たちのGo言語で これにより、他の New Relic データのコンテキスト で アプリのログを確認できます。 この機能の一般的な情報については、 コンテキスト内の APM ログ を 参照してください。
エージェントのコンテキストでログを構成する 次のログをコンテキスト機能で使用するには、Go エージェントの構成オプションを変更する必要があります。
APM でログを装飾して転送する ほとんどのユーザーにとって、Go エージェントに組み込まれている自動ログ転送を使用することが最適なソリューションです。セットアップが簡単で、ほとんどのユースケースでうまく機能します。ログ転送の制限について学習します。
自動アプリケーション ログ転送は、Go エージェント バージョン 3.20.0 でデフォルトで有効になりました。以上。アプリケーションでこれらのバージョンの Go エージェントを使用している場合、構成オプションを変更して自動ログ転送を有効にする必要はありません。
古いバージョンの Go エージェントを使用している場合は、構成を変更してアプリケーション ログの転送を有効にする必要があります。
app , err := newrelic . NewApplication (
newrelic . ConfigAppLogForwardingEnabled ( true ) ,
ログを APM で装飾し、ログを手動で転送する より多くのカスタム ロギングが必要なユーザー、または 60 秒のサイクルごとに 10,000 を超えるログ、または 5 秒のサイクルごとに 833 を超えるログを New Relic に送信したいユーザーには、手動でログ転送を設定することをお勧めします。ログを New Relic に送信するようにログ フォワーダーを設定したら、次の設定を含むように設定を変更して、Go エージェントが転送用にログを強化できるようにします。
app , err := newrelic . NewApplication (
newrelic . ConfigAppLogDecoratingEnabled ( true ) ,
バージョン v3.20.0 以降の Go エージェントを使用している場合は、New Relic によって収集されたログの重複を避けるために、アプリケーション ログの転送を無効にする必要があります。
app , err := newrelic . NewApplication (
newrelic . ConfigAppLogDecoratingEnabled ( true ) ,
newrelic . ConfigAppLogForwardingEnabled ( false ) ,
ログイン コンテキスト プラグインのインストールNew Relic にログを送信するようにエージェントを設定したら、logs in context プラグインをインストールして、ロギング ライブラリを計測します。
標準ライブラリ ログ logWriter ライブラリは、最新の New Relic Logs in Context 機能を go 標準ライブラリ ロガーに自動的に統合するio.Writer
です。次の手順に従って、アプリケーションにインストールします。このライブラリでは、インストールされている Go エージェントのバージョンが 3.19.1 以降である必要があります。
モジュールに logWriter パッケージを追加します。
$ go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/logWriter
ロガーを初期化するファイルに logWriter パッケージをインポートします。
"github.com/newrelic/go-agent/v3/integrations/logcontext-v2/logWriter"
logWriter オブジェクトを作成します。ログが書き込まれる有効な io.Writer と、初期化された go-agent アプリケーションを渡す必要があります。次の例では、標準出力に書き込みます。
writer := logWriter . New ( os . Stdout , newRelicApp )
新しい logWriter オブジェクトをロガーの出力先として、ロガー オブジェクトを作成します。
logger := log . New ( & writer , "" , log . Default ( ) . Flags ( ) )
この時点で、作成されたロガーで書き込まれたログは、ログ構成設定に基づいて go-agent によって処理されます。
トランザクショントランザクションのコンテキストをキャプチャする場合は、新しい logWriter オブジェクトと logger オブジェクトを作成する必要があります。トランザクション用の新しい logWriter オブジェクトを作成するには、トランザクションが関数に渡される方法に応じて、 WithTransaction()
またはWithContext()
関数を使用します。これらの関数は、トランザクション コンテキストを含む元の logWriter オブジェクトの新しいコピーを作成します。
関数がトランザクションでラップされたコンテキストを受け取る場合は、WithContext() 関数を使用します。
txnWriter := writer . WithContext ( myWrappedContext )
関数がトランザクション ポインターを受け取る場合は、WithTransaction() 関数を使用します。
txnWriter := writer . WithTransaction ( myTransaction )
トランザクションごとに新しい logWriter を使用して、常に新しいロガーを作成するようにしてください。これにより、非同期プロセスが異なるコンテキスト情報を持つ同じロガー オブジェクトにアクセスする可能性がなくなります。
txnLogger := log . New ( txnWriter , "" , log . Default ( ) . Flags ( ) )
トラブルシューティングlogWriter ツールは、サイレント モードで失敗するように設計されています。デバッグ情報を有効にするには、logWriter オブジェクトでDebugLogging(true)
メソッドを呼び出します。logWriter でエラーが発生すると、編集されていないログ行が常に最初の行に出力されます。DebugLogging が有効になっている場合、エラーが発生すると、次の行にエラー メッセージが出力されます。
writer . DebugLogging ( true )
ゼロログ zerologWriter ライブラリは、最新の New Relic Logs in Context 機能を zerolog に自動的に統合するio.Writer
です。次の手順に従って、アプリケーションにインストールします。このライブラリでは、インストールされている go-agent のバージョンが 3.19.1 以降である必要があります。
モジュールに zerologWriter パッケージを追加します。
$ go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/zerologWriter
zerolog ロガーを初期化するファイルに zerologWriter パッケージをインポートします。
"github.com/newrelic/go-agent/v3/integrations/logcontext-v2/zerologWriter"
zerologWriter オブジェクトを作成します。ログが書き込まれる有効な io.Writer と、初期化された go-agent アプリケーションを渡す必要があります。次の例では、標準出力に書き込みます。
writer := logWriter . New ( os . Stdout , newRelicApp )
ロガーの出力先として、新しい zerologWriter オブジェクトを使用してロガー オブジェクトを作成します。
logger := zerolog . New ( writer )
この時点で、作成されたロガーで書き込まれたログは、ログ構成設定に基づいて go-agent によって処理されます。
トランザクショントランザクションのコンテキストをキャプチャする場合は、新しい zerologWriter オブジェクトと logger オブジェクトを作成する必要があります。トランザクション用の新しい zerologWriter オブジェクトを作成するには、トランザクションが関数に渡される方法に応じて、 WithTransaction()
またはWithContext()
関数を使用します。これらの関数は、トランザクション コンテキストを含む元の zerologWriter オブジェクトの新しいコピーを作成します。
関数がトランザクションでラップされたコンテキストを受け取る場合は、WithContext() 関数を使用します。
txnWriter := writer . WithContext ( myWrappedContext )
関数がトランザクション ポインターを受け取る場合は、WithTransaction() 関数を使用します。
txnWriter := writer . WithTransaction ( myTransaction )
トランザクションごとに新しい zerologWriter を使用して常に新しいロガーを作成するようにしてください。これにより、非同期プロセスが異なるコンテキスト情報を持つ同じロガー オブジェクトにアクセスする可能性がなくなります。
txnLogger := logger . Output ( txnWriter )
トラブルシューティングzerologWriter ツールは、警告なしで失敗するように設計されています。デバッグ情報を有効にするには、zerologWriter オブジェクトでDebugLogging(true)
メソッドを呼び出します。zerologWriter でエラーが発生すると、編集されていないログ行が常に最初の行に出力されます。DebugLogging が有効になっている場合、エラーが発生すると、次の行にエラー メッセージが出力されます。
writer . DebugLogging ( true )
ログルス nrlogrus プラグインは、logrus ロギング フレームワークを使用して、自動ログ イン コンテキスト インジェストを有効にします。アプリケーションがそれを使用するように設定されると、go-agent は logrus に書き込まれたすべてのログを自動的に取り込みます。これには、インストールされている go-agent のバージョンが 3.18.0 以降である必要があります。
nrlogrus パッケージをモジュールに追加します。
$ go get github.com/newrelic/go-agent/v3/integrations/logcontext-v2/nrlogrus
logrus ロガーを初期化するファイルに nrlogrus パッケージをインポートします。
"github.com/newrelic/go-agent/v3/integrations/logcontext-v2/nrlogrus"
"github.com/sirupsen/logrus"
新しい nrlogrus フォーマッタを構成して作成します。有効なアプリケーションと有効な logrus フォーマッターを渡す必要があります。渡されたフォーマッタによって、書き込まれるログの外観が決まります。
nrlogrusFormatter := nrlogrus . NewFormatter ( newRelicApplication , & logrus . TextFormatter { } )
ロガーのフォーマッターを新しく作成した nrlogrus フォーマッターに設定します。
log . SetFormatter ( nrlogrusFormatter )
この時点で、作成されたロガーで書き込まれたログは、ログ構成設定に基づいて go-agent によって処理されます。
トランザクショントランザクション内でログを計測する場合、そのトランザクションをコンテキストとして logrus に渡す必要があります。これにより、そのトランザクションの新しいロガー オブジェクトが作成され、エージェントによって処理されたログが発生したトランザクションとスパンにリンクされます。
トランザクションを含むコンテキストがある場合:
txnLogger := log . WithContext ( yourWrappedContext )
それ以外の場合は、コンテキストを作成して logrus に渡すことができます。
txnLogger := log . WithContext ( newrelic . NewContext ( context . Background ( ) , txn ) )
データを保護する ログには、HIPAAまたはその他のコンプライアンスプロトコルによって保護されている機密情報が含まれている場合があります。デフォルトでは、クレジットカードや社会保障番号などのアイテムのように見える番号パターンを難読化しますが、追加情報をハッシュまたはマスクする必要がある場合があります。
詳細については、難読化の式とルールに関する ドキュメントを参照してください。 New Relic UIを使用するか、GraphQL APIであるNerdGraphを使用して、ログデータをハッシュまたはマスクできます。
次は何ですか? 設定後 状況に応じてログを記録し、ログ データを最大限に活用します。