Celery を分散タスク キューイング システムとして使用している場合は、Python エージェントを使用して、Celery プロセスを 非 Web トランザクションとして記録できます。
Celery で Python エージェントを動作させるには、まず エージェントのインストール手順 に従って、エージェントのインストール、設定、 テスト を行います。その後、以下のCelery固有の手順を使用します。
ラン・セロリ
エージェントでCeleryを実行するために使用するコマンドは、Celeryのバージョンと特定のセットアップによって異なります。
アプリケーション名の選択
Pythonエージェント構成ファイルのapp_name
設定は、NewRelicUIに表示されるアプリ名を設定します。
- PythonエージェントがCeleryタスクを監視し、
app_name
をアプリケーションエージェントのapp_name
で使用されているのと同じ値に設定した場合、両方のソースからのデータがその名前でUIに結合されます。 - 異なる名前を設定した場合、データは2つの異なる名前としてUIに別々に表示されます。
エージェントの設定ファイルに複数のアプリ名を設定することで 、結合されたデータと分離されたデータの両方を監視することができます。ここでは、Django アプリケーションを例に、一般的な方法を紹介します。
タスク・リトライ・エラーの無視
Celeryを使用している場合、タスクが失敗し、 celery.exceptions:Retry
またはcelery.exceptions:RetryTaskError
例外が発生する可能性があります。例外は、使用されているCeleryのバージョンによって異なります。
これらのエラーを無視するには、New Relic Application settings UI またはエージェント構成ファイルからこれを設定します。 UI変更は、 設定の優先ルールに従って構成ファイルの変更を上書きします。
エラーを無視する設定をUIから使用するため。
- one.newrelic.comからAPM > (select an app) > Settings > Applicationを選択します。
- Server-side agent configurationを選択します。
- Error collectionから、無視するエラーをカンマで区切って入力します。
エージェント構成ファイルを使用してこれらのエラーを無視するには、 ignore_errors
設定とスペースで区切られた例外のリストを使用します。
error_collector.ignore_errors = celery.exceptions:Retry celery.exceptions:RetryTaskError
トラブルシューティング
Celeryワーカープロセスが突然終了すると、エージェントは通常のシャットダウンプロセスを完了することができず、最終的なデータペイロードが送信されません。その結果、エージェントから報告されるCeleryトランザクションの数が予想より少なくなるか、トランザクションが全く報告されなくなります。
これは、プールワーカープロセスが新しいタスクに置き換えられる前に実行できるタスクの最大数を定義するCELERYD_MAX_TASKS_PER_CHILD
設定を使用している場合に発生する可能性があります。使用する場合、その制限に達するとワーカーは強制的にシャットダウンされます。これは、データがエージェントによって記録されないことを意味します。たとえば、 MAX_TASKS_PER_CHILD = 1
の場合、これによりデータは報告されません。
これをトラブルシューティングする方法は、アプリケーションでMAX_TASKS_PER_CHILD
制限を使用する理由によって異なります。
- 通常のシャットダウンプロセスを許可するには、これをデフォルトのノーリミット設定に戻します。
- 問題の影響を軽減するには、
MAX_TASKS_PER_CHILD
の制限を引き上げます。
重要
バージョン3.2.2.94以降では、 MAX_TASKS_PER_CHILD
の制限に達するとPythonエージェントがシャットダウンします。データが失われることはありません。
重要
Celery のメイン プロセスをエージェントで監視することはできません。ワーカー プロセスのみを監視できます。 アクティブ化アプリケーションの警告を参照してください