搜索

第 2 章 GraphQL API

download PDF

GraphQL API 端点 /api/v2.2/graphql 将自动针对目标 JVM 运行更短且更简单的查询。这些查询可以针对目标 JVM 的活跃记录和存档记录运行。另外,API 可以针对常规 Cryostat 归档运行查询。您可以自定义查询,为活跃记录或归档记录自动执行以下任务:

您可以自定义查询,为活跃记录或归档记录自动执行以下任务:

  • 归档
  • 删除
  • Start
  • stop

在创建自定义查询时,您必须在查询中为 GraphQL API 端点指定特定信息。POST 请求然后可以处理信息并将信息发送到 Cryostat。以下示例指定 Graph QL API 的信息:

POST /api/beta/graphql HTTP/1.1
Accept: application/json, /;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 171
Content-Type: application/json
Host: localhost:8181
User-Agent: HTTPie/3.1.0

GraphQL API 比 HTTP REST API 强大,具有有限的工作负载功能。例如,HTTP REST API 要求您为每个您要在 OpenShift 中的容器内的扩展副本上启动的记录副本创建一个 API 请求。GraphQL API 在一个 API 请求中实现此任务,这提高了 API 的性能,并减少 Cryostat 实例的任何网络流量。

HTTP REST API 的另一个有限工作负载功能是,此 API 需要更多的用户干预,例如,您需要编写自定义客户端以在对响应数据执行迭代操作时解析 API JSON 响应。GraphQL API 不要求您完成此操作。

其他资源

请参阅 GraphQL 简介 (GraphQL)

2.1. 使用 GraphQL API 创建自定义查询创建

您可以使用 HTTP 客户端(如 HTTPie )与 GraphQL API 交互来生成自定义查询。

当使用 API 创建查询时,您必须为数据类型和字段指定特定值,以便函数可以使用这些值来准确定位所需数据。

考虑一个用例,您可以在其中自动执行在单个查询中执行多个操作的工作流。例如,HTTPie 客户端请求可能会向 Cryostat 发送查询,以便 Cryostat 可以执行以下任务:

  1. 记录所有目标 JVM 应用。
  2. 将每个应用程序中的记录信息复制到 Cryostat 归档中。
  3. 创建一个自动规则,针对任何检测到的目标 JVM 应用自动启动持续监控记录。
注意

有很多查询可能性,因此请确保准确确定查询的数据类型和字段的值。否则,您可能会获得与要求不匹配的查询结果。

以下示例演示了使用 HTTP 客户端与 GraphQL API 交互,以在 Cryostat 数据上生成简单查询和复杂的查询。

确定与 Cryostat 实例交互的所有已知目标 JVM 的简单查询

$ https :8181/api/v1/targets
HTTP/1.1 200 OK
content-encoding: gzip
content-length: 223
content-type: application/json

 {
	targetNodes {
    		name
    		nodeType
    		labels
    		target {
        		alias
        		serviceUri
    		}
	}
}

上例为 targetNodes 元素设置特定的值,如名称。运行查询后,查询会返回与指定条件匹配的任何目标 JVM 列表。

确定属于特定 pod 的 Cryostat 实例可见的所有目标应用程序的复杂查询示例

$ https -v :8181/api/v2.2/graphql query=@graphql/target-nodes-query.graphql
POST /api/v2.2/graphql HTTP/1.1
Accept: application/json, /;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 171
Content-Type: application/json
Host: localhost:8181
User-Agent: HTTPie/2.6.0

 {
environmentNodes(filter: { name: "<application_pod_name>" }) {
    		descendantTargets {
        		doStartRecording(recording: {
            		name: "myrecording",
            	template: "Profiling",
            	templateType: "TARGET",
     		       	duration: 30
          	 	}) {
          			name
          			state
        		}
    		}
	}
}

上例为 environmentNodes 元素设置以下特定值,示例不会返回 JVM 目标应用:

  • <application_pod_name > :确保查询以与 Cryostat 相同的命名空间中运行的特定 pod 为目标。
  • descendantTargets: 提供 JVM 目标对象数组。
  • doStartRecording: GraphQL API 为查询列表的每个目标 JVM 启动 JFR 记录。

运行查询后,查询会返回有关您启动的 JFR 记录的信息,如活跃应用程序节点列表。

对于 Red Hat OpenShift,此查询会返回 DeploymentDeploymentConfig API 对象,以及与 Cryostat 交互的 pod。

复杂的查询演示了 GraphQL API 如何执行单个 API 请求,该请求返回与 Cryostat 和 Red Hat OpenShift 交互的任何 JVM 对象。然后,API 请求会在这些返回的对象上启动 JFR 记录。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.