アプリケーション間の通信に使用されるプロトコルでは、リクエストとレスポンスにメタデータを添付します。メタデータは各アプリケーションで処理され、その結果としてのデータがエージェントから報告されます。
要件
NewRelicPythonエージェントバージョン2.92.0.78からバージョン7.0.0.166までが必要です。それより上のバージョンでは非推奨です。
カスタムクライアント(HTTP)
これらのAPIは、内蔵されたインスツルメンテーションの一部としてインスツルメンテーションされていないカスタムHTTP通信ライブラリに使用されます。
HTTPクロスアプリケーショントレースは、HTTPヘッダーを使用して、アプリケーション間でトランザクションメタデータを転送します。アウトバウンドクロスアプリケーショントレースヘッダーを生成するには、 ExternalTrace
クラスでgenerate_request_headers
APIを使用します。インバウンドのクロスアプリケーショントレースヘッダーを処理するには、 ExternalTrace
クラスでprocess_response_headers
APIを使用します。
transaction = newrelic.agent.current_transaction()
# returns a list of tuples in the form (header_name, header_value)
outgoing_headers = newrelic.agent.ExternalTrace.generate_request_headers(transaction)
for header_name, header_value in outgoing_headers:
...request.putheader(header_name, header_value) # code to be instrumented
...make_request(request) # code to be instrumented
transaction = newrelic.agent.current_transaction()
trace = newrelic.agent.ExternalTrace(transaction, 'library', 'http://example.com', 'get')
response = fetch_example_dot_com() # code to be instrumented
trace.process_response_headers(...response.headers)
カスタムクライアント(非HTTP)
これらのAPIは、HTTPトランスポートを使用せず(したがって、メタデータ・トランスポートとしてヘッダーを使用できない可能性がある)、組み込みのインスツルメンテーションの一部としてインスツルメンテーションされていないライブラリをインスツルメンテーションするために使用されます。
計装例
transaction = newrelic.agent.current_transaction()
outgoing_metadata = newrelic.agent.ExternalTrace.get_request_metadata(transaction)
...request.add_metadata(outgoing_metadata) # code to be instrumented
...make_request(request) # code to be instrumented
transaction = newrelic.agent.current_transaction()
trace = newrelic.agent.ExternalTrace(transaction, 'library', 'myproto://service', 'fetch')
...response = fetch_from_service() # code to be instrumented
# extract the metadata string sent from the service
metadata_value = response.metadata # code to be instrumented
trace.process_response_metadata(metadata_value)
WSGIサーバー
ヒント
このエージェントは、すべてのWSGIサーバのクロスアプリケーショントレースメタデータの処理と応答の送信を自動的に行います。
WSGIサーバーのインスツルメンテーションについては、 wsgi_application API documentation を参照してください。
カスタム非HTTPサーバー
WSGIベースではない、またはHTTPをトランスポートとして使用しないカスタムサーバーは、受信したクロスアプリケーショントレースのメタデータを処理し、クロスアプリケーショントレースのレスポンスを生成する必要があります。
以下のAPIは、HTTP以外のリクエストで送信されたクロスアプリケーショントレースのメタデータを処理し、呼び出し元に送り返すレスポンスメタデータを生成することができます。
def handle_incoming_request(request):
transaction = newrelic.agent.current_transaction()
transaction.process_request_metadata(...request.metadata)
response = generate_response() # code to be instrumented
# get_response_metadata returns a string
...response.metadata = transaction.get_response_metadata()