構文
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
ASGIアプリケーションのエントリーポイントをマークすることで、Webトランザクションを監視します。
説明
asgi_application
は、ASGI アプリケーションのエントリーポイントをインスツルメン トすることで Web トランザクションを監視するために使用される Python デコレーターです。Python エージェントは、 ASGI を使用するほとんどのフレームワークとサーバー を自動的にサポートします。使用しているフレームワークやウェブサーバーがサポートされていない場合は、 高度な統合プロセスの一部としてこのAPIを使用する必要があるかもしれません 。
asgi_application
デコレーターを使用できない場合は、以下の他の呼び出し形式のいずれかを使用できます。
- ラッパー: ラッパーコール:
ASGIApplicationWrapper
.スタックされる可能性のある別々のASGIアプリケーション・コンポーネントのために、複数の場所でラッパーを利用することができます。その場合、最初に遭遇したラッパーがトランザクションの開始を意味し、エージェントはその最初のラッパーに基づいてターゲット・アプリを決定します(それ以降のラッパーは無視されます)。 - パスベースのラッパー: パスベースのラッパーコールは
wrap_asgi_application
.インスツルメンテーション・スコープでASGIオブジェクトを変数として参照できなかった場合に使用します。これはデコレーターと同じパラメータを取り、さらにmodule
とobject_path
のパラメータを取ります。
デコレーターとラッパーを使い分ける理由については、 Different call formats を参照してください。
パラメータ
デコレーターのパラメータ
newrelic.agent.asgi_application(application=None, name=None, group=None, framework=None)
asgi_application
デコレーターはこれらのパラメータを使用します。
パラメーター | 説明 |
---|---|
文字列、アプリケーションオブジェクト | オプションです。このデータと関連付けるアプリケーション名。デフォルトは 文字列を指定する場合は、正確なアプリケーション名でなければならず、アプリケーション名のリストにすることはできません。アプリケーション・オブジェクトの生成については、 |
文字列 | オプションで、ほとんど使用されません。ASGI エントリポイントを介して取得されるすべてのリクエストのトランザクション名を設定します。通常は、すべてのトランザクションが同じ名前になることを望まないため、使用されません( Metric grouping issue も参照)。 |
文字列 | オプションで、ほとんど使用されません。 |
タプル | オプションです。フレームワークの名前とバージョン番号を表す2つの文字列を持つタプルです。例: |
ラッパーのパラメーター
newrelic.agent.ASGIApplicationWrapper(wrapped, application=None, name=None, group=None, framework=None)
これは、 asgi_application
が必要とする パラメータ のすべてに加えて、 をラップした
パラメータを取ります。
パラメーター | 説明 |
---|---|
オブジェクト | 必須.ラッピングされるASGIオブジェクト。 |
パスベースのラッパーパラメーター
newrelic.agent.wrap_asgi_application(module, object_path, application=None, name=None, group=None, framework=None)
asgi_application
で必要な パラメータ に加えて、この呼び出しでは、追加の module
と object_path
パラメータが必要です。
パラメーター | 説明 |
---|---|
オブジェクト または 文字列 | 必須.ASGIオブジェクトを含むモジュールです。 |
文字列 | 必須.ファイル内のASGIオブジェクトを見つけるためのクラスメソッドまたはメソッドを表します。 |
例
asgi_applicationの例
オプションの アプリケーション
パラメータを指定せずにデコレーターを呼び出した例です。
@newrelic.agent.asgi_application()async def application(scope, receive, send): await send( { "type": "http.response.start", "status": 200, "headers": [(b"Content-type", b"text/plain")] } ) await send( { "type": "http.response.body", "body": b"Hello World!" } )
ASGIApplicationWrapperの例
ASGIApplicationWrapper
の使用例で、 asgi_application
デコレーターが動作しない場合に必要になることがあります。
import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")from django.core.asgi import get_asgi_applicationapplication = get_asgi_application()
application = newrelic.agent.ASGIApplicationWrapper(application)
wrap_asgi_applicationの例
パスベースのラッパーの使用例。
import newrelic.agentnewrelic.agent.initialize('newrelic.ini')
class Application: def __init__(self, scope): self.scope = scope
async def __call__(self, receive, send): await send({"type": "http.response.start", "status": 200}) await send({"type": "http.response.body", "body": b"Hello World!"})
newrelic.agent.wrap_asgi_application(__name__, 'Application')