第 2 章 graphql API
GraphQL API 端点 /api/v3/graphql 会自动针对目标 JVM 运行更短且简单的查询。这些查询可以针对目标 JVM 的活动和存档记录运行。另外,API 可以根据常规 Cryostat 归档运行查询。您可以自定义查询来自动以下任务进行活跃或归档的记录:
您可以自定义查询来自动以下任务进行活跃或归档的记录:
- archive
- 删除
- Start
- Stop
在创建自定义查询时,您必须在查询中指定 GraphQL API 端点的特定信息。然后,POST 请求可以处理信息并将信息发送到 Cryostat。以下示例指定了 Graph QL API 的信息:
GraphQL API 比 HTTP REST API 更强大,其工作负载功能有限。例如,HTTP REST API 需要您为每个副本创建一个 API 请求,您想要在 OpenShift 上的容器内启动每个扩展的副本。GraphQL API 可以在一个 API 请求中实现此任务,这会提高 API 的性能并减少 Cryostat 实例的任何网络流量。
HTTP REST API 的另一个有限工作负载功能是,此 API 需要更多的用户干预,例如,在对响应数据执行迭代操作时,您需要编写自定义客户端来解析 API JSON 响应。GraphQL API 不需要您完成此操作。
2.1. 使用 GraphQL API 创建自定义查询 复制链接链接已复制到粘贴板!
您可以使用 HTTPie 等 HTTP 客户端与 GraphQL API 交互来生成自定义查询。
当使用 API 创建查询时,您必须为数据类型和字段指定特定值,以便功能可以使用这些值来准确定位您需要的数据。
考虑一个用例,您可以在其中自动执行在单个查询中执行多个操作的工作流。例如,HTTPie 客户端请求可将查询发送到 Cryostat,以便 Cryostat 可以执行以下任务:
- 对所有目标 JVM 应用进行快照记录。
- 将每个应用程序中的记录信息复制到 Cryostat 归档中。
- 创建自动规则,为任何检测到的目标 JVM 应用自动启动持续监控记录。
存在很多查询可能性,因此请确保准确确定查询的数据类型和字段的值。否则,您可能会得到与您的要求不匹配的查询结果。
以下示例演示了如何使用 HTTP 客户端与 GraphQL API 交互,以在 Cryostat 数据上生成简单的查询和复杂的查询。
确定与 Cryostat 实例交互的所有已知目标 JVM 的简单查询示例
前面的示例为 targetNodes 元素设置特定的值,如 name。运行查询后,查询会返回与指定条件匹配的任何目标 JVM 列表。
确定属于特定 pod 的 Cryostat 实例可见的所有目标应用程序的复杂查询示例
前面的示例为 environmentNodes 元素设置以下特定值,示例不会返回 JVM 目标应用程序:
-
<application_pod_name> : 确保查询以特定 pod 为目标,该 pod 在与 Cryostat 相同的命名空间中运行。 -
descendantTargets:提供 JVM 目标对象的数组。 -
doStartRecording: GraphQL API 为查询列表的每个目标 JVM 启动 JFR 记录。
运行查询后,查询会返回您启动的 JFR 记录的信息,如活动应用程序节点列表。
对于 Red Hat OpenShift,这个查询会返回 Deployment 和 DeploymentConfig API 对象,以及与 Cryostat 交互的 pod。
复杂的查询演示了 GraphQL API 如何执行单个 API 请求,该请求返回任何与 Cryostat 和 Red Hat OpenShift 交互的 JVM 对象。然后,API 请求会为那些返回的对象启动 JFR 记录。