翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CloudWatch を使用して GraphQL APIデータをモニタリングおよびログに記録する
CloudWatch メトリクスと CloudWatch ログAPIを使用して、GraphQL のログ記録とデバッグを行うことができます。これらのツールにより、デベロッパーはパフォーマンスのモニタリング、問題のトラブルシューティング、GraphQL オペレーションの最適化を効果的に行うことができます。
CloudWatch メトリクスは、APIパフォーマンスと使用状況をモニタリングするための幅広いメトリクスを提供するツールです。これらのメトリクスは、主に 2 つのカテゴリに分類されます。
-
一般的なAPIメトリクス : これには
4XXError
、クライアントとサーバーのエラー5XXError
の追跡、レスポンスタイムLatency
の測定、合計API呼び出しRequests
のモニタリング、リソース使用状況の追跡TokensConsumed
のための および が含まれます。 -
リアルタイムサブスクリプションメトリクス : これらのメトリクスは、 WebSocket 接続とサブスクリプションアクティビティに焦点を当てています。これには、接続リクエスト、成功した接続、サブスクリプション登録、メッセージ発行、アクティブな接続とサブスクリプションのメトリクスが含まれます。
このガイドでは、リゾルバーのパフォーマンス、データソースインタラクション、個々の GraphQL オペレーションに関するより詳細なデータを提供する拡張メトリクスも紹介しています。これらのメトリクスは、より深いインサイトを提供しますが、追加のコストが発生します。
CloudWatch Logs は、GraphQL のログ記録機能を有効にするツールですAPIs。ログは の 2 つのレベルで設定できますAPI。
-
リクエストレベルのログ : HTTPヘッダー、GraphQL クエリ、オペレーションの概要、サブスクリプション登録など、全体的なリクエスト情報をキャプチャします。
-
フィールドレベルのログ : リクエストとレスポンスのマッピング、各フィールドのトレース情報など、個々のフィールド解決に関する詳細情報を提供します。
ログ記録を設定したり、ログエントリを解釈したり、ログデータを使用してトラブルシューティングや最適化を行うことができます。 は、クエリの実行、解析、検証、フィールド解決データを明らかにするさまざまなログタイプ AWS AppSync を提供します。
セットアップと設定
GraphQL で自動ログ記録を有効にするにはAPI、 AWS AppSync コンソールを使用します。
-
にサインイン AWS Management Console し、AppSyncコンソール
を開きます。 -
APIs ページで、GraphQL の名前を選択しますAPI。
-
APIのホームページのナビゲーションペインで、設定 を選択します。
-
[ログ記録] で以下を行います。
-
[ログを有効にする] をオンにします。
-
リクエストレベルの詳細なロギングを行うには、[詳細な内容を含める] のチェックボックスをオンにします。(オプション)
-
[フィールドリゾルバーのログレベル] で、希望するフィールドレベルのロギングレベル ([なし]、[エラー]、または [すべて]) を選択します。(オプション)
-
「既存のロールを作成または使用する」で、新しいロールを選択して、 AWS AppSync へのログの書き込みを許可する新しい AWS Identity and Access Management (IAM) を作成します CloudWatch。または、既存のロールを選択して、 AWS アカウント内の既存のIAMロールの Amazon リソースネーム (ARN) を選択します。
-
-
[Save] を選択します。
手動IAMロール設定
既存のIAMロールを使用する場合、ロールは にログ AWS AppSync を書き込むために必要なアクセス許可を付与する必要があります CloudWatch。これを手動で設定するには、 がログの作成時にロールを引き AWS AppSync 受けるARNことができるように、サービスロールを指定する必要があります。
IAM コンソールAWSAppSyncPushToCloudWatchLogsPolicy
を持つ名前の新しいポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
次に、 という名前の新しいロールを作成しAWSAppSyncPushToCloudWatchLogsRole、新しく作成されたポリシーをロールにアタッチします。このロールの信頼関係を次のように編集します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
ロールをコピーARNし、 AWS AppSync GraphQL のログ記録を設定するときに使用しますAPI。
CloudWatch メトリクス
CloudWatch メトリクスを使用して、HTTPステータスコードやレイテンシーにつながる可能性のある特定のイベントをモニタリングしてアラートを提供できます。次のメトリクスが出力されます。
-
4XXError
-
クライアントの設定が正しくないためにリクエストが無効になったために発生するエラー。通常、GraphQL を実行する外部の任意の場所で、これらのエラーが発生します。例えば、これらのエラーは、リクエストに誤ったJSONペイロードや誤ったクエリが含まれている場合、サービスがスロットリングされている場合、または認証設定が誤って設定されている場合に発生する可能性があります。
単位: カウント これらのエラーの出現総数を取得するために、Sum 統計を使用します。
-
5XXError
-
GraphQL クエリの 実行中に発生したエラー。例えば、空のスキーマや不正確なスキーマに対してクエリを実行した場合に発生する可能性があります。また、Amazon Cognito ユーザープール ID または AWS リージョンが有効でない場合にも発生する可能性があります。または、リクエストの処理中に問題 AWS AppSync が発生した場合にも発生する可能性があります。
単位: カウント これらのエラーの出現総数を取得するために、Sum 統計を使用します。
-
Latency
-
がクライアントからリクエスト AWS AppSync を受信してからクライアントにレスポンスを返すまでの時間。エンドデバイスに到達するレスポンスに発生したネットワークレイテンシーは含まれません。
単位: ミリ秒 予測されるレイテンシーを評価するために Average 統計を使用します。
Requests
-
アカウントAPIs内のすべての が処理したリクエスト (クエリ + ミューテーション) の数。リージョン別。
単位: カウント 特定のリージョンで処理されたすべてのリクエストの数。
TokensConsumed
-
トークンは、
Request
が使用するリソースの量 (処理時間と使用量) に基づいてRequests
に割り当てられます。通常、それぞれのRequest
が 1 つのトークンを消費します。ただし、Request
が大量のリソースを消費する場合には、必要に応じて追加のトークンが割り当てられます。単位: カウント 特定のリージョンで処理されたリクエストに割り当てられるトークンの数。
NetworkBandwidthOutAllowanceExceeded
-
注記
AWS AppSync コンソールのキャッシュ設定ページで、キャッシュヘルスメトリクスオプションを使用すると、このキャッシュ関連のヘルスメトリクスを有効にできます。
スループットが集約帯域幅の制限を超えたため、ネットワークパケットがドロップされました。これは、キャッシュ設定のボトルネックを診断するのに役立ちます。データは、
appsyncCacheNetworkBandwidthOutAllowanceExceeded
メトリクスAPI_Id
で を指定APIすることで、特定の に対して記録されます。単位: カウント ID でAPI指定された の帯域幅制限を超えた後にドロップされたパケットの数。
EngineCPUUtilization
-
注記
AWS AppSync コンソールのキャッシュ設定ページで、キャッシュヘルスメトリクスオプションを使用すると、このキャッシュ関連のヘルスメトリクスを有効にできます。
Redis OSSプロセスに割り当てられたCPU使用率 (パーセンテージ)。これは、キャッシュ設定のボトルネックを診断するのに役立ちます。データは、
appsyncCacheEngineCPUUtilization
メトリクスAPI_Id
で を指定APIすることで、特定の に対して記録されます。単位 : パーセント 。ID でAPI指定された の Redis OSSプロセスで現在使用されているCPU割合。
リアルタイムサブスクリプション
すべてのメトリクスは 1 つのディメンション G raphQLAPIIdで出力されます。これは、すべてのメトリクスが GraphQL API と結合されていることを意味しますIDs。次のメトリクスは、純粋 の GraphQL サブスクリプションに関連しています WebSockets。
ConnectRequests
-
成功した試行と失敗した試行の両方を含む AWS AppSync、 に対して行われた WebSocket 接続リクエストの数。
単位: カウント 接続リクエストの総数を取得するために Sum 統計を使用します。
ConnectSuccess
-
への正常な WebSocket 接続の数 AWS AppSync。サブスクリプションなしで接続することは可能です。
単位: カウント 成功した接続の出現総数を取得するために、Sum 統計を使用します。
ConnectClientError
-
クライアント側のエラー AWS AppSync が原因で によって拒否された WebSocket 接続の数。これは、サービスがスロットリングされているか、承認設定が正しく構成されていないことを意味する可能性があります。
単位: カウント クライアント側の接続エラーの出現総数を取得するために、Sum 統計を使用します。
ConnectServerError
-
接続の処理 AWS AppSync 中に から発生したエラーの数。これは通常、予期しないサーバー側の問題が発生した場合に発生します。
単位: カウント サーバー側の接続エラーの出現総数を取得するために、Sum 統計を使用します。
DisconnectSuccess
-
からの WebSocket 正常な切断の数 AWS AppSync。
単位: カウント 成功した切断の出現総数を取得するために、Sum 統計を使用します。
DisconnectClientError
-
接続の WebSocket切断 AWS AppSync 中に から発生したクライアントエラーの数。
単位: カウント 切断エラーの出現総数を取得するために、Sum 統計を使用します。
DisconnectServerError
-
接続の WebSocket切断 AWS AppSync 中に から発生したサーバーエラーの数。
単位: カウント 切断エラーの出現総数を取得するために、Sum 統計を使用します。
SubscribeSuccess
-
AWS AppSync から に正常に登録されたサブスクリプションの数 WebSocket。サブスクリプションがなくても接続することはできますが、接続せずにサブスクリプションを持つことはできません。
単位: カウント 成功したサブスクリプションの出現総数を取得するために、Sum 統計を使用します。
SubscribeClientError
-
クライアント側のエラー AWS AppSync のために によって拒否されたサブスクリプションの数。これは、JSONペイロードが正しくない場合、サービスがスロットリングされている場合、または認証設定が誤って設定されている場合に発生する可能性があります。
単位: カウント クライアント側のサブスクリプションエラーの出現総数を取得するために、Sum 統計を使用します。
SubscribeServerError
-
サブスクリプションの処理 AWS AppSync 中に から発生したエラーの数。これは通常、予期しないサーバー側の問題が発生した場合に発生します。
単位: カウント サーバー側のサブスクリプションエラーの出現総数を取得するために、Sum 統計を使用します。
UnsubscribeSuccess
-
正常に処理されたサブスクリプション解除リクエストの数。
単位: カウント 成功したサブスクリプション解除リクエストの出現総数を取得するために、Sum 統計を使用します。
UnsubscribeClientError
-
クライアント側のエラー AWS AppSync が原因で によって拒否されたサブスクライブ解除リクエストの数。
単位: カウント クライアント側のサブスクリプション解除リクエストのエラーの出現総数を取得するために、Sum 統計を使用します。
UnsubscribeServerError
-
サブスクライブ解除リクエストの処理 AWS AppSync 中に から発生したエラーの数。これは通常、予期しないサーバー側の問題が発生した場合に発生します。
単位: カウント サーバー側のサブスクリプション解除リクエストのエラーの出現総数を取得するために、Sum 統計を使用します。
PublishDataMessageSuccess
-
正常に発行されたサブスクリプションイベントメッセージの数。
単位: カウント 正常に発行されたサブスクリプションイベントメッセージの合計を取得するために、Sum 統計を使用します。
PublishDataMessageClientError
-
クライアント側のエラーのために発行に失敗したサブスクリプションイベントメッセージの数。
Unit
: カウント クライアント側のサブスクリプションイベント発行エラーの出現総数を取得するために、Sum 統計を使用します。 PublishDataMessageServerError
-
サブスクリプションイベントメッセージの発行 AWS AppSync 中に から発生したエラーの数。これは通常、予期しないサーバー側の問題が発生した場合に発生します。
単位: カウント サーバー側のサブスクリプションイベント発行エラーの出現総数を取得するために、Sum 統計を使用します。
PublishDataMessageSize
-
発行されたサブスクリプションイベントメッセージのサイズ。
単位: バイト
ActiveConnections
-
クライアントから への 1 分間 AWS AppSync の同時 WebSocket 接続の数。
単位: カウント 開かれている接続の合計数を取得するために、Sum 統計を使用します。
ActiveSubscriptions
-
クライアントからの同時サブスクリプション数 (1 分間)。
単位: カウント アクティブなサブスクリプションの合計数を取得するために、Sum 統計を使用します。
ConnectionDuration
-
接続が開いたままになる時間。
単位: ミリ秒 接続期間を評価するために Average 統計を使用します。
OutboundMessages
-
正常に発行された計測メッセージの数。1 つの計測メッセージは 5 kB の配信済みデータに相当します。
単位: カウント 正常に公開された従量制メッセージの総数を取得するために、Sum 統計を使用します。
InboundMessageSuccess
-
正常に処理されたインバウンドメッセージの数。ミューテーションによって呼び出されるサブスクリプションタイプごとに 1 つのインバウンドメッセージが生成されます。
単位: カウント 正常に処理されたインバウンドメッセージの総数を取得するために、Sum 統計を使用します。
InboundMessageError
-
240 kB のサブスクリプションペイロードサイズ制限を超えるなど、無効なAPIリクエストが原因で処理に失敗したインバウンドメッセージの数。
単位: カウント Sum 統計を使用して、 API関連の処理に失敗したインバウンドメッセージの総数を取得します。
InboundMessageFailure
-
からのエラーが原因で処理に失敗したインバウンドメッセージの数 AWS AppSync。
単位: カウント Sum 統計を使用して、 AWS AppSync関連の処理に失敗したインバウンドメッセージの総数を取得します。
InboundMessageDelayed
-
遅延インバウンドメッセージの数。インバウンドメッセージレートクォータまたはアウトバウンドメッセージレートクォータのいずれかが超過すると、インバウンドメッセージが遅延する可能性があります。
単位: カウント Sum 統計を使用して、遅延したインバウンドメッセージの総数を取得します。
InboundMessageDropped
-
ドロップされたインバウンドメッセージの数。インバウンドメッセージは、インバウンドメッセージレートクォータまたはアウトバウンドメッセージレートクォータのいずれかに違反した場合に削除できます。
単位: カウント Sum 統計を使用して、ドロップされたインバウンドメッセージの総数を取得します。
InvalidationSuccess
-
$extensions.invalidateSubscriptions()
とのミューテーションによって正常に無効 (購読解除) されたサブスクリプションの数。単位: カウント サブスクライブが正常に解除されたサブスクリプションの総数を取得するには Sum 統計を使用します。
InvalidationRequestSuccess
-
正常に処理された無効化リクエストの数。
単位: カウント 正常に処理された無効化リクエストの総数を取得するために、Sum 統計を使用します。
InvalidationRequestError
-
無効なリクエストが原因で処理に失敗した無効化APIリクエストの数。
単位: カウント Sum 統計を使用して、 API関連の処理に失敗した無効化リクエストの総数を取得します。
InvalidationRequestFailure
-
からのエラーが原因で処理に失敗した無効化リクエストの数 AWS AppSync。
単位: カウント Sum 統計を使用して、 AWS AppSync関連の処理に失敗した無効化リクエストの総数を取得します。
InvalidationRequestDropped
-
無効化リクエストのクォータを超えたときにドロップされた無効化リクエストの数。
単位: カウント ドロップされた無効化リクエストの総数を取得するために、Sum 統計を使用します。
インバウンドメッセージとアウトバウンドメッセージの比較
ミューテーションが実行されると、そのミューテーションの @aws_subscribe ディレクティブを含むサブスクリプションフィールドが呼び出されます。サブスクリプションの呼び出しごとに 1 つのインバウンドメッセージが生成されます。例えば、@aws_subscribe で 2 つのサブスクリプションフィールドが同じミューテーションを指定すると、そのミューテーションが呼び出されると 2 つのインバウンドメッセージが生成されます。
1 つのアウトバウンドメッセージは、 WebSocket クライアントに配信される 5 kB のデータに相当します。例えば、15 kB のデータを 10 のクライアントに送信すると、30 のアウトバウンドメッセージ (15 kB * 10 のクライアント/メッセージあたり 5 kB = 30 メッセージ) になります。
インバウンドメッセージまたはアウトバウンドメッセージのクォータ引き上げをリクエストできます。詳細については、AWS 「 全般のリファレンスガイド」のAWS AppSync 「エンドポイントとクォータ」および「 サービスクォータユーザーガイド」の「クォータ引き上げをリクエストする手順」を参照してください。 Service Quotas
拡張メトリクス
拡張メトリクスは、リクエスト数やエラー数、レイテンシー、キャッシュヒット/ミスなど AWS AppSync 、API使用状況とパフォーマンスに関する詳細なデータを生成します。拡張メトリクスデータはすべて CloudWatch アカウントに送信され、送信されるデータのタイプを設定できます。
注記
拡張メトリクスを使用する場合、追加料金が適用されます。詳細については、「Amazon CloudWatch
これらのメトリクスは、 AWS AppSync コンソールのさまざまな設定ページで確認できます。API 設定ページで、拡張メトリクスセクションでは、次の項目を有効または無効にできます。
リゾルバーメトリクスの動作: これらのオプションは、リゾルバーの追加メトリクスの収集方法を制御します。フルリクエストリゾルバーメトリクス (リクエスト内のすべてのリゾルバーに対して有効になっているメトリクス) またはリゾルバーごとのメトリクス (設定が有効になっているリゾルバーに対してのみ有効になっているメトリクス) を有効にすることができます。以下のオプションが利用できます。
-
GraphQL errors per resolver (GraphQLError)
-
リゾルバーごとに発生した GraphQL エラーの数。
メトリクスディメンション:
API_Id
、Resolver
単位: カウント
-
Requests per resolver (Request)
-
リクエスト中に発生した呼び出しの数。これはリゾルバーごとに記録されます。
メトリクスディメンション:
API_Id
、Resolver
単位: カウント
-
Latency per resolver (Latency)
-
リゾルバーの呼び出しを完了する時間。レイテンシーはミリ秒単位で測定され、リゾルバーごとに記録されます。
メトリクスディメンション:
API_Id
、Resolver
単位: ミリ秒
Cache hits per resolver (CacheHit)
-
リクエスト中のキャッシュヒットの数。これは、キャッシュが使用されている場合にのみ出力されます。キャッシュヒットはリゾルバーごとに記録されます。
メトリクスディメンション:
API_Id
、Resolver
単位: カウント
Cache misses per resolver (CacheMiss)
-
リクエスト中のキャッシュミスの数。これは、キャッシュが使用されている場合にのみ出力されます。キャッシュミスはリゾルバーごとに記録されます。
メトリクスディメンション:
API_Id
、Resolver
単位: カウント
データソースメトリクスの動作: これらのオプションは、データソースの追加メトリクスの収集方法を制御します。フルリクエストデータソースメトリクス (リクエスト内のすべてのデータソースで有効になっているメトリクス) またはデータソースごとのメトリクス (設定が有効になっているデータソースでのみ有効になっているメトリクス) を有効にすることができます。以下のオプションが利用できます。
-
Requests per data source (Request)
-
リクエスト中に発生した呼び出しの数。リクエストはデータソースごとに記録されます。完全なリクエストが有効になっている場合、各データソースは に独自のエントリを持ちます CloudWatch。
メトリクスディメンション:
API_Id
、Datasource
単位: カウント
-
Latency per data source (Latency)
-
データソースの呼び出しを完了する時間。レイテンシーはデータソースごとに記録されます。
メトリクスディメンション:
API_Id
、Datasource
単位: ミリ秒
-
Errors per data source (GraphQLError)
-
データソースの呼び出し中に発生したエラーの数。
メトリクスディメンション:
API_Id
、Datasource
単位: カウント
オペレーションメトリクス : GraphQL オペレーションレベルのメトリクスを有効にします。
-
Requests per operation (Request)
-
指定された GraphQL オペレーションが呼び出された回数。
メトリクスディメンション:
API_Id
、Operation
単位: カウント
-
GraphQL errors per operation (GraphQLError)
-
指定された GraphQL オペレーション中に発生した GraphQL エラーの数。
メトリクスディメンション:
API_Id
、Operation
単位: カウント
CloudWatch ログ
新規または既存の GraphQL には、APIリクエストレベルとフィールドレベルの 2 種類のログ記録を設定できます。
リクエストレベルログ
リクエストレベルのロギング (詳細な内容を含む) を設定すると、次の情報がログに記録されます。
-
消費されたトークンの数。
-
リクエストヘッダーとレスポンスHTTPヘッダー
-
リクエストで実行中の GraphQL クエリ
-
オペレーション全体の要約
-
登録された、新規および既存の GraphQL サブスクリプション
フィールドレベルログ
フィールドレベルのロギングを設定すると、以下の情報がログに記録されます。
-
各フィールドに対してソースと引数で生成されたリクエストマッピング
-
各フィールドの、変換されたレスポンスマッピングで、対象フィールドを解決した結果のデータが含まれます。
-
各フィールドのトレース情報
ログ記録を有効にすると、 は CloudWatch ログ AWS AppSync を管理します。このプロセスには、ロググループとログストリームの作成、およびログとログストリームへのレポートが含まれます。
GraphQL のログ記録を有効にしてリクエストを行うAPIと、 はロググループの下にロググループとログストリーム AWS AppSync を作成します。ロググループの名前は /aws/appsync/apis/{graphql_api_id}
形式に従います。各ロググループ内で、ログはログストリームにさらに分割されます。これらは、ログデータがレポートされるときに Last Event Time によって順序付けされます。
すべてのログイベントには、そのリクエストの x-amzn-RequestId がタグ付けされます。これにより、 のログイベントをフィルタリング CloudWatch して、そのリクエストに関するすべてのログ情報を取得できます。は、すべての GraphQL AWS AppSync リクエストのレスポンスヘッダー RequestId から取得できます。
フィールドレベルのログ記録は次のログレベルで設定されます。
-
NONE - フィールドレベルのログがキャプチャされません。
-
- ERROR - 次の情報のみがエラーがあるフィールドに対してログ記録されます。
-
-
サーバーレスポンスのエラーセクション
-
フィールドレベルエラー
-
エラーフィールドに対して解決された、生成リクエスト / レスポンス関数
-
-
- ALL - 次の情報が、クエリのすべてのフィールドに記録されます。
-
-
フィールドレベルのトレース情報
-
各フィールドに対して解決された、生成リクエスト / レスポンス関数
-
モニタリングのメリット
ログおよびメトリクスを使用して、GraphQL クエリを特定、トラブルシューティング、最適化できます。たとえば、クエリの各フィールドに記録されたトレース情報を使用して、レイテンシーの問題をデバッグできます。これを示すため、GraphQL クエリで 1 つまたは複数のリゾルバーをネストして使用しているとします。 CloudWatch Logs のサンプルフィールドオペレーションは次のようになります。
{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }
これは GraphQL スキーマに対応します。次のようになります。
type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }
上記のログの結果で、path は、singlePost()
という名前のクエリを実行して返されたデータの単一項目を示します。この例では、最初のインデックス (0) の name フィールドを表します。startOffset は、GraphQL クエリオペレーションの開始からのオフセットを提供します。duration は、フィールドを解決するのにかかる合計時間です。これらの値は、特定のデータソースからデータの実行が予測より遅い理由、または特定のフィールドがクエリ全体の処理速度を低下することのトラブルシューティングに役立つ可能性があります。例えば、Amazon DynamoDB テーブルのプロビジョニングスループットを向上させたり、オペレーション全体のパフォーマンスが低下する原因となっている特定のフィールドをクエリから削除したりすることができます。
2019 年 5 月 8 日現在、 はログイベントを完全構造化 として AWS AppSync 生成しますJSON。これにより、 CloudWatch Logs Insights や Amazon OpenSearch Service などのログ分析サービスを使用して、GraphQL リクエストのパフォーマンスとスキーマフィールドの使用特性を理解するのに役立ちます。たとえば、パフォーマンスの問題の根本原因となっている可能性のある高いレイテンシーが発生しているリゾルバーの特定を簡単に行えます。また、スキーマ内で最も使用頻度の低いフィールドを特定し、GraphQL フィールドを廃止する場合の影響を評価することもできます。
競合の検出と同期ロギング
に、フィールドリゾルバーのログレベルがすべての AWS AppSync APIに設定されている CloudWatch ログへのログがある場合、 は競合検出と解決情報をロググループに AWS AppSync 出力します。これにより、 が AWS AppSync API競合にどのように対応したかを詳細に把握できます。応答を解釈しやすくするため、ログには以下の情報が記録されます。
-
conflictType
-
バージョンの不一致またはお客様が指定した条件が原因で競合が発生したかどうかを詳細に示します。
-
conflictHandlerConfigured
-
リクエスト時にリゾルバーで設定された競合ハンドラーを示します。
-
message
-
競合をどのように検出し、解決したかに関する情報を提供します。
-
syncAttempt
-
リクエストを最終的に拒否する前に、サーバーがデータを同期するために試行した回数。
-
data
-
競合ハンドラーが
Automerge
に設定されていた場合、このフィールドはAutomerge
e が各フィールドに対してどのような決定を行ったかを示すために入力されます。提供されるアクションは、次のとおりです。-
REJECTED - が受信フィールド値をサーバー内の値に優先して
Automerge
拒否する場合。 -
ADDED - サーバーに既存の値がないため、 が受信フィールドに
Automerge
を追加する場合。 -
APPENDED - がサーバーに存在するリストの値に受信値
Automerge
を追加する場合。 -
MERGED - は、受信値をサーバーに存在するセットの値に
Automerge
マージします。
-
トークン数を使用してリクエストを最適化する
1,500 KB 秒以下のメモリと vCPU 時間しか消費しないリクエストには、1 つのトークンが割り当てられます。リソース消費量が 1,500 KB 秒を超えるリクエストには、追加のトークンが渡されます。例えば、リクエストが 3,350 KB 秒を消費する場合、 はリクエストに 3 つのトークン (次の整数値に切り上げ) を AWS AppSync 割り当てます。デフォルトでは、 は、デプロイ先の AWS リージョンに応じて、アカウントAPIs内の に 1 秒あたり最大 5,000 または 10,000 個のリクエストトークンを AWS AppSync 割り当てます。APIs 各 が 1 秒あたり平均 2 つのトークンを使用する場合、それぞれ 1 秒あたり 2,500 または 5,000 リクエストに制限されます。1 秒あたりに割り当てられた量よりも多くのトークンが必要な場合は、リクエストを送信してリクエストトークンのレートのデフォルトクォータを増やすことができます。詳細については、「 AWS 全般のリファレンス ガイド」のAWS AppSync 「エンドポイントとクォータ」およびService Quotas」を参照してください。 https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html
リクエストごとのトークン数が多い場合は、リクエストを最適化し、 のパフォーマンスを向上させる機会があることを示している可能性がありますAPI。リクエスト 1 回あたりのトークン数を増やす要因には次のようなものがあります。
-
GraphQL スキーマのサイズと複雑さ。
-
リクエストとレスポンスのマッピングテンプレートの複雑さ。
-
1 回のリゾルバー呼び出し回数。
-
リゾルバーから返されたデータ転送量。
-
ダウンストリームデータソースのレイテンシー。
-
(parallel 呼び出しやバッチ呼び出しとは対照的に) 連続したデータソース呼び出しを必要とするスキーマとクエリの設計。
-
ロギング設定、特にフィールドレベルおよび詳細なログコンテンツ。
注記
クライアントは、 AWS AppSync メトリクスとログに加えて、レスポンスヘッダー を介してリクエストで消費されるトークンの数にアクセスできますx-amzn-appsync-TokensConsumed
。
ログサイズ制限
デフォルトでは、ログ記録が有効になっている場合、 AWS AppSync はリクエストごとに最大 1 MB のログを送信します。このサイズを超えるログは切り捨てられます。ログサイズを減らすには、フィールドレベルのログのERROR
ログレベルを選択し、VERBOSE
ログ記録を無効にするか、不要な場合はフィールドレベルのログを完全に無効にします。ALL
ログレベルの代替として、拡張メトリクスを使用して特定のリゾルバー、データソース、または GraphQL オペレーションに関するメトリクスを取得したり、 が提供するログ記録ユーティリティを使用して必要な情報のみをログ AppSync 記録したりできます。
ログタイプリファレンス
RequestSummary
-
requestId: リクエストの一意の識別子。
-
graphQLAPIId: リクエストAPIを行う GraphQL の ID。
-
statusCode: HTTPステータスコードレスポンス。
-
レイテンシー: End-to-end リクエストのレイテンシーをナノ秒単位で整数で表します。
{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }
ExecutionSummary
-
requestId: リクエストの一意の識別子。
-
graphQLAPIId: リクエストAPIを行う GraphQL の ID。
-
startTime: 3339 形式のリクエストの GraphQL RFC 処理の開始タイムスタンプ。
-
endTime: 3339 形式のリクエストの GraphQL RFC 処理の終了タイムスタンプ。
-
duration: GraphQL 処理の合計経過時間 (ナノ秒単位、整数)。
-
version: のスキーマバージョン ExecutionSummary。
-
- parsing:
-
-
startOffset: 呼び出しを基準にしたナノ秒単位の解析の開始オフセットを整数として計算します。
-
duration: 解析にかかった時間 (ナノ秒単位、整数)。
-
-
- validation:
-
-
startOffset: 呼び出しに対する検証の開始オフセットをナノ秒単位で整数で表します。
-
duration: 検証の実行にかかった時間 (ナノ秒単位、整数)。
-
{ "duration": 217406145, "logType": "ExecutionSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "startTime": "2019-01-01T06:06:18.956Z", "endTime": "2019-01-01T06:06:19.174Z", "parsing": { "startOffset": 49033, "duration": 34784 }, "version": 1, "validation": { "startOffset": 129048, "duration": 69126 }, "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }
トレース
-
requestId: リクエストの一意の識別子。
-
graphQLAPIId: リクエストAPIを行う GraphQL の ID。
-
startOffset: 呼び出しに対するフィールド解決の開始オフセットをナノ秒単位で整数で表します。
-
duration: フィールドの解決にかかった時間 (ナノ秒単位、整数)。
-
fieldName: 解決されるフィールドの名前。
-
parentType: 解決されるフィールドの親タイプ。
-
returnType: 解決されるフィールドの戻りタイプ。
-
path: レスポンスのルートから解決されるフィールドまでのパスセグメントのリスト。
-
resolverArn: フィールド解決に使用されるリゾルバーARNの 。ネストされたフィールドには存在しない場合があります。
{ "duration": 216820346, "logType": "Tracing", "path": [ "putItem" ], "fieldName": "putItem", "startOffset": 178156, "resolverArn": "arn:aws:appsync:us-east-1:111111111111:apis/pmo28inf75eepg63qxq4ekoeg4/types/Mutation/fields/putItem", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "parentType": "Mutation", "returnType": "Item", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }
CloudWatch Logs Insights を使用したログの分析
以下は、GraphQL オペレーションのパフォーマンスとヘルスに関する実用的な洞察を得るために実行できるクエリの例です。これらの例は、 CloudWatch Logs Insights コンソールでサンプルクエリとして使用できます。CloudWatch コンソール
以下のクエリは、レイテンシーが最大の上位 10 個の GraphQL リクエストを返します。
filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10
以下のクエリは、レイテンシーが最大の上位 10 個のリゾルバーを返します。
fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc
以下のクエリは、呼び出し頻度が最も高いリゾルバーを返します。
fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc
以下のクエリは、マッピングテンプレートのエラーが最も多いリゾルバーを返します。
fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | limit 10 | sort errorCount desc
以下のクエリは、リゾルバーのレイテンシー統計を返します。
fields ispresent(resolverArn) as isRes | stats min(duration), max(duration), avg(duration) as avg_dur by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort avg_dur desc
以下のクエリは、フィールドのレイテンシー統計を返します。
stats min(duration), max(duration), avg(duration) as avg_dur by concat(parentType, '/', fieldName) as fieldKey | filter logType = "Tracing" | limit 10 | sort avg_dur desc
CloudWatch Logs Insights クエリの結果は、 CloudWatch ダッシュボードにエクスポートできます。
OpenSearch Service を使用してログを分析する
Amazon OpenSearch Service を使用して AWS AppSync ログを検索、分析、視覚化し、運用上の問題のパフォーマンスのボトルネックと根本原因を特定できます。レイテンシーが最大でエラーのあるリゾルバーを特定できます。さらに、 OpenSearch ダッシュボードを使用して、強力な視覚化を備えたダッシュボードを作成できます。 OpenSearch ダッシュボードは、 OpenSearch Service で利用できるオープンソースのデータの視覚化と探索ツールです。 OpenSearch Dashboards を使用すると、GraphQL オペレーションのパフォーマンスと状態を継続的にモニタリングできます。例えば、GraphQL リクエストの P90 レイテンシーを可視化し、各リゾルバーの P90 レイテンシーにドリルダウンできるダッシュボードを作成できます。
OpenSearch サービスを使用する場合は、フィルターパターンとして「cwl*」を使用して OpenSearch インデックスを検索します。 OpenSearch サービスは CloudWatch 、ログからストリーミングされたログに「cwl-」というプレフィックスでインデックスを作成します。Service に送信された他の CloudWatch ログとログを区別 AWS AppSync APIするには OpenSearch 、検索graphQLAPIID.keyword=
に のフィルター式を追加することをお勧めします。YourGraphQLAPIID
ログ形式の移行
2019 年 5 月 8 日以降に AWS AppSync 生成されるログイベントは、完全に構造化された としてフォーマットされますJSON。2019 年 5 月 8 日より前の GraphQL リクエストを分析するには、GitHub サンプル
また、 のメトリクスフィルターを使用して CloudWatch ログデータを数値 CloudWatch メトリクスに変換することで、ログデータをグラフ化またはアラームを設定することもできます。