GraphQL ログの読み取り

Kibana を使用して、GraphQL クエリ ログをフィルタリングします。@gitlab.com のメールアドレスでKibana にサインインします。

Kibana では、2 種類の GraphQL ログを検査できます:

  • リクエスト内で実行された各 GraphQL クエリのログ。
  • クエリの多重化により複数のクエリが実行された可能性のある、リクエスト全体のログ。

各GraphQLクエリのログ

多重クエリでは、個々のクエリが個別にログに記録されます。これらのログを検査するには、サブコンポーネント フィルターを使用します。このフィルターを有効にした状態で Kibana にアクセスするか、以下の手順でサブコンポーネント フィルターを設定します:

  1. フィルタを追加します:
    1. フィルターjson.subcomponent
    2. オペレーションis
    3. 値:graphql_json
  2. Refresh を選択します。

サイドバーの「利用可能なフィールド」セクションから Kibana フィールドを選択してログテーブルに列を追加するか、すでに Kibana フィールドのセットが選択されているこのビューにアクセスできます。関連する Kibana フィールドには以下のものがあります:

Kibana フィールド説明
json.operation_nameクライアントが使用するオペレーション名
json.operation_fingerprintクエリのフィンガープリントで、長期間にわたって繰り返されるクエリを認識するために使用されます。
json.meta.caller_idGitLabフロントエンドからのクエリの場合はgraphql:<operation_name> 、そうでない場合はgraphql:unknown 。内部クエリと外部クエリを識別するために使用できます。
json.query_stringクエリ文字列そのもの。
json.is_mutation true が変異の場合は、false
json.query_analysis.used_fieldsクエリによって選択された GraphQL フィールドのリスト。
json.query_analysis.used_deprecated_fieldsクエリによって選択された非推奨の GraphQL フィールドのリスト。
json.query_analysis.duration_sクエリの実行時間(秒)。
json.query_analysis.complexityクエリの複雑さのスコア。

便利なフィルタ

サブコンポーネントフィルターを以下の Kibana フィルターと組み合わせると、クエリログをさらに詳しく調べることができます。

特定のフィールドを使用したクエリ

特定のフィールドを使用したクエリでログをフィルタリングします:

  1. フィルタを追加します:
    1. フィルターjson.query_analysis.used_fields
    2. オペレーションis
    3. 値:Type.myFieldここで Type.myField、タイプ名とフィールド名は、GraphQL APIリソースのドキュメントに記載されているものです。
  2. Refresh を選択します。

非推奨フィールドを使用したクエリ

上記の手順で、特定の非推奨フィールドを使用したクエリのログをフィルタリングしますが、代わりにjson.graphql.used_deprecated_fields フィルタを使用します。

リクエスト全体のログ

フルリクエストログは、リクエスト内のすべての多重化されたクエリのログデータと、GraphQLController#execute 以外の時間のデータを含みます。

完全なリクエストログを見るには、json.subcomponent フィルタを適用しないでください:

  1. フィルタを追加します:
    1. フィルターjson.meta.caller_id
    2. オペレーションis
    3. 値:GraphqlController#execute
  2. Refresh を選択します。

上記のクエリログと異なる点があります:

  • 上記のKibana フィールドの一部は、完全なリクエストログでは利用できません。
  • フィルターの名前は異なります。たとえば、json.query_analysis.used_fields の代わりにjson.graphql.used_fields を選択します。