CloudWatchモニタリングスクリプトでリモートマウントディスクを監視

[CloudWatchモニタリングスクリプト](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html#using_put_script)を使用すると、収集したディスクスペースの使用状況が
AWSコンソールの「CloudWatch > メトリクス > すべてのメトリクス > Linux システム > Filesystem, InstanceId, MountPath」にカスタムメトリクスとしてレポートできます。

今回、EC2からリモート（Direct Connect 経由でWindowsサーバへ）マウントしているファイルシステムがレポートされなかったので、
AWSサポートに問い合わせた際の回答内容と対処方法です。
# 事前環境情報
```shell-session:OS,カーネル,AWSCLIバージョン確認
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ uname -a
Linux hogehuga.ap-northeast-1.compute.internal 4.14.77-81.59.amzn2.x86_64 #1 SMP Mon Nov 12 21:32:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ aws --v
aws-cli/1.15.80 Python/2.7.14 Linux/4.14.77-81.59.amzn2.x86_64 botocore/1.10.79
```
```shell-session:CloudWatchモニタリングスクリプトバージョン確認
$ ~/aws-scripts-mon/mon-put-instance-data.pl --version
CloudWatch-PutInstanceData version 1.2.2
```
```shell-session:Linuxファイルシステムとマウント位置の確認
$ df -h
ファイルシス                       サイズ  使用  残り 使用% マウント位置
/dev/nvme0n1p1                        30G   15G   16G   47% /
/dev/nvme1n1                          90G   17G   74G   19% /data
//172.16.10.250/d/HOGE/HUGA/PIYO     500G  411G   90G   83% /mount
```
CloudWatchモニタリングスクリプトのcron設定変更前

```shell:/var/spool/cron/root
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --disk-path=/data --from-cron > /dev/null 2>&1
```
AWS 認証情報の設定等CloudWatchモニタリングスクリプトを動作させる設定は完了済みです。
# 対処
[ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html#using_put_script)に記載の通り、レポート対象として追加するマウント先ディスクパス`--disk-path=/mount`を追加します。

```shell:/var/spool/cron/root
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --disk-path=/data --disk-path=/mount --from-cron > /dev/null 2>&1
```
EC2にアタッチしたEBS等であれば上記設定の追記のみでメトリクスに追加できますが、
レポート対象にリモートマウント先が含まれている場合はCloudWatchモニタリングスクリプトを以下のように修正します。

```parl:mon-put-instance-data.pl
# line:549 修正前
my @df = `/bin/df -k -l -P $df_path`;
# 修正後
my @df = `/bin/df -k -P $df_path`;
```
# 原因
スクリプト内で行っている `df` コマンドに付与されている `-l` オプションによって対象がローカルファイルシステムに限定されていた為だったようです。
試しに実行してみると確かに`/mount`のファイルシステムが出力されませんでした。

```shell
$ /bin/df -k -l -P / /data /mount
ファイルシス   1024-ブロック     使用   使用可 容量 マウント位置
/dev/nvme0n1p1      31444972 14970380 16474592  48% /
/dev/nvme1n1        94361600 17768200 76593400  19% /data
```
因みに`$df_path`の中身は`--disk-path=PATH`オプションで指定したパスですが、デバッグ用に以下の通りスクリプトに追記すると実行時に出力が確認できるそうです。

```parl:mon-put-instance-data.pl
# line:316
$df_path .= ' '.$path;
# 以下行を追記
print "df_path: $df_path"
```
```shell:デバッグ用のスクリプト実行
$ ~/aws-scripts-mon/mon-put-instance-data_test.pl --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --disk-path=/data --disk-path=/mount
df_path:  /df_path:  / /datadf_path:  / /data /mount
Successfully reported metrics to CloudWatch. Reference Id: abcdefgh-ijkl-mnop-qrst-uvwxyz123456
```

# サポートについて
> Q.修正すると、本スクリプトはサポート対象外となるでしょうか？
> A.本スクリプトはサンプルスクリプトとして提供させていただいているものであり、ベストエフォートでの対応とさせていただいております。今回の修正は軽微なものですので、今後お問い合わせいただく際に、本ケースの ID、スクリプトのバージョン、スクリプトの修正内容を共有していただくことで、他の者でもベストエフォートでの対応を行わせていただけるとかと存じます。

修正後も継続してサポートいただけるのは嬉しい限りですね！
恐らく私以外の方でも「スクリプトのバージョン」と「スクリプトの修正内容」を共有すれば問い合わせが可能かな、と思いました。

# 参考
[Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html)