Young Leaves

Mackerel でAzure リソースのメトリクスを取得する

今回はモニタリングツールのMackerel をAzure と連携し、Mackerel 上でAzrue リソースを管理する方法について説明します。

Mackerelとは

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 上から削除する必要がある

参考資料