CloudWatchでVyOSのカスタムメトリクスを取ってみた
クラメソダー市田です。
最近、VyOSをよく利用するのですが、VyOSのカスタムメトリクスを取ることができないか検証してみたので、その方法をご紹介します。
取得方法
すぐに思いつく取得方法は次の2つかと思います。
- マニュアルの手順で取得
- Amazon EC2 Linux インスタンスのメモリとディスクのメトリックスのモニタリング 2. AWS CLIで取得
今回はAWS CLIで取得する方法をご紹介します。こちらの方が楽です。 マニュアル通りの方法で取得することも可能ですが、以下の理由から採用しませんでした。
- 必要なPerlモジュールなどを入れないといけないが、Debian用パッケージが入るようにしないといけないとかつらい。
- aws-cliで取った方が楽。
IAM Roleの準備
インスタンスを作成する前に、CloudWatchにデータをputできるようにポリシーを作成します。 今回は、下記の内容にしました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Hoot24PutMetricData", "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": [ "*" ] } ] }
AWS CLIインストール
IAMの準備ができたらMarketplaceからVyOSのAMIを選択して、vyosのインスタンスを起動させます。先ほど作成したIAM Roleの指定を忘れないようにします。
VyOSにはvyos@IPアドレス
でログインします。
$ ssh -i <秘密鍵> vyos@<VyOSのIPアドレス>
ログインできたら、AWSのドキュメントにあるコマンドを実行します。
# インストールスクリプトのダウンロードと実行 vyos@VyOS-AMI:~$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" vyos@VyOS-AMI:~$ sudo python get-pip.py # pipでAWS CLIをインストール vyos@VyOS-AMI:~$ sudo pip install awscli
これで/usr/local/bin/aws
にインストールできました。
vyos@VyOS-AMI:~$ which aws /usr/local/bin/aws
カスタムメトリクス用のスクリプトの設置
今回は、下記のようなスクリプト(memoryUsage.sh)でメモリー使用量を取ってみます。
#!/bin/bash log() { echo $1 | logger -t cw-monitoring } usage=$(free | head -n 3 | tail -n 1 | awk '{a = $3/($3 + $4)*100; print a}') instanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) region=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//') cw_opts="--namespace CustomMetrics/VyOS" cw_opts=${cw_opts}" --metric-name MemoryUtilization" cw_opts=${cw_opts}" --dimensions InstanceId=${instanceId}" cw_opts=${cw_opts}" --unit Percent" cw_opts=${cw_opts}" --region ${region}" cw_opts=${cw_opts}" --value ${usage}" # wait for 0 - 15 seconds to disperse API request. sleep $(($RANDOM % 15)) counter=0 MAX_RETRY=3 while :; do # Error Retry /usr/local/bin/aws cloudwatch put-metric-data ${cw_opts} if [ $? -ne 0 ]; then if [ "${counter}" -ge "${MAX_RETRY}" ]; then echo "failed" exit 1 fi else break fi counter=$((counter + 1)) sleep 10 done exit 0
このスクリプトをcw-mon
というユーザでcronで実行します。(ユーザ名は任意です。)
まずはユーザを作成します。
vyos@VyOS-AMI:~$ sudo useradd cw-mon
次に、このスクリプトを適当な場所に設置します。
今回は、/opt/monitoring/memoryUsage.sh
にしました。
/opt/monitoringディレクトリは存在しないので作成します。
vyos@VyOS-AMI:~$ sudo mkdir /opt/monitoring
設置できたら権限とオーナーを修正します。
vyos@VyOS-AMI:~$ sudo chown cw-mon:cw-mon /opt/monitoring/memoryUsage.sh vyos@VyOS-AMI:~$ sudo chmod 744 memoryUsage.sh
最後にcw-mon
ユーザで先ほどのスクリプトをcronに登録します。
cw-monユーザにスイッチしてスクリプトを設置します。
vyos@VyOS-AMI:~$ sudo su cw-mon
なお、cronの編集エディタがデフォルトでnanoエディタですが、個人的に使いづらかったので、viに変更しています。
sh-4.1$ EDITOR=vi sh-4.1$ export EDITOR
以下の内容でcronに登録します。
*/5 * * * * /opt/monitoring/memoryUsage.sh
これでCloudWatchを見ると、下記のように「CustomMetrics/VyOS」をプルダウンで選択できるようになっていると思います。 そこでメモリー利用量が取得できていれば成功です。
最後に
VyOSはDebianベースのソフトウェアルータなので簡単に取得できそうだなと思っていましたが、公式ドキュメントの内容でやろうとしてみると中々辛かったです。 今回の内容のようにVyOSでカスタムメトリクスを取るときは、AWS CLIで取得することをお勧めします。
以上になります。