LoginSignup
11
0

InstanaバックエンドのREST API叩いてみた

Last updated at Posted at 2023-12-07

はじめに

Instana Observability Advent Calendar 2023 の7日目ですね!

Instanaには素敵なGUIが備わっていますが、時にはデータを取ってきて手元でゴニョゴニョしたい…なんてことありますよね。
なので、今日はREST APIを叩いてInstanaバックエンドからデータを取得してみようと思います!

下記ドキュメント(執筆時点で最新のv263)を参照しています。
必要に応じて最新のバージョンを参照してお試しください。

ちなみに、Instana リンク集なるページを定期的に更新しております。
今回のアドベントカレンダー後により充実したまとめページへ更新するのでぜひご覧ください!

APIを叩くための準備

まずはInstanaのコンソール画面でAPIトークンを作成しましょう。

ホーム画面から[設定] > [チーム設定] > [APIトークン] > [新規APIトークン]をクリックします。
image.png

新規APIトークンの作成画面が表示されたら、任意のトークン名を指定し、必要な権限を有効化します。
設定が完了したら画面下までスクロールし、保存をクリックします。
image.png

無事に作成できたら、作成したAPIトークンの名前で検索してみましょう。
image.png

権限の変更が必要な場合は、トークン名をクリックすることで編集画面を開くことができます。
また、削除する場合には右端のゴミ箱マークをクリックして削除することが可能です。

いざ、検証

こちらの画面に表示されている依存関係(Topology)をREST APIで取得してみましょう。
image.png

利用するエンドポイントはこちらです。

ターミナルで実行する際は、下記コマンドになります。
ご自身の環境に合わせてパラメータを置き換えて実行してください。

$ curl -H "Authorization: apiToken {APIトークン}" \
  "https://{ホスト名}/api/application-monitoring/topology/services?applicationId={アプリケーションID}"
パラメータ 設定値
{APIトークン} 先ほど作成したAPIトークン
トークンは初期表示はマスキングされているため、目のアイコンをクリックしてトークンを表示します。
image.png
{ホスト名} 利用環境のホスト名
{アプリケーションID} 今回はサクッと試したかったため、ブラウザのURLバーから取得しています。
例)Instanaで任意のアプリケーションの画面を開き、https://~~/#/application/appId=XXX/~~からXXXの部分を取得
image.png

正しくリクエストを投げられると以下の様なレスポンスが取得できます。

{
	"services": [
		{
			"id": "12dea96fec20593566ab75692c9949596833adc9",
			"label": "user",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"nodeJsRuntimePlatform"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "e86256b2787ee7ff0c33d0d4c6159cd922227b79",
			"label": "payment",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"pythonRuntimePlatform"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "4d4ca94400bf5ca2eda49612213361a4e17cd28d",
			"label": "shipping service",
			"types": [
				"HTTP"
			],
			"technologies": [
				"jvmRuntimePlatform",
				"kubernetesService",
				"springbootApplicationContainer"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "7bb083edad4751b79c6b2a9a76f28d0181ae8973",
			"label": "ratings",
			"types": [
				"HTTP"
			],
			"technologies": [
				"phpRuntimePlatform",
				"kubernetesService",
				"httpd"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "8bfb4e1aa590eab8f08f837b97acf5803a5737ed",
			"label": "cart",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"nodeJsRuntimePlatform"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "ce4b152bac7b99744d8314838e49b799afd6dd96",
			"label": "nginx-web",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"nginx"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
		{
			"id": "1b946f915590dec37acb127a573c8cdd9ea99697",
			"label": "catalogue",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"nodeJsRuntimePlatform"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		}
	],
	"connections": []
}

Robotshop1 Testを構成するコンポーネントたちの詳細が取得できていることが確認できますね。

例えば、UI上Warningが発生している(黄色の丸)paymentは、Pythonのアプリケーションであると表示されており、
image.png

レスポンスでもPythonのアプリケーション(technologies: pythonRuntimePlatform)であることが確認できます。

{
	"services": [
        (省略)
		{
			"id": "e86256b2787ee7ff0c33d0d4c6159cd922227b79",
			"label": "payment",
			"types": [
				"HTTP"
			],
			"technologies": [
				"kubernetesService",
				"pythonRuntimePlatform"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		},
        (省略)
	],
    (省略)
}

connectionsではどのコンポーネントが依存関係にあるかのデータやその依存関係間のコール数、レイテンシー、エラー率などが含まれているのですが、今回検証に使用したアプリケーションでは空欄になっているため、サンプルを記載しておきます↓

サンプル
{
	"connections": [
		{
			"from": "8bfb4e1aa590eab8f08f837b97acf5803a5737ed",
			"to": "f17e7efb3b9b2d62bfec6b07905759fb81e99797",
			"calls": 2179,
			"latency": 1.6103717301514455,
			"errorRate": 0
		}
	],
	"services": [
		{
			"id": "f17e7efb3b9b2d62bfec6b07905759fb81e99797",
			"label": "robot-shop",
			"types": [
				"MESSAGING"
			],
			"technologies": [
				"kubernetesService",
				"rabbitMq"
			],
			"snapshotIds": [],
			"entityType": "SERVICE"
		}
	]
}

まとめ

InstanaバックエンドのREST APIを叩いてみた は以上となります。

必要な事前準備は APIトークンの作成 のみとなります。

他にも色々なAPIがありますので、試してみていただけると幸いです。

どんなエンドポイントがあるかはInstana API docsから確認が可能です

それでは、良いInstanaライフを〜!

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0