• /
  • EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

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

問題を作成する

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オプションを設定します。

Example:

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を使用することもできます。

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

allモニター プロセスと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株式会社。

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