リホストやリアーキテクチャなど、適切な移行戦略を選択する際には、さまざまなリスク、コスト、メリットを考慮する必要があります。しかし、使用している技術スタックが何でどこで動いていて、どようなコンポーネントと連携しているかという詳細が不明であったり、文書化されていなかったりすることがよくあります。 存在するのは導入時に納品され更新されていないドキュメントといくつかの監視設定だけというケースです。
現在の環境について十分な情報がないため、いつ、何を移行するかを計画する際に、組織の正しい意思決定を妨げています。
この問題に対処するために、DynatraceのOneAgentは、アプリケーション・サービス・プロセスを自動的に検出し、アプリケーション環境全体の完全な依存関係マッピングを構築することができます。では、はじめましょう!
🔷 Dynatrace OneAgentの紹介
🔷 サンプルアプリケーションから取り込んだデータのリアルタイム確認
🔷 Dynatraceがモダナイゼーションプランニングにどのように役立つかを確認
DynatraceのWeb UIを学び、Dynatrace OneAgentを通じてサンプルアプリケーションが動作するホストからアプリケーションまで一気通貫で情報が取得できることを確認します。
下の図は本セクションの環境の概要図になります。
#1. サンプルアプリケーション
このラボではDockerコンテナとして実装されたフロントエンドとバックエンドのシンプルなアーキテクチャで構成されたアプリケーションを利用します。
#2. Dynatrace 環境
Lab0のプロビジョニングスクリプト内でDynatrace OneAgentはホストにインストール済みです。データはすでに送られておりSaaS側では収集を開始しています。
OneAgentのインストール方法の詳細はドキュメントをご確認ください。
#3. JMeterプロセス
バックグラウンドでトラフィックを生成するためにJMeter が動作しています。
実環境では、アプリケーションのコンポーネントがオンプレミスの物理または仮想マシン上で動作しており、「コンテナ化」されていない状態が多いでしょう。ワークショップを簡略化するために、アプリケーションをフロントエンドとバックエンドに「コンテナ化」しました。Dynatraceでは、これらのDockerコンテナはすべて、「コンテナ化されていない」アプリケーションと同様に、ホスト上の「プロセス」として表示されます。
Dynatrace Ordersというサンプルアプリケーションを使用します。詳細はhttps://github.com/dt-orders/overviewを確認ください。全てのソースコードはhttps://github.com/dt-ordersにあります。
パブリックIPアドレスを確認するためにAWSコンソールのEC2インスタンス
ページにアクセスします。dt-orders-monolith
インスタンスの詳細タブからパブリックIPv4アドレス
を確認します。
アプリケーションを確認するためにパブリックIPアドレスをコピーして、アドレスバーに貼り付けます。このときHTTPS
ではなくHTTP
でアクセスするようにしてください。
ホームページのメニューを使用してアプリケーションを移動し、主要な機能の URL を確認します。 これらのURLは、後でアプリケーションを分析するときに見ることになります。
customer/list.html
customer/5.html
catalog/list.html
catalog/searchForm.html
order/list.html
order/form.html
次のセクションでは、OneAgentが自動的に検出したホスト、サービス、プロセス、およびサンプル・アプリケーションの完全な依存関係マッピングを確認します。
まずは基本的なインフラ視点で確認をしていきましょう。ホストの監視といえばなんとなくイメージがつくかもしれませんが、そのイメージだけで十分でしょうか。Dynatraceではどのように見えるのか確認してみましょう。
クラウド移行を計画する際、これらのビューは、リソースの使用状況、他のシステムやサービスとの依存関係について洞察を与えてくれるでしょう。
サンプルアプリケーションを実行するホスト、サンプルアプリケーションのインストールとDynatrace OneAgentのインストールはスクリプトを使用して作成されています。 本ハンズオンではOneAgentをインストールする必要はないので、インストール後の状態を確認しておきましょう。
Dynatraceにログインしていない場合はログインをします。
左のメニューバーから管理 > ディプロイメント ステータス
を開きます。
左のメニューバーからインフラストラクチャ > ホスト
を開き、dt-orders-monolith
をクリックします。
ホストページでは、ホストのインフラに関する情報を確認することが可能です。
Properties and tags
をクリックすることでホストの情報を確認できます。 👍 OneAgentをホストにインストールするだけでこれらの情報を自動で収集してきてくれます。
企業には多くのホスト、サービス、アプリケーションがあり、常に変化しています。環境の変化に合わせて自動的に発見し、変更する機能は、Smartscapeが提供する重要な機能です。
Dynatraceのほぼリアルタイムな環境トポロジー可視化ツールであるSmartscapeは、Dynatraceの自動検出を、インフラ、プロセス、サービスにおけるすべてのトポロジー依存関係を迅速かつ効率的に可視化するために提供される独自の機能です。
Smartscapeは、あるサービスのすべての依存関係を表示します。これには、キュー、ウェブサーバー、アプリサーバー、およびネイティブプロセスへの接続が含まれます。ホストビューでは、使用状況や消費プロセスの履歴とライブの時系列データが表示されます。移行時には、依存するすべてのサービスを考慮する必要があるため、この情報により、移行をよりよく計画することができます。
Smartscapeは以下を確認することができます。(上記画像はハンズオン環境とは異なります)
Smartscapeを使って、システムがどのように構成されているのか可視化してみましょう。
dt-orders-monolith
のホストページにいることを確認...
ボックスをクリックSmartscape view
メニューをクリックdt-orders-monolith
が選択された状態でSmartscapeが開きます。自由にスマートスケープを探索して見てください。
Smartscape ビューでは、縦方向のスタックと横方向の繋がりについて視覚化された情報を確認しました。次に、ホスト上で実行されているプロセスやサービスを表示してみましょう。
移行を計画する際に必要なのは、ホストレベルのメトリクスだけではありません。各プロセスの詳細を把握することで、変更する前に、ビジネスに影響を与えるリスクを低減することができます。
ホスト上でどのようなプロセスやサービスが実行されているか、さらには外部のどのようなプロセスやサービスから呼び出されているのか、もしくは呼び出しているのかをすぐに確認することができます。 リアルタイムの情報は、古いドキュメントよりも正確であることは確かです。
dt-orders-monolith
のホストビューに戻り、Process analysis
セクションを探します。monolith-frontend
プロセスをクリックし、プロセスの詳細ビューを開きます。
プロセスのページに移動し、このプロセスの情報が表示されるはずです。 以下の画像に従って、以下の場所を探してください:
プロパティとタグ
の行をクリックしてオン/オフを切り替えると、追加のデータが表示されます。コンテナ名など(#1)も確認できます。他にはどのような情報が表示されているでしょうか。普段見ないようなメトリクスを確認することはできますでしょうか。
#2と#4のプロセスの違いは理解できましたか?Dynatraceは他のプロセスとの関係性を自律的に理解してくれます。さらに重要なことはTomcatのような一般的なプロセスを自動的に認識し、JVMガーベッジコレクションのようなプロセス固有のメトリクスを取得します。サポートしているテクノロジーや言語に関する情報については公式ドキュメントをご確認ください。
上の図では、矢印がDockerのプロパティを示しています。
サンプルアプリはDockerコンテナとして構築されており、Dynatraceはコンテナにフックし、コンテナ化されたプロセスにOneAgentを注入するためのコードを提供します。
Dockerモニタリングのために、Dockerイメージの変更、実行コマンドの変更、コンテナの追加作成は必要ありません。コンテナ化されたアプリケーションやサービスを提供するホストにOneAgentをインストールするだけです。Dynatraceは、コンテナの作成と終了を自動的に検出し、それらのコンテナ内に含まれるアプリケーションとサービスを監視します。
より詳細な情報は以下の公式ドキュメントを参照ください。
ウェブアプリケーションは、ウェブサーバーやアプリケーションプロセス(Tomcatなど)によって提供されるウェブページで構成されています。ウェブアプリケーションやモバイルアプリケーションは、ウェブリクエスト、ウェブサービス・コール、メッセージングなどのリクエストを処理するサービスの上で構築されています。
このような「サーバーサイド・サービス」は、ウェブサービス、ウェブコンテナ、データベースリクエスト、カスタムサービスなどの形をとります。また、サービスは、他のウェブサービス、メッセージングサービス、データベースなど他のサービスを呼び出し連携してリクエストの処理を行います。
移行を計画する際には、ホスト、プロセス、サービス、アプリケーションの観点から、他のアーキテクチャとの相互依存関係を完全に把握することが重要です。時間は常に限られているため、これを一箇所で行うことができれば、評価スケジュールを短縮することができます。
それでは、左側のメニューから サービス
をクリックして、監視されているサービスを見てみましょう。複数のサービスが動作していることが確認できるはずです。
frontend
サービスをクリックします。複数ある場合は、monolith-forntend
と記載がある方を選びます。
サービスページが表示され、この特定のサービスに関する情報が表示されます。 以下の画像に従って、以下の場所を探してください:
プロパティとタグ
をクリックすることで追加の情報を確認することができます。frontend
サービスページで、ダイナミックWebリクエスト
セクションを見つけ、ダイナミックリクエストの表示
ボタンをクリックして、このサービスが処理しているリクエストを確認しましょう。
このページでは、トランザクションを時系列チャートとして確認することができます。
このページでは、"トップリクエスト"とそのレスポンスタイムを見ることができます。 サンプルアプリのURLに見覚えがあるはずです!
リクエストの一つをクリックすると、時系列チャートはそのリクエストだけにフィルタリングされます。
右側のページの上部に分析ビューの作成
と書かれたボタンがあるので、それをクリックします。
データの表示、フィルタリング、分析に利用できるさまざまなオプションがあります。
例えば、以下のようなビューを確認してみましょう。
他にどのようなことが可能か試してみてください。
プロセスとサービスを確認する1つの方法について見てきましたが、サービスバックトレース
とサービスフロー
を使用して、Dynatraceがアプリケーションのトランザクションをエンドツーエンドでどのように理解し、可視化するか見てみましょう。
サービスフロー
では、サービスやリクエスト、またはそれらをフィルタリングしたサブセットからのフローを見ることができます。トリガーされた特定のサービスとともに、リクエストの各コンポーネントが全体的なレスポンスタイムにどのように貢献しているかも確認することができます。サービスバックトレース
では、そのサービスがどのように呼ばれているのかを見ることができます。他のどのサービスからどのようにどれぐらい呼び出されているのか確認することができます。通常業務時間中のアクセスの種類、実行されたステートメント、転送されたデータ量を知ることで、移行対象のより良い計画と優先順位付けが可能になります。場合によっては、依存関係が少なく移行が複雑でない他のサービスやデータベースを優先し、依存関係が複雑なデータベースの移行を見送ることもできます。
frontend
サービスページに戻ります。下記画像のfrontend
をクリックすることで簡単に戻ることができます。frontend
のサービスページで依存関係の理解
のサービスフローの表示
ボタンをクリックします。サービスフローページに遷移します。
すぐにこのアプリケーションがどのような構造になっているかが分かります。
frontend
がbackend
を呼び出しているbackend
がdatabase
を呼び出している上の画像において:
上の画像において:
backend
からdatabase
へのリクエスト数を確認できます。backend
へのリクエストが約42,000に対して、データベースへのリクエストは174,000と4倍になっていることがわかります。Dynatraceは、アプリケーションのトランザクションをエンドツーエンドで理解します。このトランザクションの洞察は、バックトレースのようにいくつかの方法で可視化されます。
バックトレースツリービューは、ページロードまたはブラウザでのユーザーアクションから始まる、このサービスコールにつながったサービスのシーケンスを表します。
それでは、左側のメニューの サービス
をクリックして、サービス一覧を表示しましょう。 今度はbackend
をクリックします。複数のbackend
がある場合は、monolith-backendを選択します。
backend
サービス画面で、バックトレースの表示
ボタンをクリックします。
サービスのバックトレースページで、この特定のサービスの情報を見ることができます。
これは次のラボでもっと面白くなりますが、モノリスバックエンドについては、バックトレースが以下のようになっていることがわかります:
backend
になります。backend
はfrontend
から呼び出されています。ApacheJMeter.jar
はトラフィックを生成する負荷ツールです。My web application
からfrontendへのブラウザーのトラフィックが見えるかもしれません。もし表示されなくても問題ありません。バックトレース内の行をクリックすると、ページの下部が展開されます。
サービスフローとサービスバックトレースを使用することで、これら2つのツールは、ホスト、プロセス、サービス、およびアプリケーションの観点から、アーキテクチャの残りの部分との相互依存関係を完全に把握することができます。
移行を計画する際、データベースのオブザーバビリティは計画を成功させる上で非常に重要です。通常の運用時間帯におけるアクセスの種類、実行されたステートメント、転送されたデータ量を把握することで、より良い移行計画と移行グループの優先順位付けが可能になります。場合によっては、依存関係が少なく移行が複雑でない他のサービスやデータベースを優先して、このデータベースの移行を見送ることもできます。
データベースのアクティビティを監視すると、Dynatraceはどのデータベースステートメントが最も頻繁に実行され、どのステートメントに最も時間がかかっているかを表示します。また、移行計画や移行グループの優先順位付けに直接役立つ、データベースステートメントを実行するサービスも確認できます。
DynatraceはOracleやMicrosoft SQL Server, MySQL, PostgreSQLといった主要なDBMS製品に対応しています。詳しくはDatabase observabilityをご参照ください。
サンプルアプリケーションに存在するデータベースがDynatraceではどのように見えるのか確認してみましょう。
backend
サービスに戻ります。1つの方法は、左側のメニューのサービス
に戻って、backend
サービスを選択することです。backend
サービスページで、[embedded]
のデータベースを開きます。サンプルアプリケーションではHSQLDBを使用しています。このページでは、次のようなデータベースのプロセスを調べることができます。
データベースステートメントの表示
をクリックしてどのようなクエリが発行されているか確認してみましょう。
Dynatraceはデフォルトで、Dynatrace Smartscapeの一部として、FullStackの水平方向(誰が誰と話しているか)と垂直方向(何が何上で実行されているか)の依存関係を可視化します!OneAgentをインストールするだけで、コードの変更も設定変更も必要ありません。
モノリスを構成するプロセスを確認することで把握していなかった依存関係を知ることができます。「5年前に導入したこのレガシー・プロセスへの依存性をすっかり忘れていました。」というのはよく聞く話です。
マイグレーションを計画する際、エコシステムを構成しているテクノロジーを知ることは、特定のサービスをマイグレーションするか、リファクタリングするか、置き換えるかを決める鍵となります。
ワークショップはやや限定的なので、別の環境での例を紹介します。
これもすぐに使える機能で、あなたの環境にどのようなテクノロジーがどの程度存在するかをヒートマップ表示で理解するのに役立ちます。
インフラストラクチャ > テクノロジーとプロセス
をクリックすると、OneAgent が自動的に検出しプロセスのテクノロジが表示されます。tag
を選び、次にstage
、production
を選びます。以下のようにフィルタリングされます。管理 > Dynatrace ハブ
をクリックします。このリストは、Dynatraceウェブサイトのハブページと同期し、常に更新されます。
OneAgent をインストールするだけで、インフラストラクチャ層とアプリケーション層の両方から、サンプル・アプリケーションの詳細なトポロジー・ビューを得ることができ、必要な答えを持ってクラウドへの導入に取り組む準備が整いました。
このセクションでは以下を確認しました:
✅ Dynatrace OneAgentが取得したさまざまな情報の確認方法
✅ サンプルアプリケーションに関するトランザクションの流れ
✅ Dynatraceがモダナイゼーションにどのように役立つのか