はじめに
今回は,Amazon RDS(Relational Database Services) 上で稼働する MySQL 5.7 データベースの性能監視を ECS Fargate 上の AppDynamics Database Agent コンテナで行う手順について解説させて頂きます。
AppDynamics Database Agent は APM Agent(Java Agent / .NET Agent 等)と異なり,データベース・インスタンスに対する余剰な負荷の発生をできるだけ抑制するため,データベースが稼働する インスタンス/ホスト上に インストールされません。また,RDS のような DBaaS (Database as a Service)では, SSH ログインができませんので,そもそもインストールができません。そこで,別途用意した VM(仮想マシン)上に DB Agent をインストールする場合が多いですが,Docker Hub 上で Database Agent イメージが公開されていますので, 今回はこのイメージを ECS Fargate 上で稼働させてみます。
テスト環境
今回は以下の構成図に示すようなテスト環境を用いました。
- フロントエンド: WordPress 5.8.1
- バックエンド: Amazon RDS MySQL 5.7
- DB監視: AppDynamics Database Agent
WordPress と Database Agent を ECS Fargate 上でコンテナとして稼働させます。
Pulumi によるテスト環境のデプロイ
今回はテスト環境を IaC(Infrastructure as Code) ツールのひとつである Pulumi を用いてデプロイします。
なお,事前に Pulumi 実行環境のインストール, AWS アカウント設定が必要です。
Pulumi プロジェクト GitHub レポジトリ
GitHub 上で 今回使用する Pulumi プロジェクトを公開しておりますので,以下のように clone を行います。
git clone https://github.com/appdynamics-japan/pulumi-ecs-db-agent-rds.git
DB Agent 設定
frontend.py の ECS Task の db-agent コンテナ定義で,以下の環境変数にて AppDynamics SaaS コントローラのアカウント情報を設定します。
'name': 'db-agent',
'image': 'appdynamics/db-agent',
'environment': [
{'name': 'TZ', 'value': 'Asia/Tokyo'},
{'name': 'APPDYNAMICS_CONTROLLER_HOST_NAME', 'value': 'your-account-name.saas.appdynamics.com'},
{'name': 'APPDYNAMICS_CONTROLLER_PORT', 'value': '443'},
{'name': 'APPDYNAMICS_CONTROLLER_SSL_ENABLED', 'value': 'true'},
{'name': 'APPDYNAMICS_AGENT_ACCOUNT_NAME', 'value': 'your-account-name'},
{'name': 'APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY', 'value': 'your-access-key'},
{'name': 'APPDYNAMICS_DB_AGENT_NAME', 'value': 'db-agent-ecs'},
ここで,your-account-name, your-access-key は AppDynamics SaaS コントローラの右上 ⚙ アイコン – License – Account で表示される Name, Access Key です。
Pulumi スタックのデプロイ
以下のコマンドを実行し,RDS, ECS 環境をデプロイします。
pulumi stack init dev
pulumi up
私の環境では 5 分程度で自動的にテスト環境がデプロイできました。
デプロイ完了時以下のように,RDS のエンドポイントホスト名,ユーザ名, WordPress サイトの URLが出力されます。
Outputs:
DB Endpoint : "wp-be-rds9d37504.cqfmkufpnuee.ap-northeast-1.rds.amazonaws.com"
DB Password : "[secret]"
DB User Name : "admin"
ECS Cluster Name: "wp-fe-305c23c"
Web Service URL : "http://wp-fe-alb-c9aa022-220225409.ap-northeast-1.elb.amazonaws.com"
DB Password はセキュリティ上の配慮によりマスキングされていますが,以下のコマンドにより表示可能です。
pulumi stack output --show-secrets
Database Collector の設定
AppDynamics コントローラの Databases – Configurations – Collectors メニューを開き,+Add から次の図のように DB Collector を設定します。
Hostname には,Pulumi から出力された RDS の DB Endpoint を設定します。
ユーザ名は admin, パスワードは pulumi stack output –show-secrets で表示されるパスワードになります。
Database ダッシュボード
DB Collector が正しく設定されていれば,Database ダッシュボードで以下のような表示が得られます。
テスト環境の削除
以下のコマンドで今回デプロイした Pulumi スタックの削除を行うことができます。
pulumi destory --yes
pulumi stack rm dev
まとめ
今回は AWS ECS Fargate 上にデプロイした AppDynamics Database Agent を用い,Amazon RDS を監視する手順について解説させて頂きました。Docker Hub 上で公開されているコンテナイメージを用いることにより,環境変数の設定のみで Database Agent を稼働させることが可能なことがおわかり頂けたかと存じます。