はじめに
Instana Observability Advent Calendar 2023 の7日目ですね!
Instanaには素敵なGUIが備わっていますが、時にはデータを取ってきて手元でゴニョゴニョしたい…なんてことありますよね。
なので、今日はREST APIを叩いてInstanaバックエンドからデータを取得してみようと思います!
下記ドキュメント(執筆時点で最新のv263)を参照しています。
必要に応じて最新のバージョンを参照してお試しください。
ちなみに、Instana リンク集なるページを定期的に更新しております。
今回のアドベントカレンダー後により充実したまとめページへ更新するのでぜひご覧ください!
APIを叩くための準備
まずはInstanaのコンソール画面でAPIトークンを作成しましょう。
ホーム画面から[設定] > [チーム設定] > [APIトークン] > [新規APIトークン]をクリックします。
新規APIトークンの作成画面が表示されたら、任意のトークン名を指定し、必要な権限を有効化します。
設定が完了したら画面下までスクロールし、保存をクリックします。
無事に作成できたら、作成したAPIトークンの名前で検索してみましょう。
権限の変更が必要な場合は、トークン名をクリックすることで編集画面を開くことができます。
また、削除する場合には右端のゴミ箱マークをクリックして削除することが可能です。
いざ、検証
こちらの画面に表示されている依存関係(Topology)をREST APIで取得してみましょう。
利用するエンドポイントはこちらです。
ターミナルで実行する際は、下記コマンドになります。
ご自身の環境に合わせてパラメータを置き換えて実行してください。
$ curl -H "Authorization: apiToken {APIトークン}" \
"https://{ホスト名}/api/application-monitoring/topology/services?applicationId={アプリケーションID}"
正しくリクエストを投げられると以下の様なレスポンスが取得できます。
{
"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のアプリケーションであると表示されており、
レスポンスでも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ライフを〜!