はじめに
ARMとAPMの違いとは?について、改めて人に説明できるまでの理解がなかったため整理しなおしました。
この記事では、IBM の監視・管理ツールである Instana(APM) と Turbonomic(ARM) を取り上げ、
それぞれが「何をするツールなのか」「どの層を見ているのか」を整理します。
この記事を読むとわかること
- APM と ARM それぞれの意味と役割
- 2つのツールがシステムのどの層を担当しているか
- InstanaとTurbonomicは競合ではなく「補完関係」であること
APM(Application Performance Monitoring)とは
APM は、
アプリケーションの内部で何が起きているかをリアルタイムに収集・可視化します。
具体的には以下のようなデータを扱います。
- 分散トレース:1つのリクエストがどのサービスを通ったか、どこで時間がかかったかの経路記録
- メトリクス:レイテンシ(応答時間)・エラー率・スループット(処理件数)
- ログ:エラーメッセージやイベントの記録
- スタックトレース:コードのどの行で例外が発生したか
収集したデータをもとに、「なぜアプリが遅いのか・壊れているのか」を診断することが主な目的です。
IBM の APM 製品が Instana です。エージェントをインストールするだけで、アプリのフレームワークやライブラリを自動検出して計装(データ収集の仕込み)を行います。
一言でいうと:APM(Instana)は「アプリの内部で今何が起きているかを見える化し、問題の原因を突き止めるツール」です。
ARM(Application Resource Management)とは
ARM は、
アプリケーションが動くために必要なリソース(CPU・メモリ・ネットワーク・ストレージ)が適切に割り当てられているかを継続的に分析し、最適な配置を自動で維持します。
具体的には以下を行います。
- リソース使用量の継続収集:コンテナ・仮想マシン・物理ホストの CPU・メモリ使用率を常時監視
- アクションの推奨・自動実行:「このコンテナのメモリ上限を増やすべき」「このVMを別のホストに移動すべき」といった具体的な変更を提案または自動実行
- クラウドコスト最適化:使いすぎ・無駄なリソースを検出してコスト削減を支援
「何をどこで動かすべきか」をシステム全体の視点で最適化することが主な目的です。
IBM の ARM 製品が Turbonomic です。Kubernetes・仮想マシン・パブリッククラウドなど複数のレイヤーを横断してリソースを管理します。
一言でいうと:ARM(Turbonomic)は「アプリが動く前提として必要な、基盤のコンピューティングリソース(CPU・メモリ・ストレージなど)を過不足なく自動的に最適配置するツール」です。
比較表
| 観点 | Instana(APM) | Turbonomic(ARM) |
|---|---|---|
| 目的 | アプリの問題を発見・診断する | リソースを最適に配置・自動調整する |
| 答えてくれる問い | 「なぜ遅い?どこが壊れている?」 | 「何をどこで動かすべきか?」 |
| 主なユーザー | アプリ開発者・SREチーム | インフラ担当・プラットフォームチーム |
| クラウドコスト管理 | × 対象外 | ○ インスタンス最適化・コスト削減を支援 |
| コード内部の可視性 | ○ スタックトレース・SQLクエリまで見える | × コード内部は見ない |
| 使うタイミング | インシデント対応・デバッグ時 | 常時(予防的・継続的に動き続ける) |
具体的な例
より具体的に理解するために、「ECサイトのカート機能が突然重くなった」というシナリオで考えてみます。
Instana(APM)の動き
ユーザーからの「カートが重い」という報告を受けたエンジニアがInstanaのダッシュボードを開くと、分散トレースによりカートサービス → 在庫APIの呼び出しでレイテンシが急増していることが一目でわかりました。さらにドリルダウン(問題箇所をクリックして原因を深掘り)すると、在庫APIが実行しているSQLクエリのうち特定のクエリが遅いことまで判明します。
また、Instanaはアプリケーションだけでなく関連するコンテナやインフラの状態もあわせて可視化できるため、在庫APIが動作しているPodでCPU使用率が高騰していることや、CPUスロットリングが発生していることも確認できます。
Instanaが教えてくれること:
- 「在庫APIの特定クエリが遅い」という原因
- 「CPUスロットリングが発生している」という状況
- 「どこで問題が起きているか」という根本原因
- 「アプリとインフラのどちらに問題があるか」という切り分け
Turbonomic(ARM)の動き
同じタイミングで、Turbonomicは在庫APIが動いているコンテナ(Pod)のCPU使用率が上限に張り付き、CPUスロットリングが発生していることを検知しています。
Turbonomicはその状態を分析し、「PodのCPU Request/Limitを引き上げるべき」「Nodeをスケールアウトすべき」といった具体的なアクションを判断します。設定によっては、それらを承認なしで自動実行することも可能です。
Turbonomicが教えてくれること:
- 「リソース不足が発生している」という事実
- 「何を変更すればよいか」という具体的な対処方法
- 「自動で修正した結果どうなるか」のパフォーマンス変化の予想
おわりに
- APM(Instana) はアプリの内部(コード・サービス・トレース)を監視し、パフォーマンス問題の原因を特定するツール
- ARM(Turbonomic) はインフラ全体のリソースを分析し、CPU・メモリ・配置を自動で最適化するツール
- 2つは役割が異なる補完関係であり、組み合わせることでアプリの可視性とリソース効率の両方を実現できる