今回はSaaSの監視サービス・Mackerelを使用し、Azureのマネージドサービスからメトリクスを取得する方法について解説します。
目次
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//resourceGroups/mackerel-test --years 1
※注意
Mackerelのドキュメントではroleオプションのみ指定されていますが、Azure CLI 2.37.0よりcreate-for-rbacの仕様が変更となり、roleオプションを指定する際はscopeオプションも同時に指定しないとエラーになります。
https://github.com/Azure/azure-cli/issues/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 ID | サービスプリンシパル作成時のappIDの値 |
Client Secret | サービスプリンシパル作成時のpasswordの値 |
Region | Japan East |
Metric collecting service | SQL DatabaseとApp Serviceにチェックを入れる |
Tags | department:development |
Name | mackerel-azure |
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上から削除する必要がある
参考資料
・Azureインテグレーション
https://mackerel.io/ja/docs/entry/integrations/azure
・リソースにアクセスできる Azure AD アプリケーションとサービス プリンシパルをポータルで作成する
・az ad spコマンド
https://docs.microsoft.com/ja-jp/cli/azure/ad/sp?view=azure-cli-latest
・az appserviceコマンド
https://docs.microsoft.com/ja-jp/cli/azure/appservice?view=azure-cli-latest
・az webappコマンド
https://docs.microsoft.com/ja-jp/cli/azure/webapp?view=azure-cli-latest
・Create a single database and configure a firewall rule using the Azure CLI
・az sql dbコマンド
https://docs.microsoft.com/en-us/cli/azure/sql/db?view=azure-cli-latest