検索

第2章 GraphQL API

download PDF

GraphQL API エンドポイントである /api/v2.2/graphql は、ターゲット JVM に対してより短くて単純なクエリーを自動的に実行します。これらのクエリーは、ターゲット JVM のアクティブおよびアーカイブされたレコーディングに対して実行することができます。さらに、API は一般的な Cryostat アーカイブに対してクエリーを実行できます。クエリーをカスタマイズして、アクティブまたはアーカイブされたレコーディングの以下のタスクを自動化できます。

クエリーをカスタマイズして、アクティブまたはアーカイブされたレコーディングの以下のタスクを自動化できます。

  • アーカイブ
  • 削除
  • 起動
  • 停止

カスタムクエリーを作成する場合、クエリーに 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 は、1 つの API 要求でこのタスクを実現できます。これにより、API のパフォーマンスが向上し、Cryostat インスタンスのネットワークトラフィックを削減できます。

HTTP REST API のもうひとつの制限されたワークロード機能として、この API は、応答データに対して反復的なアクションを実行する際に API JSON 応答を解析するカスタムクライアントを書く必要があるなど、ユーザーの介入をより必要とすることが挙げられます。GraphQL API では、この操作を完了する必要はありません。

関連情報

GraphQL の概要 (GraphQL) を参照してください。

2.1. GraphQL API を使用したカスタムクエリーの作成

HTTPie などの HTTP クライアントを使用して GraphQL API と対話し、カスタムクエリーを生成することができます。

API を使ってクエリーを作成する場合、データ型やフィールドに特定の値を指定し、関数がこれらの値を使用して必要なデータを正確に検索できるようにする必要があります。

1 つのクエリーで複数の操作を実行するワークフローを自動化できるユースケースを考えてみましょう。たとえば、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 要素に name などの特定の値を設定しています。クエリーを実行すると、クエリーは、指定された基準に一致するターゲット 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 と同じ namespace で動作する特定の Pod をターゲットにしていることを確認します。
  • descendantTargets: JVM ターゲットオブジェクトの配列を提供します。
  • doStartRecording: GraphQL API は、クエリーがリストする各ターゲット JVM に対して JFR 記録を開始します。

クエリーを実行すると、クエリーは、アクティブなアプリケーションノードのリストなど、開始した JFR 記録に関する情報を返します。

Red Hat OpenShift の場合、このクエリーは DeploymentDeploymentConfig の API オブジェクト、および Cryostat と対話する Pod を返します。

この複雑なクエリーは、GraphQL API が、Cryostat および Red Hat OpenShift と対話する任意の JVM オブジェクトを返す単一の API リクエストを実行する方法を示しています。続いて、API リクエストは、それらの返されたオブジェクトの JFR 記録を開始します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.