CloudWatch TraceでSamplingされないAppSyncのクエリがある

0

以下の内容について教えていただきたいです。

構成

  • Amplify Gen1を利用
  • BackendにはAppSync(GraphQL)を利用
  • DBはDynamoDBになっています

背景

現在レイテンシが高くなっているAppSyncのエンドポイントを調査しており、その過程であるクエリが遅くなっていることがわかりました。

そこでそのTraceを取ろうとAppSyncの設定でTraceをONにしたのですが、クエリによってTraceに現れるものと現れないものがありました。

自動生成されたクエリですが単純なGet〇〇系のは問題ないのですが、GSIを使った以下の感じのクエリがlimitを120以上とかにすると表示されませんでした。

query TodosByUserId(
    $userId: ID!
    $limit: Int
    $filter: ModelTodoFilterInput
    $nextToken: String
    $sortDirection: ModelSortDirection
  ) {
    todosByUserId(
      userId: $userId
      filter: $filter
      limit: $limit ## ここを150とかにするとsamplingされず表示されない
      nextToken: $nextToken
      sortDirection: $sortDirection
    ) {
      items {
        id
        ...other fields...
        user {
          name
        }
      }
      nextToken
    }
  }

お聞きしたいこと

  • 上記のように取得できない原因と解決方法
    • 今回はlimit3000などで遅くなっているクエリのTraceを取得したいので、limitを上げた状態での取得方法をお聞きしたいです
    • Traceのセグメント数が増えた時にsamplingされていない気がしています
    • https://docs.aws.amazon.com/appsync/latest/devguide/x-ray-tracing.html は試したのですが Service typeAWS::AppSync::GraphQLAPI を設定できませんでした

よろしくお願いいたします。

1回答
0

AppSyncのX-Ray tracingで一部のクエリがサンプリングされない問題について、以下の点が考えられます:

  1. データ量の制限: X-Rayには、セグメントやサブセグメントのデータ量に制限があります。大量のデータを返すクエリ(例:limit 120以上)は、この制限を超える可能性があり、サンプリングされない場合があります。

  2. サンプリングルール: デフォルトのサンプリングルールでは、すべてのリクエストがトレースされるわけではありません。トラフィックが多い場合、一部のリクエストがサンプリングから除外される可能性があります。

  3. パフォーマンスの問題: 大量のデータを取得するクエリは、実行に時間がかかる可能性があります。タイムアウトなどの問題でトレースが完了しない可能性があります。

解決策として以下のアプローチが考えられます:

  1. クエリの最適化: limitを小さくするか、ページネーションを実装して、一度に取得するデータ量を減らします。

  2. カスタムサンプリングルールの作成: X-Ray コンソールでカスタムサンプリングルールを作成し、特定のクエリやエンドポイントに対してサンプリングレートを上げることができます。

  3. フィルタリングの改善: クライアント側でのフィルタリングを検討し、サーバーサイドでの処理を軽減します。

  4. パフォーマンスモニタリング: CloudWatch LogsやAppSyncのメトリクスを活用して、問題のあるクエリを特定し、最適化します。

  5. インデックスの最適化: GSIの設計を見直し、必要に応じて最適化します。

これらの対策を組み合わせることで、トレースの可視性を向上させ、パフォーマンスの問題を特定・解決しやすくなるでしょう。
Sources
Text Processing in Amazon CloudSearch - Amazon CloudSearch

profile picture
回答済み 15日前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ