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 或按照以下步骤设置子组件过滤器:
- 添加过滤器:
- 过滤器:
json.subcomponent - 操作符:
is - 值:
graphql_json
- 过滤器:
- 选择 刷新。
您可以从侧边栏的 可用字段 部分选择 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 过滤器示例。
查看字段使用情况
- 将 子组件过滤器 与以下 Kibana 过滤器结合:
- 过滤器:
json.query_analysis.used_fields - 操作符:
is - 值:
Type.myField,其中Type.myField是类型名称和字段名称,如 我们的 GraphQL API 资源文档 中所示。
- 过滤器:
- 选择 刷新。
查看已弃用字段使用情况
- 将 子组件过滤器 与以下 Kibana 过滤器结合:
- 过滤器:
json.query_analysis.used_deprecated_fields - 操作符:
is - 值:
Type.myField,其中Type.myField是类型名称和字段名称,如 我们的 GraphQL API 资源文档 中所示。
- 过滤器:
- 选择 刷新。
查看不是由我们的前端发出的查询
如 上文 所述,对于来自 GitLab 前端的查询,json.meta.caller_id 显示为 graphql:<operation_name>,否则显示为 graphql:unknown。此过滤器可用于识别内部和外部查询。
- 将 子组件过滤器 与以下 Kibana 过滤器结合:
- 过滤器:
json.meta.caller_id - 操作符:
is - 值:
graphql:unknown
- 过滤器:
- 选择 刷新。
完整请求的日志
完整请求日志包含请求中所有 multiplexed queries 的日志数据,以及 GraphQLController#execute 之外的时间数据。
要查看完整请求日志,请 不要 应用 json.subcomponent 过滤器,而是:
- 添加过滤器:
- 过滤器:
json.meta.caller_id - 操作符:
is - 值:
GraphqlController#execute
- 过滤器:
- 选择 刷新。
与上述 查询日志 的一些区别:
- 上述 提到的 Kibana 字段 中的一些在完整请求日志中不可用。
- 过滤器的名称不同。例如,您选择
json.graphql.used_fields而不是json.query_analysis.used_fields。