
現在、分散型アプリケーションへの移行が本格化しています。この主要因は、消費者やペースの速いビジネスに関わる企業が"ダウンタイムゼロ"を求めていることにあります。このようなニーズによってデプロイの要件は複雑化しており、グローバルな分散や迅速なイノベーションを実現する機能も求められています。
今日アプリケーションをデプロイするにあたって、クラウドが事実上唯一の選択肢になりつつあります。クラウドへのデプロイでは、多くの場合、アプリケーションのホスト先としてAWSが選ばれています。AWSなら世界のさまざまなリージョンに対応し、開発やイノベーションを迅速化する無数のサービスを利用可能であり、さらには運用コストや資本コストも抑えられるからです。開発チームにとって、AWSには、Amazon EKS上のKubernetesに移行できる、最新のサーバーレスオプションをテストできる、優れたサービスで従来の階層型アプリケーションを強化できるといった価値もあります。
Elasticオブザーバビリティには、設定不要のAWSサービス向け統合機能が30種類用意されており、今後さらに追加される予定です。
こうした統合や機能については、以前投稿した以下のブログで簡単にご紹介しています。
- Elastic and AWS: Seamlessly ingest logs and metrics into a unified platform with ready-to-use integrations(ElasticとAWS:すぐに使える統合機能で一元的なプラットフォームにログやメトリックをシームレスに取り込む)
その他にも以下の投稿で、Elasticの主要なAWSサービス向けの統合機能について説明しています。
- APM (metrics, traces and logs) for serverless functions on AWS Lambda with Elastic(Elasticを使用したAWS Lambdaのサーバーレス関数のAPM(メトリック、トレース、ログ))
- Log ingestion from AWS Services into Elastic via serverless forwarder on Lambda(Lambdaでサーバーレスフォワーダーを使ってAWSサービスからElasticにログを取り込む)
- ElasticとAmazon S3 Storage Lensの新しい統合機能:管理を簡素化し、コストを抑え、リスクを低減
- Elastic Cloud × AWS FireLens - エージェントレスなデータインジェストでインサイトをすばやく抽出
AWS統合機能の一覧については、Elasticのオンラインドキュメントをご覧ください。
ElasticオブザーバビリティはネイティブなAWS統合機能に加えて、AWSの各種サービスおよびAWSの演算処理サービス(EC2、Lambda、EKS/ECS/Fargate)上で実行されているアプリケーションのログとメトリックも集約できます。このようなデータすべてをElasticの高度な機械学習機能で視覚的かつ直感的に分析できるため、エンドユーザーに影響が出る前にパフォーマンスの問題を検出し、根本原因を明らかにすることができます。
サービスマップ、トレーシング、依存関係、機械学習ベースのメトリックの相関付けなど、Elasticオブザーバビリティが提供するアプリケーションパフォーマンス監視(APM)機能の詳細については以下をご覧ください。
- ElasticオブザーバビリティでのAPM相関付け:低速または失敗したトランザクションの考えられる原因を自動的に特定
- Elastic and AWS: Get the most value from your data sets(ElasticとAWS:データセットから最大限の価値を引き出す)
このように、Elasticには、AWSの各種サービスやAWSの演算処理サービス(EC2、Lambda、EKS/ECS/Fargate)上で実行されているアプリケーションのメトリックを取り込み、集約し、分析する機能が用意されています。Elasticはログ関連の機能を備えているだけでなく、AWS環境に対応した一元的なオブザーバビリティソリューションでもあるのです。
このブログでは、AWSサービス上で実行される以下のようなシンプルなAWSアプリケーションのメトリックをElasticオブザーバビリティで監視する方法について説明します。
- AWS EC2
- AWS ELB
- AWS RDS(AuroraDB)
- AWS NATゲートウェイ
これからご紹介するように、統合機能をインストールするとメトリックがすぐに取り込まれ、レビューを直ちに開始できます。
このブログの内容を実際に試してみたい方のために、本デモに使用したコンポーネントと詳細設定を以下に挙げます。
- Elastic Cloudにアカウントがあり、デプロイしたスタックがあること(手順はこちら)。
- AWSから必要なデータを取り込む権限があるAWSアカウントがあること。詳細はElasticのドキュメントをご覧ください。
- AWSの3層アプリを使用し、Gitの手順に従ってインストールしました。
- このブログでは、Elasticの汎用AWS統合機能のインストールについて説明ます。この機能は、メトリックの収集となる4つのサービスに対応しています
(ElasticのAWS統合機能でサポートされるサービスの一覧)。 - 他のブログでAWSでのアプリケーション監視(メトリック、ログ、トレース)について説明しているため、ここではアプリケーション監視については説明しません。代わりに、AWSサービスを簡単に監視する方法を扱います。
- メトリックを確認するには、アプリケーションに負荷をかける必要があります。そこで、アプリケーションへのトラフィックを増やすPlaywrightスクリプトも作成しました。
Elasticの設定に進む前に、監視対象を確認しましょう。aws-three-tier-web-architecture-workshopの手順に従うと、以下のものがデプロイされます。

デプロイの内容:
- 6サブネットのVPC x 1
- AZ x 2
- 各AZのWebサーバーx 2
- 各AZのアプリケーションサーバーx 2
- 外部向けアプリケーションロードバランサーx 1
- 内部向けアプリケーションロードバランサーx 1
- アプリケーションレイヤーへのトラフィックを管理するNATゲートウェイx 2
- インターネットゲートウェイx 1
- リードレプリカを含むRDS Aurora DB x 1
ブログの後半で、このアプリに負荷をかけるためのPlaywrightスクリプトもご紹介します。このスクリプトは、メトリックを増やしてダッシュボードを"起動する"ためのものです。
指示に従ってElastic Cloudの使用を始めます。


[Add AWS](AWSの追加)を選択します。

ここで認証情報を入力すると、Elasticにポリシーとして保存されます。このポリシーは、次の手順でエージェントをインストールする際に使用します。
上図からわかるように、このElasticの汎用AWS統合機能は30種類のAWSサービスから多くのデータを収集します。このElasticの汎用AWS統合機能をインストールせずに、個々の統合機能を選択してインストールしてもかまいません。

先ほどの手順で作成したポリシーの名前を選択します。

[Add agent](エージェントの追加)ウィンドウの説明のステップ3に従います。以下を実行する必要があります。
1:EC2インスタンスを起動する
- t2.medium以上
- Linux - 任意
- EC2インスタンスの起動時にインスタンスのキャパシティ予約を[Open](開く)に設定する
2:インスタンスにログインして、[Linux Tar]タブでコマンドを実行する(以下の例を参照)
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.5.0-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.5.0-linux-x86_64.tar.gz
cd elastic-agent-8.5.0-linux-x86_64
sudo ./elastic-agent install --url=https://37845638732625692c8ee914d88951dd96.fleet.us-central1.gcp.cloud.es.io:443 --enrollment-token=jkhfglkuwyvrquevuytqoeiyri
アプリケーションの実行は非常に簡単ですが、▲
AWS 3層アプリケーションのWebサイトへのトラフィックを増やす、Playwright用の簡単なスクリプトを以下に示します。
import { test, expect } from '@playwright/test';
test('homepage for AWS Threetierapp', async ({ page }) => {
await page.goto('http://web-tier-external-lb-1897463036.us-west-1.elb.amazonaws.com/#/db');
await page.fill('#transactions > tbody > tr > td:nth-child(2) > input', (Math.random()*100).toString())
await page.fill('#transactions > tbody > tr > td:nth-child(3) > input', (Math.random()*100).toString())
await page.waitForTimeout(1000)
await page.click('#transactions > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=button]')
await page.waitForTimeout(4000)
});
このスクリプトではブラウザーを3つ起動しますが、playwright.config.tsファイルで1つのブラウザーのみに制限してもかまいません。
この演習では、Webサイトをテストする間、約5時間にわたり5分間隔でこのトラフィックを実行しました。

表示される情報を見てみましょう。
これらのダッシュボードはすべて、設定なしですぐに使えます。以下の図では、今回のアプリの関連項目のみにビューを絞り込んでいます。
すべてのダッシュボードで、時間枠をトラフィック生成スクリプトを実行した時間に限定しています。

4つのEC2インスタンス(Webサーバー2つ、アプリケーションサーバー2つ)にフィルタリングすると、以下のことを確認できます。
1:4つのインスタンスがすべて稼働していて、ステータスチェックでエラーは検出されていない。
2:時間枠内の平均CPU使用率が表示され、異常は見当たらない。
3:ネットワークの受信/送信バイト数が、データベースでの行の読み込み期間にわたって集約され表示されている。
今回は表示可能なメトリックのごく一部しか紹介していませんが、AWS EC2ではさらに多くのメトリックを利用できます。特定インスタンスの検索を絞り込むときに役立つディメンションなど、AWSドキュメントに記載されているメトリックはすべて利用できます。

ELBダッシュボードについては、2つのロードバランサー(外部Webロードバランサーと内部アプリケーションロードバランサー)をフィルタリングしています。
この設定不要のダッシュボードでは、アプリケーションのELB固有のメトリックを確認できます。AWSドキュメントに記載されているほとんどのアプリケーションのELB固有メトリックについて、グラフを追加できます。
今回の2つのロードバランサーでは、以下のことがわかります。
1:両方のホスト(ELBに接続されたEC2インスタンス)が正常に機能している。
2:トラフィックの生成期間には、ロードバランサーのキャパシティユニット(使用量)とリクエスト数の両方が予想どおりに上昇している。
3:400番台と200番台のカウントを表示するよう設定されている。400番台は、アプリケーションの問題やアプリケーションサーバーとの接続の問題を特定するのに役立ちます。

RDSにデプロイしたAuroraDBについては、ダッシュボードでAuroraのプライマリインスタンスとセカンダリインスタンスのみをフィルタリングしています。
EC2やELBと同様に、CloudWatchのほとんどのRDSメトリックについて、グラフやチャートを新規に作成できます。このダッシュボードでは、以下の項目に絞り込んで表示しています。
1:挿入スループットと選択スループット
2:書き込みレイテンシ
3:CPU使用状況
4:時間枠内の総接続数

上図では、アプリケーションサーバーの前に配置される2つのNATインスタンスだけが表示されるようにフィルタリングしました。他のダッシュボードと同様に、必要に応じて他のメトリックのグラフやチャートも作成できます。
このNATダッシュボードでは、以下のことを確認できます。
1:パケットドロップがないため、NATゲートウェイは正常に機能している。
2:Webサーバーからのアクティブな接続数が想定どおりである。
3:受信/送信バイトのメトリックがほぼ正常である。
おつかれさまでした。これで、お使いのアプリケーションについて、AWSサービスの主要なメトリックの監視を始められるようになりました。

2.Lambdaのログフォワーダーをインストールします。この方法では、複数の場所からログを取り込みます。以下のアーキテクチャー図をご覧ください。

この方法の詳細については、こちらのブログでも説明しています。
メトリックとログ(またはそのいずれか)をElasticに取り込んだら、Elasticの機械学習機能を使ってデータ分析を始めましょう。この機能については、以下で詳しく説明されています。
Elasticのブログには、他にも多くの動画や記事があります。
ElasticオブザーバビリティがAWSサービスのメトリック監視にどのように役立つのかご理解いただけたかと思います。以下に、このブログで説明してきた内容を簡単に振り返ります。
- ElasticオブザーバビリティはAWSサービスのメトリックのインジェストと分析をサポートしている
- Elastic Agentを使用するとAWSサービスからのインジェストを簡単に準備できる
- Elasticオブザーバビリティには、情報の事前確認に使える設定不要の(OOTB)AWSサービス向けダッシュボードが複数用意されており、ニーズに合わせて変更することもできる
- ElasticオブザーバビリティのAWS統合の一環として30種類以上のAWSサービスに対応しており、対象サービスは今後も定期的に拡大予定である
- 関連ブログで説明されているように、Elasticの機械学習機能を使用してAWSサービスのメトリックを分析できる
AWS Marketplaceから登録すると、7日間の無料トライアルをご利用いただけます。世界中のあらゆるAWSのElastic Cloudリージョンで、すぐにデプロイをお試しください。AWS Marketplaceで購入したElastic製品は月次の一括請求書に記載され、AWSの確約利用割引が適用されます。
本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。