[Azure Monitor] アクション グループについて


## 前提情報

この記事は [Microsoft Azure Tech Advent Calendar 2018](https://qiita.com/advent-calendar/2018/microsoft-azure-tech) の14日目の記事です。
今回 [Azure Monitor](https://docs.microsoft.com/ja-jp/azure/azure-monitor/overview) アラートの [アクション グループ](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups?toc=%2Fazure%2Fazure-monitor%2Ftoc.json) について記事を書こうと思っております。
その前提情報として Azure Monitor について少しご説明させていただければと存じます。

そもそも [Azure Monitor](https://docs.microsoft.com/ja-jp/azure/azure-monitor/overview) では、リソースの [メトリック](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/data-collection#metrics) や [アクティビティ ログ](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-overview-activity-logs?toc=/azure/azure-monitor/toc.json) などのデータを収集しております。Monitor のデータストアに収集されたデータは、[アラート](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-overview-alerts?toc=/azure/azure-monitor/toc.json) を利用して監視することが可能となります。[アラート](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-overview-alerts?toc=/azure/azure-monitor/toc.json) 条件に一致した場合に、電子メールや webhook など [アクション グループ](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups?toc=%2Fazure%2Fazure-monitor%2Ftoc.json) で指定した内容に基づいて通知ができるのですが、今回 Monitor [アラート](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-overview-alerts?toc=/azure/azure-monitor/toc.json) の [アクション グループ](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups?toc=%2Fazure%2Fazure-monitor%2Ftoc.json) について説明していきたいと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/6410a371-ae43-62b5-b77a-8eff7c00f9fc.png)


# Monitor アクション グループとは
アクション グループとは、どの宛先の電子メールに送信するか、どの function を呼び出す、などの通知方法を定義したものとなります。
Monitor アラートを作成するときに必ず 1 つ以上、紐づけする必要となり、アクション グループで設定可能な通知方法は以下の通りとなります。
アクション グループ詳細については、[こちら](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups?toc=%2Fazure%2Fazure-monitor%2Ftoc.json) に記載がございますので、ご参照ください。
また、それぞれの課金については、[Azure Monitor の価格](https://azure.microsoft.com/ja-jp/pricing/details/monitor/) の資料の "通知" の項目をご確認ください。

- 電子メール
- SMS
- Azure アプリのプッシュ通知 ※ [Service Health アラート](https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/alerts-activity-log-service-notifications?toc=%2Fazure%2Fservice-health%2Ftoc.json) でのみサポートされます
- 音声
- [Azure Function](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-overview)
- [Logic Apps](https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-overview)
- Webhook
- ITSM
- Automation Runbook

# Azure ポータル上での設定方法
今回は、例として、自分宛ての電子メールに通知を行うアクション グループを作成していきたいと思います。

**＜手順＞**

1. 左側のリスト一覧に [モニター] が表示されていれば、[モニター]　をクリックします。表示されていない場合は、[すべてのサービス] をクリックして「モニター」で検索して [モニター] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/81fa3998-c634-23a5-51e6-70cc0267a03f.png)![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/6c4a8348-c680-da76-9859-cf75932ae1ed.png)

1. [モニター] ブレードにて [アラート] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/ccfbac36-51f7-19a1-3b55-4787f4a313b9.png)

1. [アクション グループの管理] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/59ffd95b-aee4-dacd-8d56-88a7f0ad75ec.png)

1. [アクション グループの追加] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/8a7ce5cc-2de4-5049-3e00-72f021375341.png)

1. アクション グループ名、短い名前、リソース グループを指定します。<details><summary>**補足（クリックすると展開します）**</summary><div>(アクション グループの)短い名前は、通知の発信元であるアクション グループを識別するために電子メール通知と SMS 通知に含まれます。ユーザーが登録を解除すると、その短い名前で識別される特定のアクション グループから登録を解除することになります。</div></details>![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/927fe523-adf4-97a1-4f66-435541852aa1.png)

1. プルダウンからアクション タイプを選択して、その名前（アクション名）と電子メールにチェックを入れて対象のアドレスを指定します。そして OK をクリックしてアクションを追加します。<font color="Red">**なお、他の宛先の電子メールにも送信したい場合は、再度このステップ 5 の手順でアクションを追加する必要があります。電子メールのアクションは 1 つのアクショングループに最大 1000 個登録できます。**</font>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/5e113bf1-0b42-72ee-a68d-cd1fdafa5663.png)

1. アクション グループの追加ブレードの OK をクリックして アクション グループを作成します。Azure ポータル上の左上に以下のようなポップアップが表示されたら作成完了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/e4159c52-30f7-8279-16ff-d6bd6cb1c40b.png)


# Azure PowerShell を利用して電子メール 100 個を一括で登録する
上述したとおり、一つのアクション グループに最大 1000 個の電子メールを紐づけることが可能となりますが、Azure ポータル上から手動で登録すると**なかなか面倒な作業**です。
今回は Excel ファイルを読み込んで、よしなにアクション グループを作成する PowerShell スクリプトをご紹介します。ご参考になれば幸いです。

**＜手順＞**

1. まず、アクション名と電子メールを記載した以下のような Excel ファイルを用意します。こちらをローカルの適当なパスに保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/1200f687-8d58-35cc-a03a-4b5fa93da2fa.png)

1. PowerShell を開き、以下のスクリプトの内容を適宜置換して実行します。

```php:PowerShell
## まずログイン
Connect-AzureRmAccount

# Excel ファイル読み込み
$excel = new-Object -com excel.application;
$excel.visible = $false
$book = $excel.Workbooks.open("C:\Users\mekamata\Desktop\main\powershell\email-list.xlsx");

# Excel シート 1 読み込み
$sheet = $book.Worksheets.Item(1);

# 名前（Excel に名前を記載したセルの範囲を指定します）
$aryNames = @($sheet.Range("A2:A101")).text
# 電子メール（Excel に電子メールを記載したセルの範囲を指定します）
$aryEmails = @($sheet.Range("B2:B101")).text

# Excel のプロセス終了
$book.close();
$excel.quit();

# 電子メールのアクションを追加
$emailReceiver = @()
for($i = 0; $i -lt $aryNames.Count; $i++){
  $emailReceiver += New-AzureRmActionGroupReceiver -Name $aryNames[$i] -EmailReceiver -EmailAddress $aryEmails[$i]
} 

# アクショングループ名
$actionGroupName = "actiongroup-1214"
# アクショングループの短い名前
$actionGroupNameShort = "agp"
# リソース グループ名
$resourceGroup = "Default-ActivityLogAlerts"

# アクショングループ作成
$action = Set-AzureRmActionGroup -ResourceGroupName $resourceGroup  -Name $actionGroupName -ShortName $actionGroupNameShort -Receiver $emailReceiver
```

なお、Azure PowerShell がインストールされていない場合は、下記ドキュメントを参考にインストールください。

**参考：PowerShellGet を使用した Windows への Azure PowerShell のインストール**
https://docs.microsoft.com/ja-jp/powershell/azure/install-azurerm-ps?view=azurermps-6.13.0

また、上記スクリプトにて利用した Azure PowerShell コマンドレットについても公式資料がございますので、併せてご案内いたします。

**参考：New-AzureRmActionGroupReceiver**
https://docs.microsoft.com/en-us/powershell/module/azurerm.insights/new-azurermactiongroupreceiver?view=azurermps-6.13.0

**参考：Set-AzureRmActionGroup**
https://docs.microsoft.com/en-us/powershell/module/azurerm.insights/set-azurermactiongroup?view=azurermps-6.13.0

実行後に Azure ポータル上で確認したところ以下のように正常に追加できました！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/321457/0d7d135a-1ce8-2c81-0b54-244ff11b241b.png)


# [補足] Logic Apps や Azure Function など、実装次第で様々な方法で通知可能
お問い合わせ対応をしていると、一般的にアラートが発報されたときにメールで通知する方が多い印象を受けます。一方で、上述した通り、アクション グループでは Logic Apps や Azure Function などアクションとして追加することができます。このため発報されたアラートの内容を Logic Apps 経由で slack や teams に通知したりなど実装次第で様々な方法で通知可能なため、ご入り用に応じて検討してみてください。

**参考：AzureのアラートをSlackに通知する方法**
https://tech-lab.sios.jp/archives/3788

**参考：Azure Logic App で Azure メトリックアラートを Slack に投稿する**
https://qiita.com/sgr@github/items/b79405f952b8de8987a4

**参考：How to trigger complex actions with Azure Monitor alerts**
https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/action-groups-logic-app

# まとめ
今回は、Azure Monitor のアクション グループについての概要、Azure ポータルおよび PowerShell での設定方法をご案内いたしました。アクショングループに限った話ではないのですが、どんなものかイメージを掴むには、Azure ポータルを利用みるのが直感的に分かりやすいのですが、ポチポチ作業がメンドクサイ方は、Azure PowerShell（※） などコマンドラインで操作すると効率化できるので、状況に応じてポータルや PowerShell など使い分けていただければと存じます。

※今回は Azure PowerShell をご紹介しましたが、[Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/?view=azure-cli-latest) や [REST API](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-rest-api-walkthrough) なども利用可能です。