クライアント・サーバー時代のアプリケーションであれば、システム構成要素はサーバーとクライアントだけ。アプリケーションのパフォーマンスが十分でなければ、どこにボトルネックがあるかは比較的簡単に把握できた。
それがいまやWebアプリケーションの時代、クライアントにはモバイルもある。さらにサーバーは仮想化され、利用形態としてはクラウドを使うのも当たり前だ。そうなると、アプリケーションのレスポンスが悪くなった場合に、どこに問題があるのかを把握するのはかなり面倒だ。アプリケーション性能が十分でなく、顧客がモバイルからアクセスしたらレスポンスが遅い。そうなれば、同様の他社サービスにすぐに乗り換えてしまうのがクラウド時代だ。
クラウド時代に必要となるアプリケーション・インテリジェンス、そのための製品を提供するのがAppDynamicsだ。同社創業者のCEO ジョディ・バンサル氏に、アプリケーション・インテリジェンスがなぜ必要になっているのか、そしてAppDynamicsの提供するアプリケーション・インテリジェンス・プラットフォームとはいったいどのようなものかについて話を聞いた。
アプリケーション指向での性能監視が重要に
Q:アプリケーション・インテリジェンスは、従来のシステムの運用監視とは何が違うのでしょう?
バンサル氏:ネットワーク、ストレージ、サーバーなどを保守、管理するプロフェッショナルな運用サービスは以前からありました。これらはシステムを運用監視するものですが、そこにアプリケーションの視点はありませんでした。これに対しアプリケーション・インテリジェンスは、アプリケーションのパフォーマンスを監視するものです。ここ最近になり注目を集めている領域でもあります。
実際、アプリケーション・インテリジェンスを提供するAppDynamicsのビジネスは急速に拡大しています。すでに世界に1,800社を越える顧客があり、その多くは大規模なソフトウェアを利用している企業です。MicrosoftやSalesforceなど、大手のソフトウェアサービスを提供するベンダーもAppDynamicsを利用しています。
Q:具体的には、システム運用監視とどんなところが異なるのですか?
バンサル氏:アプリケーション・インテリジェンスは、システム指向ではなくアプリケーション指向で監視するところが大きな違いです。たとえばiPhoneのようなスマートフォンで、画面をタップしモバイルアプリケーションを利用するとします。その際にはデータセンターにあるさまざまなシステム要素を経由し処理がなされ、答えがiPhoneに返ってきます。その一連の処理の過程を辿っていくのが、アプリケーション・インテリジェンスです。
モバイル端末側ではiOSやAndroidなどのモバイルOSが稼働しており、その上でモバイル用のブラウザが動く。さらにデータセンターやクラウドにあるサーバーサイドでは、Javaや.Net、PHPなどのアプリケーションが動くことになる。それぞれの要素での動きを細かに監視するのです。
現状のアプリケーションは、サービス指向で処理がどんどん分散化する傾向にあります。大きなアプリケーションになれば、ユーザーがクリックしログインして使う際に、影響を受けるサービスが20や30もあるのも当たり前です。このように関連するサービスがたくさんあるのが1つ目の問題です。たくさんあるサービスのどこにパフォーマンスを低下させる原因があるのか。何が問題かはシステム指向で見ていてもなかなか分かりません。
もう1つ問題になるのがクラウドの存在です。クラウドへ移行するようになり、サーバー、ネットワーク、ストレージを企業がうまくコントロールできなくなっているのです。さらに3つ目の問題が開発のアジャイル化です。アプリケーションの開発や改変のスピードがどんどん増しています。サービスが分散しさらにアジャイル開発になると、アプリケーションは変化も激しくインフラだけを見ていても何が起こっているのかを正確に見抜くことができないのです。
これらの課題に対し、AppDynamicsは複雑な環境で動くアプリケーションの状況を簡単に可視化することで解決します。エンド・ツー・エンドに可視化し、自動で「アプリケーションがノーマルではない振る舞いをしていること」を検知するのです。
エージェントでタグ付けした情報と機械学習技術を活用
Q:複雑化しているアプリケーションの稼働環境で、どうやっておかしな振る舞いを自動検知するのですか?
バンサル氏:アプリケーションの振る舞いを自動で検知するのは難しいです。複雑化している環境での検知はなおさらです。逆に言えば、それができるようになった初めての製品がAppDynamicsです。なので、市場で評価を得ていると。
キーとなっている技術は、本番環境にランタイムバイトコードをエージェントとしてインストールしアプリケーションを変更せずに動きを監視するところです。インストールしたバイトコードでプロトコルを検知し、アプリケーションのビジネストランザクションを見つけます。それによりログインするとかチェックアウトするとかのアプリケーションの動きを検知し、次のサービスにその情報をタグ付けして連携します。
ランタイムバイトコードはすべてのサービスにインストールします。次のサービスがコールされた場合には、トランザクションにタグを付けた情報を収集し渡します。これはサービスにインストールされたエージェント同士が、タグを使って会話するようなものです。同時にエージェントはダイナミック・コントローラとも通信し、タグ付けされた情報がそこにアプリケーションの状況を示すビッグデータとして集められます。
コントローラでは、機械学習の技術を使って「通常の振る舞い」を学びます。ユーザーが重たい処理をすると、処理が通常より遅くなると言ったアプリケーションの状況を学習するのです。学習した結果を使った振る舞いの検知は数分以内で実施し、結果がダッシュボードにリアルタイムに表示されます。ダッシュボードを見れば、トランザクションがどうなっているのかが分かり、問題があれば該当箇所が赤で表示されドリルダウンすることでさらに原因を追及できます。
Oracleのツールなら、Oracleのサイロな環境のシステム状況は把握できるでしょう。AppDynamicsは、各サービスでトランザクションにタグ付けして、それをエンド・ツー・エンドで受け渡すことで複雑な組み合わせのアプリケーションでも状況が把握できます。このエンド・ツー・エンドで受け渡すところが、重要なポイントでもあります。
Q:アプリケーションの振る舞いを学習するのには、手間がかかるのではないですか?
バンサル氏:極端な話をすれば数分のデータ、1回のログイン処理だけでも学習はできます。それだけの処理でも、何千ものログが発生することになるからです。時間をかけて学習すれば、もちろん検知の精度は向上します。処理が遅い、エラーになるといったことは、それで自動検知できるようになります。学習結果の微調整やチューニングを人の手で行う必要はほとんどありません。教師型の学習は基本的には必要ないのです。万が一必要な場合は、コントローラの出した結果を上書きして修正できます。ちなみにこのコントローラは、SaaSの形でもオンプレミスの形でも持つことができます。