前言
很多同学在使用阿里云国际的时候被无聊的人刷流量,导致很快流量包被用完,这里给出个 PHP 的监控,用定时 cron 实现超流量就自动关机。
解决方法
把下面的文件保存为 datamonitoring.php
<?php
error_reporting(0);
$AccessKey_ID='xxxxxxxxxxxx';//AccessKey_ID
$Access_Key_Secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';//Access_Key_Secret
$InstanceId='i-t4naxxxxxx';//需要关机的 ecsID
function percentEncode($str){
// 使用 urlencode 编码后,将"+","*","%7E"做替换即满足 ECS API 规定的编码规范
$res = urlencode($str);
$res = preg_replace('/\+/', '%20', $res);
$res = preg_replace('/\*/', '%2A', $res);
$res = preg_replace('/%7E/', '~', $res);
return $res;
}
function computeSignature($parameters, $accessKeySecret){
// 将参数 Key 按字典顺序排序
ksort($parameters);
// 生成规范化请求字符串
$canonicalizedQueryString = '';
foreach($parameters as $key => $value)
{
$canonicalizedQueryString .= '&' . percentEncode($key)
. '=' . percentEncode($value);
}
// 生成用于计算签名的字符串 stringToSign
$stringToSign = 'GET&%2F&' . percentencode(substr($canonicalizedQueryString, 1));
// 计算签名,注意 accessKeySecret 后面要加上字符'&'
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
function get_action($data,$Version,$host){
date_default_timezone_set("GMT");
$dateTimeFormat = 'Y-m-d\TH:i:s\Z';
global $AccessKey_ID;
global $Access_Key_Secret;
$publicdata = array(
// 公共参数
'Format' => 'JSON',
'Version' => $Version,
'AccessKeyId' => $AccessKey_ID,
'SignatureVersion' => '1.0',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce'=> uniqid(),
'Timestamp' => date($dateTimeFormat),
'TimeStamp' => date($dateTimeFormat)
);
$data = array_merge($publicdata,$data);
$data['Signature'] = computeSignature($data, $Access_Key_Secret);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host . http_build_query($data));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$res = curl_exec($ch);
date_default_timezone_set('PRC');
//echo $res;
return $res;
}
//流量 JSON
function get_(){
$data = array(
'Action' => 'QueryResourcePackageInstances',
'RegionId' => 'ap-southeast-1'
);
$res = (string)get_action($data,'2017-12-14','https://business.ap-southeast-1.aliyuncs.com/?');
//echo $res;
$jsonarray = json_decode($res,true);
if($jsonarray['Message']=='Successful!'){
echo $jsonarray['Data']['Instances']['Instance'][0]['RemainingAmount'];
if($jsonarray['Data']['Instances']['Instance'][0]['RemainingAmount']<=20){//这里判断流量小于 20G
StopInstance();
}
}
}
function StopInstance(){
global $InstanceId;
$data = array(
'Action' => 'StopInstance',
'InstanceId' => $InstanceId,
'ForceStop' =>"true",
'StoppedMode' => "keepcharging",
'ConfirmStop' => "false"
);
$res = (string)get_action($data,'2014-05-26','https://ecs.aliyuncs.com/?');
echo $res;
}
get_();
?>
自行更改 用户 AccessKey 地区 机器 ID
如果只有 1 台 ecs 且是新加坡的 只需修改上面 3 个变量值 就能使用
AccessKey 获取方式 登录阿里云-进入控制台-右上角头像-AccessKey
机器 ID 就是 ecs 的 id
然后在/var/spool/cron/root 里添加
*/1 * * * * /root/datamonitoring.php >> /home/wwwlogs/datamonitoring.log
每分钟检测一次,日志保存在/home/wwwlogs/datamonitoring.log
© 本站文章随意转载,但请注明出处!
>> 如果您觉得本站文章对您有所帮助,购买 VPS 时候请走本站AFF链接!
>> 某些文章具有时效性,若内容有错误或已失效,欢迎在下方评论区留言向我们反馈.
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
THE END
暂无评论内容