この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
クラメソダー市田です。
最近、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で取得することをお勧めします。
以上になります。