• English日本語한국어
  • ログイン今すぐ開始

この機械翻訳は参考用に提供されます。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、こちらのページをご覧ください。

問題を作成する

Pythonエージェントのロギング

問題

Python エージェントがログ出力するように設定することができます。この設定により、エージェントが New Relic に正しく接続しているかどうか、エラーが発生していないかどうかを追跡することができます。この情報は、問題が発生した場合にNew Relicサポートに役立ちます。

解決

詳細なdebugロギングは、標準の Python エージェント インストールのトラブルシューティングに役立ちます。

重要

パートナーによっては、異なる手順を採用している場合もあります。

debugロギングを有効にするには:

  1. newrelic.ini (通常はアプリの階層にあります)を開きます。

  2. #log_file = /tmp/newrelic-python-agent.logのコメントを外します。ログの場所への書き込み権限があることを確認し、必要に応じてパスとファイル名を変更します。適切なファイルの場所がない場合は、 log_filestderrに設定できます。

  3. log_leveldebugに変更します ( infoから)。

    注意

    debugでログを記録すると、大量のデータが非常に迅速に生成される可能性があります。ログ ファイルのサイズを注意深く監視し、トラブルシューティングが終了したらlog_levelinfoに戻します。

  4. ファイルを保存して閉じます。設定を反映させるために、アプリを再起動してください。

  5. アプリケーションへの数分間のトラフィックを生成します。

  6. ログファイルをNew Relicサポートに送信する場合は、サポートチケットに newrelic.ini を添付し、タイムゾーンをサポートに伝えてください。

重要

New Relic Python エージェントのトラブルシューティングを行うときは、デバッグ レベルのログ ファイルを生成するように構成されていることを確認し、ログ ファイルのサイズを注意深く監視してください。log_level = debugを使用すると、大量のデータが非常に迅速に生成されます。問題を再現したら、ログ ファイルをlog_level = infoに戻します。

ファイルへのログ

エージェントは、Pythonのロギングモジュールを使用してログメッセージを出力します。したがって、エージェントからの出力は、アプリケーションの全体的なロギング戦略を考慮する必要があります。

ロギング モジュールを使用していない場合、エージェントは、Python エージェントのログ ファイルを有効にする簡単な方法を提供します。これを使用するには、エージェント構成ファイルlog_fileおよびlog_levelオプションを設定します。

例:

log_file = /tmp/newrelic-python-agent.log
log_level = info

log_fileに指定されたパスは、アプリケーションを実行するユーザーが書き込み可能である必要があります。

ヒント

Apache/mod_wsgiを使用している場合、Apache ユーザーはファイル システムへのアクセスを制限されています。Apache ユーザーが書き込み可能なログ ファイルを配置できる特別なディレクトリを作成します。相対パスではなく、絶対パスを使用することをお勧めします。

使用されるログ レベルは、 errorwarninginfoまたはdebugのいずれかです。通常の状況では、 infoを使用します。debugには、より詳細なデバッグ オプションが使用されます。これらの冗長デバッグ オプションを長時間使用しないでください。これらは過剰な出力を生成する可能性があり、logging モジュールのログ ファイル ハンドラーは標準のファイル ハンドラーであり、ログ ファイルのローテーションは実行しません。

標準エラーへのログ

ホスティングプロバイダーによっては、エージェント用に個別のログファイルを使用できない場合があります。標準エラー出力にログを記録するようにロギングモジュールを設定します。この出力は、ホスティング・メカニズムの通常のエラー・ログ・ファイルに取り込まれます。

これをエージェント設定ファイル内で行うには、次のように実行します。

log_file = stderr
log_level = info

stderrの代わりに値stdoutを使用することもできます。

すべてのデータを記録(監査ログ)

監視対象のプロセスと New Relic コレクターの間で送信されるすべてのデータに関する情報を記録および表示する必要がある場合は、短期間の監査ログを有効にすることができます。これは、デバッグや監査など、正確に何が送信されているかに関する詳細情報が必要な場合に便利です。

ログモジュールのコンフリクトのトラブルシューティング

ログが取得されない場合は、Pythonのloggingモジュールの初期化や設定方法に問題がある可能性があります。以下の関数で問題が発生する可能性があります。

使用されている Web フレームワークまたはアプリケーションのドキュメントを参照してください。Python ロギング モジュールを構成するための特殊なメカニズムを提供する場合があります。たとえば、Django を使用する場合、Python ロギング モジュールを設定するためのディクショナリ アプローチが自動的にサポートされ、定義は Django 設定モジュール内のLOGGING属性に設定されます。

詳しくは、 Django logging configuration のドキュメントをご覧ください。

エージェントログファイルのローテーション

エージェント構成でlog_fileオプションを使用すると、ロギング モジュールの標準ファイル ハンドラが使用されます。これは、ログ ファイルのローテーションを行いません。ログ ファイルのローテーションは自動的には行われません。これは、使用するローテーション ログ ファイル ハンドラの種類がわからないためです。また、Python で提供される標準のローテーション ログ ファイル ハンドラは、マルチ プロセス構成に対して必ずしも安全であるとは限りません。そのため、サードパーティのローテーション ログ ファイル ハンドラのいずれかをダウンロードして使用するか、専用のログ システムを使用する必要がある場合があります。

アプリケーションが 1 つのプロセスで実行される場合、ロギング モジュールで提供されるRotatingFileHandlerまたはTimedRotatingFileHandlerハンドラのいずれかを安全に使用できます。これを Python エージェントからの出力にのみ使用するには、WSGI スクリプト ファイルまたはモジュールの先頭で、 newrelicモジュールをインポートする前に、次を含めます。

_LOG_FORMAT = '%(asctime)s (%(process)d/%(threadName)s)' \
' %(name)s %(levelname)s - %(message)s'
_logger = logging.getLogger('newrelic')
_handler = logging.handlers.TimedRotatingFileHandler(
'agent.log', when='midnight', backupCount=7)
_formatter = logging.Formatter(_LOG_FORMAT)
_handler.setFormatter(_formatter)
_logger.addHandler(_handler)
_logger.setLevel(logging.INFO)

このコードは、ルートnewrelicロガー インスタンスにアクセスし、ローテーション ログ ファイル ハンドラーをアタッチして、このログ ファイルに送信されるメッセージのログ レベルを設定します。ログ メッセージ形式の設定方法も示しますが、これはオプションです。

ロギングモジュール全体が初期化されると、ログ出力はルートロガーに関連付けられたハンドラーに伝わり、標準エラーを含めて記録されます。重複を避けるために、ルート・ロガーのログ・ハンドラを設定してください。

上記のコードは、 logging.fileConfig()関数と構成ファイルを使用して簡略化することもできます。構成ファイルの使用の詳細については、ロギング構成に関する Python ロギング モジュールのドキュメントを参照してください。

マルチプロセス構成でログを回転させる

標準のloggingモジュールで提供されている回転ログファイルハンドラーは、マルチプロセスサーバの構成で使用するには完全に安全ではありません。複数のプロセスからのメッセージが混ざってしまったり、複数のプロセスが同時にログファイルのローテーションを行おうとすると、問題が発生します。

より強固なログファイルのローテーションメカニズムのためには、サードパーティのログハンドラーをPythonのロギングモジュールと組み合わせて使用してください。

PyPiで利用可能なそのような実装の1つです。

より複雑なソリューションとして、以下のようなロギングサービスを検討することもできます。

また、Pythonのloggingモジュールで標準的に提供されている other handlers のリストも参考にしてください。ソケットへの送信やHTTP URLへの投稿のためのものも、状況によっては妥当な解決策になるかもしれません。

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.