😀

Azure Monitor で仮想マシンの監視アラート通知 3 種類を試してみた

に公開

背景と目的

監視アラート通知には、昔からメールで送る方法が暗黙の了解で、他の通知方法を試す機会がなかったので、メールと SMS と Azure アプリへのプッシュ通知の 3 種類を試してみました。

SMS 通知は有料で 1 回数円かかるので、試し過ぎにご注意ください。また、5 分ごとに SMS メッセージ 1 件以下というレート制限もあります。

https://azure.microsoft.com/ja-jp/pricing/details/monitor/#:~:text=件につき ¥69.267-,SMS と音声通話,-SMS の料金

https://docs.microsoft.com/ja-jp/azure/azure-monitor/service-limits#:~:text=値と同じ-,sms,-アクション グループの

前提条件

コマンドの実施環境は、Azure Cloud Shell + Azure CLI です。

bash
$ az version
{
  "azure-cli": "2.32.0",
  "azure-cli-core": "2.32.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "ai-examples": "0.2.5",
    "ssh": "1.0.0"
  }
}

検証用仮想マシン作成

bash
# 環境変数をセットします
region=japaneast
prefix=mnralert

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# SSH キーペアをファイル名を指定して作成します
ssh-keygen -m PEM -t rsa -b 4096 \
  -f ${prefix}

# 仮想マシンを作成します
az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image UbuntuLTS \
  --admin-username azureuser \
  --ssh-key-value ${prefix}.pub \
  --size Standard_B1ls \
  --nsg-rule NONE \
  --public-ip-address-dns-name ${prefix} \
  --storage-sku Standard_LRS

# NSG に自分の IP アドレスから SSH 接続出来るようにします
az network nsg rule create \
  --resource-group ${prefix}-rg \
  --name Allow-SSH \
  --nsg-name ${prefix}-vmNSG \
  --priority 100 \
  --source-address-prefixes $(curl -s inet-ip.info) \
  --destination-port-ranges 22 \
  --access Allow \
  --protocol Tcp

# SSH 秘密キーを使用して SSH 接続します
ssh -i ${prefix} azureuser@${prefix}.$region.cloudapp.azure.com

# 一旦仮想マシンから抜けます
exit

監視アラート作成

# 検証用仮想マシンを監視スコープに設定します
scope=$(az vm show \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --query id \
  --output tsv)
echo $scope

# 監視アラート通知を 3 種類設定します(通知先のメールアドレスや SMS の番号は適宜変更してください)
action=$(az monitor action-group create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-action \
  --short-name ${prefix} \
  --action email ${prefix}-email test@example.com \
  --action sms ${prefix}-sms 81 9000000000 \
  --action azureapppush ${prefix}-app test@example.com \
  --query id \
  --output tsv)
echo $action

# 検証用仮想マシンの監視メトリクスを調べます
az monitor metrics list-definitions \
  --resource $scope \
  --output table

# 監視メトリクスを Percentage CPU が 5 分平均で 90% 以上に設定したアラートルールの式を作成します
condition=$(az monitor metrics alert condition create \
  --aggregation Average \
  --metric "Percentage CPU" \
  --operator GreaterThan \
  --type static \
  --threshold 90 \
  --output tsv)
echo $condition

# アラートルールを作成します
az monitor metrics alert create \
  --name ${prefix}-alert \
  --resource-group ${prefix}-rg \
  --scopes $scope \
  --action $action \
  --condition $condition \
  --description "Test High CPU"

負荷テストを実施します

# SSH 秘密キーを使用して SSH 接続します
ssh -i ${prefix} azureuser@${prefix}.$region.cloudapp.azure.com

# stress ツールをインストールします
sudo apt-get update && sudo apt-get install stress -y

# vCPU が 1 つなので下記のパラメーターで CPU に負荷をかけます
stress --cpu 1

# 監視アラート通知が飛んで来たら Ctrl+C で stress を停止します
[Ctrl] + [C]

# 仮想マシンから抜けます
exit

実施結果のスクリーンショット

CPU 使用率の例

monitor-alert-test01.png

メール通知の例

monitor-alert-test02.png

SMS 通知の例

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/938454f5-4a09-1f30-ea98-b29f9e048472.png" width="500">

アラート発生時のプッシュ通知の例

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/87999866-4a29-d067-7a5f-baf257b4e492.png" width="500">

アラート回復時のプッシュ通知の例

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/57cbe271-a7b4-e75d-ba26-f8adc5e857cf.png" width="500">

参考

bash
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg

# 作成した SSH キーペアを削除します
rm ${prefix}*

下記は、参考サイトです。

https://docs.microsoft.com/ja-jp/azure/azure-monitor/alerts/action-groups

https://docs.microsoft.com/ja-jp/azure/azure-monitor/azure-cli-metrics-alert-sample#create-an-alert

https://docs.microsoft.com/ja-jp/cli/azure/monitor/action-group?view=azure-cli-latest#az-monitor-action-group-create

Discussion