Mackerel でAzure リソースのメトリクスを取得する
今回はモニタリングツールのMackerel をAzure と連携し、Mackerel 上でAzrue リソースを管理する方法について説明します。
Mackerelとは
Mackerel とは、株式会社はてなが提供しているSaaS の監視サービスです。Mackerel はPush 型の監視ツールであり、監視対象のサーバにエージェントを導入してメトリクスを取得します。サーバの監視だけでなく、AWS、Azure、GCPといったパブリッククラウドのマネージドサービスからメトリクスを取得することもできます。アラートの通知、用途に合わせた監視、メンテナンス時のダウンタイムの設定等の基本的な機能が揃っていることに加え、監視対象にエージェントを導入することで素早く監視環境を構築することができる特徴があります。また、API を活用することにより環境に合わせたカスタマイズを行うこともできます。
Mackerelには以下の3つの料金プランがあります。
- Trial
- Free
- Standard
Mackerel で組織を作成すると自動的に2週間のTrial プランとなります。Trial プランが終了後、自動的にFree プランに移行されます。Trial 終了前に有償のStandard プランに申し込むことで、有償機能をそのまま使用することができます。料金やプランごとの機能については以下のページを参照してください。
Mackerel で取得可能なAzure リソース
Mackerel で取得可能なAzure リソースは以下の通りです。
- Virtual Machine
- App Service
- Functions
- SQL Database
- DataBase for MySQL
- DataBase for Postgrasql
- Cache for Redis
- Load Balancer
- Application Gateway
- Blob Storage
- Files
Virtual Machine については、Mackerel のエージェントを導入することでメトリクスを取得することも可能です。
今回取得するリソース
今回は以下のAzureリソースからメトリクスを取得します。
- Azure App Service
- Azure SQL Database
Azure リソースを取得する際、タグの指定を行わないと指定したサービス全てのリソースを取得してしまうため、以下のタグが設定されたリソースのみ取得します。
key | department |
---|---|
value | development |
前提条件
今回のMackerel からAzure リソースのメトリクスを取得するため、以下を満たしている必要があります。
- Mackerel の登録が完了していること
- Trial プランもしくはStandard プランであること
- Azure リソース作成、サービスプリンシパル作成用のAzure アカウントおよびAzure AD があること
また、Azure リソース作成時はCloud Shell からAzure CLI を使用するため、作成していない方は事前に作成しておいてください。
Mackerel 用のリソースグループ・サービスプリンシパルの作成
Mackerel からAzure リソースに接続するためには、Azure AD にてサービスプリンシパルの作成が必要となります。サービスプリンシパルを作成するコマンドは以下の通りです。
# Resource Groupを作成する
az group create --resource-group mackerel-test --location japaneast
# Mackerel用のサービスプリンシパルを作成する
# yearsでパスワードの有効期限を設定する、今回は1年とする
az ad sp create-for-rbac -n mackerel-test --role Reader --scopes /subscriptions/<subscriptionのid>/resourceGroups/mackerel-test --years 1
[/subscriptionのid]
Mackerelのドキュメントではrole オプションのみ指定されていますが、Azure CLI 2.37.0 よりcreate-for-rbac の仕様が変更となり、role オプションを指定する際はscope オプションも同時に指定しないとエラーになります。
Usage error: To create role assignments, specify both --role and --scopes. #21960
サービスプリンシパル作成時にパスワードの有効期限を指定しますが、パスワードの有効期限を過ぎると、パスワードを再設定するまでメトリクスを取得できなくなるため注意が必要です。コマンド実行後に「appId」「password」「tennant」の値をメモしておきます。
Azure リソースの作成
サービスプリンシパル作成後、メトリクスの取得を行うApp Service とSQL Database を作成します。App Service とSQL Database を作成するコマンドは以下の通りです。
# リソース作成用の変数を宣言する
RESOURCE_GROUP="mackerel-test"
WEBAPP_PLAN_NAME="free-plan"
WEBAPP_NAME="mackerel-webapp"
SQLSRV_NAME="mackerel-srv"
SQLDB_NAME="mackerel-db"
ADMIN_USER="azureuser"
ADMIN_PASSWORD="EG#Id3n9Ohj$"
LOCATION="japaneast"
TAG_KEY="department"
TAG_VALUE="development"
# App Serviceプランを作成する
az appservice plan create \
--name $WEBAPP_PLAN_NAME \
--resource-group $RESOURCE_GROUP \
--sku FREE \
--tags $TAG_KEY=$TAG_VALUE
# WebAppを作成する
az webapp create \
--name $WEBAPP_NAME \
--resource-group $RESOURCE_GROUP \
--plan $WEBAPP_PLAN_NAME \
--tags $TAG_KEY=$TAG_VALUE
# SQL Serverを作成する
az sql server create \
--name $SQLSRV_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--admin-user $ADMIN_USER \
--admin-password $ADMIN_PASSWORD
# SQL Databaseを作成する
az sql db create \
--resource-group $RESOURCE_GROUP \
--server $SQLSRV_NAME \
--name $SQLDB_NAME \
--tags $TAG_KEY=$TAG_VALUE
Azure Integration の作成
Azure リソースの作成後、Mackerel 管理画面の左ペインから組織名をクリックし、Azure Integration タブから「Set up Azure Integration」をクリックします。Azure アカウント等を入力する画面が表示されるため、以下の項目を入力し「Create」をクリックします。
Tenant ID | サービスプリンシパル作成時のtenant の値 |
---|---|
Client ID | サービスプリンシパル作成時のappID の値 |
Client Secret | サービスプリンシパル作成時のpassword の値 |
Region | Japan East |
Hosts の確認
Azure Integration 作成後、10分程度したらMackerel の管理画面の左ペインからHosts をクリックし、作成したAzure リソースが表示されることを確認します。
リソースのクリーンアップ
Mackerel のメトリクス確認後、クリーンアップが必要であればAzure リソースのクリーンアップを実施します。リソースグループ、サービスプリンシパルを削除するコマンドは以下の通りです。
# リソースグループを削除する
az group delete --resource-group mackerel-test
# サービスプリンシパルを削除する
az ad sp delete --id [サービスプリンシパル作成時のappId]
また、Azure リソースを削除してもMackerel のHosts は削除されないため、Hosts からAzure リソースの削除を行う必要もあるため忘れずに削除しましょう。
まとめ
- Mackerel でAzure のマネージドサービスからメトリクスを取得するにはAzure Integration を使用する
- Azure Integration はStandard (Trial) プランで使用可能
- リソース作成にはAzure AD でサービスプリンシパルの作成が必要となる
- Azure リソースを削除してもMackerel のHosts から削除されないため、使用しなくなったリソースはMackerel 上から削除する必要がある