Reading GraphQL logs

We use Kibana to filter GraphQL query logs. Sign in to Kibana with a @gitlab.com email address.

In Kibana we can inspect two kinds of GraphQL logs:

  • Logs of each GraphQL query executed within the request.
  • Logs of the full request, which due to query multiplexing may have executed multiple queries.

Logs of each GraphQL query

In a multiplex query, each individual query is logged separately. We can use subcomponent filtering to inspect these logs. Visit Kibana with this filter enabled or set up the subcomponent filter using these steps:

  1. Add a filter:
    1. Filter: json.subcomponent
    2. Operator: is
    3. Value: graphql_json
  2. Select Refresh.

You can select Kibana fields from the Available fields section of the sidebar to add columns to the log table, or visit this view, which already has a set of Kibana fields selected. Some relevant Kibana fields include:

Kibana fieldDescription
json.operation_nameThe operation name used by the client.
json.operation_fingerprintThe fingerprint of the query, used to recognize repeated queries over time.
json.meta.caller_idAppears as graphql:<operation_name> for queries that came from the GitLab frontend, otherwise as graphql:unknown. Can be used to identify internal versus external queries.
json.query_stringThe query string itself.
json.is_mutation true when a mutation, false when not.
json.query_analysis.used_fieldsList of GraphQL fields selected by the query.
json.query_analysis.used_deprecated_fieldsList of deprecated GraphQL fields selected by the query.
json.query_analysis.duration_sDuration of query execution in seconds.
json.query_analysis.complexityThe complexity score of the query.

Useful filters

Combine the subcomponent filter with the following Kibana filters to further interrogate the query logs.

Queries that used a particular field

Filter logs by queries that used a particular field:

  1. Add a filter:
    1. Filter: json.query_analysis.used_fields
    2. Operator: is
    3. Value: Type.myField, where Type.myField is the type name and field name as it appears in our GraphQL API resources documentation.
  2. Select Refresh.

Queries that used a deprecated field

Filter logs of queries that used a particular deprecated field by following the steps above but use the json.graphql.used_deprecated_fields filter instead.

Logs of the full request

The full request logs encompass log data for all multiplexed queries in the request, as well as data from time spent outside of GraphQLController#execute.

To see the full request logs, do not apply the json.subcomponent filter, and instead:

  1. Add a filter:
    1. Filter: json.meta.caller_id
    2. Operator: is
    3. Value: GraphqlController#execute
  2. Select Refresh.

Some differences from the query logs described above:

  • Some of the Kibana fields mentioned above are not available to the full request logs.
  • The names of filters differ. For example, instead of json.query_analysis.used_fields you select json.graphql.used_fields.