Azure IaaSサーバの監視アラート

#1.概要
Azure上に構築したIaaSサーバに対して、Azureの機能だけで監視アラートの設定したいと考え実装を行いましたので、その際の手順を残します。
せっかくなのでリソース監視については、昨年GAした「Azure Monitor for VMs」を使用してみました。

#2.監視項目したいリソース
一般的にサーバで監視する以下の項目を監視し、閾値をトリガーにアラートを発呼します。
・CPU使用率(80%以上)
・メモリ使用率(80%以上)
・ディスク使用率(80%以上)
・サービス起動停止
・プロセス起動停止 ← わからないので諦めた
・死活

#3.手順
#####①VMの作成(VM作成手順はそこら中にあるので省略します)
#####②Azure Monitor for VMsの有効化
仮想マシンのメニューから[監視]-[分析情報]を選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/07963fe9-2e07-83e6-fccc-46b99adddeb8.png)
[有効]を選択し、デプロイの完了を待ちます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/f3d55d67-7ae6-b271-a99c-08b74a4f9971.png)
#####③LogAnalyticsワークスペースの作成
検索バーからloganalyticsを検索し、LogAnalyticsワークスペースを選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/e9f0d7cd-edea-ddeb-80a8-f69fe2c6c0c8.png)
LogAnalyticsワークスペースをデプロイします。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/377b8a1a-46bc-2b94-73fa-af269a778eca.png)
#####④LogAnalytics エージェントのインストール
LogAnalyticsのメニューから[ワークスペースのデータソース]-[仮想マシン]を選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/cd484b1e-e9d8-7e9d-f18b-2489ea6c7db5.png)
①で作成した仮想マシンを接続します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/11570a9d-0134-ce88-db63-e59717fa72a9.png)
#####⑤アラートの作成
検索バーからモニターを検索し、モニターを選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/d32bcddd-995b-fe87-df83-9632cafa307e.png)
モニターのメニューから、アラートを選択し、新しいアラート ルールを選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428525/32828e9d-7074-38ab-d1c5-a392c219a8fb.png)
以下を元にパラメータを選択し、アラート ルールの作成を選択します。
スコープ：③で作成したワークスペース
条件：例として15分間隔の監視アラートを作成したパラメータを以下に記載します。
アクション：メール及びWebhookを必要に応じて設定
アラート ルールの詳細：必要に応じて設定


######・CPU使用率(80%以上)
検索クエリ

```
InsightsMetrics
| where Origin == "vm.azm.ms" 
| where Computer == "*********"
| where Namespace == "Processor" and Name == "UtilizationPercentage" 
| where Val >= 80
```
基準：結果の数
演算子：次の値より大きい
しきい値：14
期間(分単位)：15
頻度(分単位)：15
######・メモリ使用率(80%以上)
検索クエリ

```
InsightsMetrics 
| where Origin == "vm.azm.ms" 
| where Computer == "*********"
| where Namespace == "Memory" and Name == "AvailableMB" 
| extend TotalMemory = toreal(todynamic(Tags)["vm.azm.ms/memorySizeMB"])
| extend AvailableMemoryPercentage =  ((1 - (toreal(Val) / TotalMemory)) * 100.0 )
| where AvailableMemoryPercentage >= 80
```
基準：結果の数
演算子：次の値より大きい
しきい値：14
期間(分単位)：15
頻度(分単位)：15
######・ディスク使用率(Cドライブ使用率80%以上)
検索クエリ

```
InsightsMetrics
| where Origin == "vm.azm.ms"
| where Computer == "*********"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| where parse_json(Tags).["vm.azm.ms/mountId"] == "C:"
| extend FreeDisk = tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize AggregatedValue = (100 - avg(Val)) by bin(TimeGenerated, 1m), Computer, _ResourceId, FreeDisk
| where AggregatedValue >= 80
```
基準：結果の数
演算子：次の値より大きい
しきい値：14
期間(分単位)：15
頻度(分単位)：15
######・サービス起動停止(例：RDSサービス)
検索クエリ

```
Event
| where ( Computer has "*********")
| where ( EventLog == "System")
| where ( Source == "Service Control Manager" )
| where ( RenderedDescription has "Remote Desktop Services サービスは 停止 状態に移行しました。")
```
基準：結果の数
演算子：次の値より大きい
しきい値：1
期間(分単位)：15
頻度(分単位)：15
######・死活
検索クエリ

```
Heartbeat
| where ( Computer has "*********")
```
基準：結果の数
演算子：次の値より小さい
しきい値：1
期間(分単位)：15
頻度(分単位)：15


"*********"は、サーバ名です。

#4.最後に
LinuxOSも同じ感じでいけると思います。
もっとスマートな方法があればぜひ教えてください。