Help us learn about your current experience with the documentation. Take the survey.

阅读 GraphQL 日志

我们使用 Kibana 来过滤 GraphQL 查询日志。使用 @gitlab.com 邮箱地址登录 Kibana

在 Kibana 中,我们可以查看两种类型的 GraphQL 日志:

  • 请求中执行的每个 GraphQL 查询的日志。
  • 完整请求的日志,由于 query multiplexing,可能执行了多个查询。

每个 GraphQL 查询的日志

multiplex query 中,每个单独的查询都会被单独记录。我们可以使用子组件过滤来检查这些日志。使用此过滤器访问 Kibana 或按照以下步骤设置子组件过滤器:

  1. 添加过滤器:
    1. 过滤器:json.subcomponent
    2. 操作符:is
    3. 值:graphql_json
  2. 选择 刷新

您可以从侧边栏的 可用字段 部分选择 Kibana 字段来添加到日志表格中,或者 访问此视图,该视图已经选择了一组 Kibana 字段。一些相关的 Kibana 字段包括:

Kibana 字段 描述
json.operation_name 客户端使用的 operation name
json.operation_fingerprint 查询的 fingerprint,用于识别随时间重复的查询。
json.meta.caller_id 对于来自 GitLab 前端的查询,显示为 graphql:<operation_name>,否则显示为 graphql:unknown。可用于识别内部和外部查询。
json.query_string 查询字符串本身。
json.is_mutation 当是 mutation 时为 true,否则为 false
json.query_analysis.used_fields 查询选择的 GraphQL 字段列表。
json.query_analysis.used_deprecated_fields 查询选择的已弃用 GraphQL 字段列表。
json.query_analysis.used_deprecated_arguments 查询选择的已弃用 GraphQL 参数列表。
json.query_analysis.duration_s 查询执行持续时间(秒)。
json.query_analysis.complexity 查询的 complexity 分数。

有用的过滤器

以下是一些常见的 Kibana 过滤器示例。

查看字段使用情况

查看过滤器示例

  1. 子组件过滤器 与以下 Kibana 过滤器结合:
    1. 过滤器:json.query_analysis.used_fields
    2. 操作符:is
    3. 值:Type.myField,其中 Type.myField 是类型名称和字段名称,如 我们的 GraphQL API 资源文档 中所示。
  2. 选择 刷新

查看已弃用字段使用情况

查看过滤器示例

  1. 子组件过滤器 与以下 Kibana 过滤器结合:
    1. 过滤器:json.query_analysis.used_deprecated_fields
    2. 操作符:is
    3. 值:Type.myField,其中 Type.myField 是类型名称和字段名称,如 我们的 GraphQL API 资源文档 中所示。
  2. 选择 刷新

查看不是由我们的前端发出的查询

查看示例过滤器

上文 所述,对于来自 GitLab 前端的查询,json.meta.caller_id 显示为 graphql:<operation_name>,否则显示为 graphql:unknown。此过滤器可用于识别内部和外部查询。

  1. 子组件过滤器 与以下 Kibana 过滤器结合:
    1. 过滤器:json.meta.caller_id
    2. 操作符:is
    3. 值:graphql:unknown
  2. 选择 刷新

完整请求的日志

完整请求日志包含请求中所有 multiplexed queries 的日志数据,以及 GraphQLController#execute 之外的时间数据。

要查看完整请求日志,请 不要 应用 json.subcomponent 过滤器,而是:

  1. 添加过滤器:
    1. 过滤器:json.meta.caller_id
    2. 操作符:is
    3. 值:GraphqlController#execute
  2. 选择 刷新

与上述 查询日志 的一些区别:

  • 上述 提到的 Kibana 字段 中的一些在完整请求日志中不可用。
  • 过滤器的名称不同。例如,您选择 json.graphql.used_fields 而不是 json.query_analysis.used_fields