[Azure] Activity Log Alertでサブスクリプションの変更を通知する

アクティビティログ(Activity Log)とは、Azureサブスクリプションに関するイベントが記録されたログです。以下6つのカテゴリでログが記録されています。

- <font color="blue"><b>管理</b>(Administrative)</font>：リソースに関する作成、更新、削除のログ。AWS CloudTrail/Configに相当するものです。
- <font color="blue"><b>サービス正常性</b>(Service Health)</font>：Azureサービスに異常があった場合に出力されるイベントです。サブスクリプションで使用しているサービスに関連するものだけが出力されるので、[Azureの状態](https://azure.microsoft.com/ja-jp/status/) から関連サービスを絞り込む手間が省けます。
- <font color="blue"><b>推奨</b>(Recommendation)</font>：WebAppやSQL Serverなど、PaaS系サービスの推奨設定が出力されます。
- <font color="blue"><b>セキュリティ</b>(Security)</font>：Security Centerのアラートが出力されます。
- <font color="blue"><b>自動サイズ設定</b>(Autoscale)</font>：VMやWebAppなどの自動スケール操作に関連するイベントが出力されます。
- <font color="blue"><b>ポリシーおよびリソース正常性</b>(Policy and Resource Health)</font>：これは現在まだ未使用(予約されたカテゴリ)なようです。

# 管理イベントをアラート通知してみる

アクティビティログが出力された場合にメール通知することができるので試してみます。

Azureポータルで 「その他のサービス」 → 「アクティビティ ログ」を選択後、表示されたログの1つを選択すると「アクティビティ ログ アラートの追加」が表示されるので選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/8a372cec-009b-6c01-a0bf-31a0d1609193.png)

色々な絞り込み条件が設定できますが、ここでは試しに管理イベントを「すべて」設定してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/39f475b9-3c89-f533-c76e-65f096a3678a.png)

保存するとエラーになってしまいました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/7c7da7d3-26c1-959a-b21e-6d616287ec66.png)

この、エラーになった操作自体がアクティビティログに記録されているので、一覧に戻って更新してみます。Json形式でログが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/018c6eae-0168-d321-a5dc-04d00ce609b0.png)

どうやら管理イベントは「すべて」ではだめで、もう少し条件を絞り込む必要があるようです。

"状態：開始" を条件に追加してアラートを作成してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/b51b41e4-06e7-9008-01b5-28494dd30a11.png)

アラートが作成でき、該当する操作が行われると、通知がHTMLメールで送られてきます。以下は、仮想マシンを停止した場合のメール例です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/2e1e4184-a401-53f2-343d-e759448e0434.png)

残念ながら現在メール文面はカスタマイズできませんが、実行した操作はそれぞれの項目から確認することができます。

<font color="blue"><b>OPERATION NAME</b></font>：実施した操作
<font color="blue"><b>RESOURCE ID</b></font>：対象リソース
<font color="blue"><b>CALLEER</b></font>：実行したユーザ

以上でメール通知が確認できました。

# 実際のアラート条件について

今回は「すべて」で通知を試してみましたが、アラート作成画面で絞り込み条件(基準)を追加することで、必要な場合だけアラート通知することが可能となります(特定のリソースグループに対する操作や、失敗した操作だけを通知するなど)。

アラート条件は実際のサブスクリプションの利用状況に応じて設定することになりますが、

- 管理(重要とエラーのみ)
- サービス正常性(すべて)
- 推奨(すべて)
- セキュリティ(すべて)

はさほど件数も多くないので、全てのサブスクリプションで設定するようにしてもいいと思います。

また、少人数で使うサブスクリプションであれば、勉強のため今回のように「全ての管理イベント」を設定しておくことも考えられます。例にあったように、操作内容は [リソースタイプやオペレーションの種類](https://docs.microsoft.com/ja-jp/azure/templates/) [^1] がそのまま送られてくるので最初は分かりづらいですが、これらはResource Manager templateで指定するものと同じなので、慣れておけばテンプレート機能の習得にも役立ちます。また、Azureサービス都合での更新も通知されてくるので、サービス停止を伴わないメンテナンスや新サービス追加などが検知できる場合もあります。（ただし、作業量にもよりますが、<font color="red">月1,000件以上のメール</font>が来ることになりますのでご注意下さい。）

[^1]: リンク先のページが少し分かりづらいですが、左のメニューの一番下に「> Reference」という項目があり、これを展開すると一覧が出てきます。

# その他の機能

メール通知に関しては以上となりますが、アクティビティログは他のサービスとも連携することが可能です。

- <font color="blue"><b>ストレージへの出力</b></font>：アクティビティログの<font color="red">保存期間が90日</font>となっているため、それ以上の期間保持したい場合は、ストレージへの出力オプションを設定してストレージに保管します。ポータルのアクティビティログから「エクスポート」を選択して設定します。
- <font color="blue"><b>Event Hub出力</b></font>：ストレージへの出力に加えて、[Event Hub出力](https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-stream-activity-logs-event-hubs) が可能です。Event Hubを介してさらに別のサービスとの連携が可能となります。
- <font color="blue"><b>Log Analytics(OMS)連携</b></font>：より複雑なクエリでログ検索したい場合は、[Log Analyticsとの連携](https://docs.microsoft.com/ja-jp/azure/log-analytics/log-analytics-activity)
 が可能です。

# 参考

- [Azure アクティビティ ログでサブスクリプション アクティビティを監視する] (https://docs.microsoft.com/ja-jp/azure/monitoring-and-diagnostics/monitoring-overview-activity-logs)