GraphQL ログの読み取り
Kibana を使用して、GraphQL クエリ ログをフィルタリングします。@gitlab.com のメールアドレスでKibana にサインインします。
Kibana では、2 種類の GraphQL ログを検査できます:
- リクエスト内で実行された各 GraphQL クエリのログ。
- クエリの多重化により複数のクエリが実行された可能性のある、リクエスト全体のログ。
各GraphQLクエリのログ
多重クエリでは、個々のクエリが個別にログに記録されます。これらのログを検査するには、サブコンポーネント フィルターを使用します。このフィルターを有効にした状態で Kibana にアクセスするか、以下の手順でサブコンポーネント フィルターを設定します:
- フィルタを追加します:
- フィルターjson.subcomponent
- オペレーションis
- 値:graphql_json
 
- フィルター
- Refresh を選択します。
サイドバーの「利用可能なフィールド」セクションから Kibana フィールドを選択してログテーブルに列を追加するか、すでに Kibana フィールドのセットが選択されているこのビューにアクセスできます。関連する Kibana フィールドには以下のものがあります:
| Kibana フィールド | 説明 | 
|---|---|
| json.operation_name | クライアントが使用するオペレーション名。 | 
| json.operation_fingerprint | クエリのフィンガープリントで、長期間にわたって繰り返されるクエリを認識するために使用されます。 | 
| json.meta.caller_id | GitLabフロントエンドからのクエリの場合は 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 フィルターと組み合わせると、クエリログをさらに詳しく調べることができます。
特定のフィールドを使用したクエリ
特定のフィールドを使用したクエリでログをフィルタリングします:
- フィルタを追加します:
- フィルターjson.query_analysis.used_fields
- オペレーションis
- 値:Type.myFieldここでType.myField、タイプ名とフィールド名は、GraphQL APIリソースのドキュメントに記載されているものです。
 
- フィルター
- Refresh を選択します。
非推奨フィールドを使用したクエリ
上記の手順で、特定の非推奨フィールドを使用したクエリのログをフィルタリングしますが、代わりにjson.graphql.used_deprecated_fields フィルタを使用します。
リクエスト全体のログ
フルリクエストログは、リクエスト内のすべての多重化されたクエリのログデータと、GraphQLController#execute 以外の時間のデータを含みます。
完全なリクエストログを見るには、json.subcomponent フィルタを適用しないでください:
- フィルタを追加します:
- フィルターjson.meta.caller_id
- オペレーションis
- 値:GraphqlController#execute
 
- フィルター
- Refresh を選択します。
上記のクエリログと異なる点があります:
- 上記のKibana フィールドの一部は、完全なリクエストログでは利用できません。
- フィルターの名前は異なります。たとえば、json.query_analysis.used_fieldsの代わりにjson.graphql.used_fieldsを選択します。
