Vultr 监控机器使用流量并自动删除

我们在使用Vultr的过程中,经常会出现一不小心流量超出配额导致的天价流量费。

虽然Vultr官方有提供了流量预警之后自动关闭机器的功能,但毕竟关闭机器之后,每小时的机器费用还是需要支付的。像我这种喜欢开高配置机器的,每小时的使用费也是一笔不小的开支,因此抽空写了一个自动删除机器的脚本。

本文其实只是写了一个简单的shell脚本,基础功能还是由Vultr官方提供的vultr-cli来实现的。

1、从Vultr官方的github下载vultr-cli

https://github.com/vultr/vultr-cli/releases

2、解压下载的压缩包,把可执行文件复制到 /usr/bin 目录下

tar -xvf vultr-cli_*
mv vultr-cli /usr/bin/
rm vultr-cli_*

3、在Vultr后台开启API,并记录下API密钥,同时,将部署Shell的机器IP添加进允许列表(注意:如果机器支持IPv4、IPv6,记得同时添加IPv4和IPv6地址)

Vultr后台:https://my.vultr.com/settings/#settingsapi

4、新建vultr-cli.yaml,将API密钥保存进去(本文将文件保存在/home/vultr-cli.yaml)

api-key: [Vultr后台显示的API密钥]

5、新建vultr.sh,将以下内容粘贴进去(本文将文件保存在/home/vultr.sh)

#!/bin/bash
  
instanceIds=`vultr-cli instance list --config /home/vultr-cli.yaml|grep active|awk '{print $1}'`
for instanceId in $instanceIds; do
    allowBw=`vultr-cli instance get $instanceId --config /home/vultr-cli.yaml|grep BANDWIDTH|awk '{print $3}'`
    if [[ -z $allowBw ]]
    then
        continue
    fi
    inComingSum=`vultr-cli instance bandwidth $instanceId --config /home/vultr-cli.yaml|awk '{incoming+=$2} END {print incoming}'`
    if [[ -z $inComingSum ]]
    then
        continue
    fi
    outGoingSum=`vultr-cli instance bandwidth $instanceId --config /home/vultr-cli.yaml|awk '{outgoing+=$3} END {print outgoing}'`
    if [[ -z $outGoingSum ]]
    then
        continue
    fi
    if [ $inComingSum -gt $outGoingSum ]
    then
        let bandwidth=$inComingSum/1024/1024/1024
    else
        let bandwidth=$outGoingSum/1024/1024/1024
    fi
    let bwLeft=$allowBw-$bandwidth
    let bwSafeLeft=$allowBw*15/100
    echo $bwLeft
    echo $bwSafeLeft
    if [ $bwLeft -gt $bwSafeLeft ]
    then
        echo "bwLeft: $bwLeft, bwSafeLeft: $bwSafeLeft, less 85%!"
    else
        echo 'over 85%'
        vultr-cli instance delete $instanceId --config /home/vultr-cli.yaml
        echo "bwLeft: $bwLeft, bwSafeLeft: $bwSafeLeft, Deleted!"
    fi
done

6、执行vultr-cli,看下能否请求成功

vultr-cli instance list --config /home/vultr-cli.yaml

7、为vultr.sh添加执行权限

chmod +x /home/vultr.sh

8、将vultr.sh添加进定时任务

执行:crontab -e
在末尾添加一行:
* * * * * bash /home/vultr.sh
保存即可

8、撒花完结🎉~

结束语

现在,我们已经完成了脚本的部署。脚本将自动获取Vultr上面的机器并将使用流量超过85%的机器自动销毁。

需要注意的是,该脚本最好不要部署在Vultr的机器上面。(万一自己把自己删了怎么办?)

有的朋友会问,为什么要设置85%的阈值?这是因为Vultr的流量统计有延迟。我在实际使用过程中发现,在流量跑得快的情况下,设定85%删除机器,到实际流量更新后删除机器的时候,已经用了93%。