Azure Monitor エージェントでLinux仮想マシンのディスク使用率を監視する

Azure Monitor エージェントを使ったLinux仮想マシンのディスク使用率監視を行います。 Log Analytics エージェントの場合は難しいことなく実現できたのですが、後継の Azure Monitor エージェントだと「/」という合計のディスク使用率しかログに表示されず、少しカスタマイズが必要でした。

ポイントは以下の3点です。
1. Linux OS 上で ディスク容量確認結果を syslog に定期的に吐き出すように設定する
1. Azure Monitor | データ収集ルール で Linux Syslog を収集する
1. Azure Monitor ログアラートを設定する

Azure Monitor エージェントの初期設定や仮想マシンへのエージェントインストール方法については、公式ドキュメントをご確認下さい。
[チュートリアル: Azure 仮想マシンに対する監視を有効にする
 | Microsoft ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-monitor/vm/tutorial-monitor-vm-enable)

## 1. Linux OS 上で ディスク容量確認結果を syslog に定期的に吐き出すように設定する
OS上で以下のコマンドを実行します。
※ 権限が足りない場合は root で実行するとうまくいくと思います。
※ Ubuntu など、 SELinux が動いてない環境の場合は `restorecon` は不要だと思います。

```sh
# df の結果を syslog に吐き出すシェルスクリプトを作成
ls -lZ /usr/local/bin/
cat <<- EOT > /usr/local/bin/dfInfo
#! /bin/bash
LANG=C df -m | tr -s ' ' ' ' | sed -e '1d' | sed 's/\%//g' | logger -p syslog.info
EOT
restorecon /usr/local/bin/dfInfo
chmod 744 /usr/local/bin/dfInfo
ls -lZ /usr/local/bin/

# 10分ごとに作成したスクリプトを実行する
cat <<- EOT > /etc/cron.d/dfInfo
0,10,20,30,40,50 * * * * root /usr/local/bin/dfInfo
EOT
restorecon /etc/cron.d/dfInfo
ls -lZ /etc/cron.d/
```

これで、10分ごとに syslog に df コマンドの結果がいい感じに出力されるはずです。

![syslog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395457/0a3d059d-f47c-13aa-6132-0d95cafc0aa5.png)

## 2. Azure Monitor | データ収集ルール で Linux Syslog を収集する
syslog の INFO レベルのログを Log Analytics ワークスペールに収集するためのデータ収集ルールを作成します。

Azure Portal にて、 モニター > データ収集ルール 画面で __[＋作成]__ をクリックします。
__[収集と配信]__ でデータソースを追加し、以下のように設定します。その他の設定項目は各環境に合わせて適切に設定してください。

| 設定項目 | | 値（例） |
| -- | -- | -- |
| プラットフォームの種類 | | Linux |
| データ ソースの種類 | | Linux Syslog |
| ファシリティ | LOG_SYSLOG | LOG_INFO |
|  | それ以外 | none |

設定内容を確認し、ルールを作成してください。

これで、設定した Log Analytics ワークスペースに df の情報が収集されるようになりました。
試しに Log Analytics でログを見てみましょう。ログの収集に時間がかかる __(*1)__ ので、上記設定のあと15分後くらいに見ると良いです。
設定した Log Analytics ワークスペース のログで以下のクエリを実行します。

```
Syslog
| where Facility contains "syslog"
```

![logana_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395457/4d860885-a4b3-590f-429f-357337e430f9.png)

ここまでの設定がうまくできていれば、`syslog` が収集できています。しかし、メッセージの内容が `SyslogMessage` の1カラムにまとめられており、このままではアラートで閾値を設定することができません。そこで、クエリでいい感じに表示します。

```
Syslog
| where Facility contains "syslog"
| extend Fields = split(SyslogMessage, ' ')
| extend Filesystem = tostring(Fields[0])
| extend 1Mblocks = toint(Fields[1])
| extend UsedMiB = toint(Fields[2])
| extend AvailableMiB = toint(Fields[3])
| extend UsePercent = toint(Fields[4])
| extend MountedOn = tostring(Fields[5])
```

![logana_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395457/a5e9fc51-7b3e-7af0-4c66-79ec538817ca.png)

これでアラートを作る準備が整いました。

## 3. Azure Monitor ログアラートを設定する
Log Analytics のクエリを軽くするため、検査するログの時間を範囲指定します。

```
Syslog
| where TimeGenerated > ago(30m)
| where Facility contains "syslog"
| extend Fields = split(SyslogMessage, ' ')
| extend Filesystem = tostring(Fields[0])
| extend 1Mblocks = toint(Fields[1])
| extend UsedMiB = toint(Fields[2])
| extend AvailableMiB = toint(Fields[3])
| extend UsePercent = toint(Fields[4])
| extend MountedOn = tostring(Fields[5])
```

Log Analytics のクエリの画面で __[+新しいアラートルール]__ をクリックします。アラート作成の画面に遷移します。
__アラートルールの作成 > 条件 > 測定__  にて、以下の設定を入れます。

| 設定項目 | 値（例） |
| -- | -- |
| メジャー | UsePercent |
| 集計の種類 | 最大値 |
| 集計の粒度 | 30分 |

__アラートルールの作成 > 条件 > アラートロジック__  にて、以下の設定を入れます。

| 設定項目 | 値（例） |
| -- | -- |
| 演算子 | 次の値より大きい |
| しきい値 | 80 |
| 評価の頻度 | 30分 |

その他の設定項目については、各環境に合わせて適切に設定してください。

以上の設定にて、Azure Monitor エージェントを利用する場合にもディスク使用率を監視することができるようになりました。


## おわりに
今回は、Azure Monitor エージェントを使った Linux 仮想マシンのディスク使用率監視アラートを作ってみました。Log Analytics エージェントは __2024年8月31日 にサポート終了予定__ __(*2)__ だそうです。現在 Log Analytics エージェントを使用している場合は、Azure Monitor エージェント への切り替えが必要になってくるかと思います。その際にご参考になれば幸いです。（いずれ Azure Monitor エージェントそのままでもいい感じにディスク使用率監視できるようになる気はします）

## 注釈
* __(*1)__ _ログ データを取り込むための一般的な待ち時間は 20 秒から 3 分です。_  
 [Azure Monitor でのログ データ インジェスト時間 | Microsoft ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/data-ingestion-time)

* __(*2)__ _Log Analytics エージェントは廃止予定で、2024 年 8 月 31 日を過ぎるとサポートされなくなります。_  
 [Log Analytics エージェントの概要 | Microsoft ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/log-analytics-agent)