站点图标 Linux-技术共享

通过SolusVM的API对VPS进行流量进行监控

多数VPS提供的是SolusVM面板,该面板提供有API,可以监控VPS的运行信息以及进行重启、关机、开机等操作。

而一般我们需要对vps进行流量监控,跑超了玩意扣费或者进行准备工作

平时想看一下VPS信息的时候,要找一下开通邮件,然后点开面板地址,再把用户名和密码复制进去,好麻烦。

原本我是想自己写一个php的程序,刚开始写就发现有现成的,就直接拿来用了。不是我不尊重版权,我只记得这个程序是开源的,而悲剧的是文件里面没有写版权信息,所以我根本找不到是哪来的……

使用方法,分两步:

1,在SolusVM面板启用API,并且生成鉴权信息:

2,在监控PHP程序里填写这些信息就好了:

怎么填写我就不罗嗦了,我在里面写了注释的,足够简单了。

注意,信息可能显示的有问题,有时候呢,某些服务商或者间歇性的可能看不到内存和硬盘使用情况,主要是看个带宽使用情况,以及有时候重启一下比较方便。有兴趣的也可以自己根据api进行功能扩展。

下载地址:

SolusVM-服务器状态-PHP   下载地址:https://linuxword.com/wp-content/uploads/2022/05/SolusVM-服务器状态-PHP.zip

怎么填写我就不罗嗦了,我在里面写了注释的,足够简单了。

注意,信息可能显示的有问题,有时候呢,某些服务商或者间歇性的可能看不到内存和硬盘使用情况,主要是看个带宽使用情况,以及有时候重启一下比较方便。有兴趣的也可以自己根据api进行功能扩展。

本程序对上个主题进行修改,只展示流量,并且可以对对个vps进行设置,只要使用solusvm生成API的都可以,并且将流量超过70%的进行黑色展示,防止流量超了,这样可以比较方便的监控VPS的流量情况,如果需要进行利用API进行多个管理,可以查看solusVMmanager

代码比较简单,如果需要多个功能可以自己写,例如超过发邮件什么的,但是定时执行下就可以

<?php

$lists = array(
array("替换为API Key","替换为API Hash","替换为你的主机供应商SoluSVM地址", "备注1")
//多个可以拷贝上面,最后一个不加逗号,其他加即可
);

foreach($lists as $key ){
$result[] = post($key[0] , $key[1] , $key[2], $key[3]);
}

function humanFileSize($size, $unit="") {
if( (!$unit && $size >= 1<<30) || $unit == "GB")
return number_format($size/(1<<30),2)." GB";
if( (!$unit && $size >= 1<<20) || $unit == "MB")
return number_format($size/(1<<20),2)." MB";
if( (!$unit && $size >= 1<<10) || $unit == "KB")
return number_format($size/(1<<10),2)." KB";
return number_format($size)." bytes";
}

function post($keys , $hashs, $naserurls ,$beizhu) {

$postfields["key"] = $keys;
$postfields["hash"] = $hashs;
$postfields["action"] = "info";
$masterurl = $naserurls;
$postfields["status"] = "true";
$postfields["hdd"] = "true";
$postfields["mem"] = "true";
$postfields["bw"] = "true";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "{$masterurl}/api/client/command.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect: "));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// Execute the request

$data = curl_exec($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if($code != 200) {
$return['error'] = 1;

if($code == 405) {
$return['message'] = "Incorrect API credentials.";
return $return;
}

$return['message'] = "Invalid status code.";

return $return;
}

// Close the Curl handle

curl_close($ch);

if(!$data) {
$return['error'] = 1;
$return['message'] = "Error connecting to API.";

return $return;
}

// Extract the data

preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $match);

$result = array();
$result['bz'] = $beizhu;
foreach ($match[1] as $x => $y) {
$result[$y] = $match[2][$x];
}
//获取出错
if($result['status'] == "error") {
$result['error'] = 1;
$result['message'] = $result['statusmsg'];

return $result;
}
//获取正常
$result['error'] = 0;

$result['hdd'] = explode(",", $result['hdd']);
$result['mem'] = explode(",", $result['mem']);
$result['bw'] = explode(",", $result['bw']);
return $result;
}

 

?>

<?php foreach($result as $key ){
//var_dump($key);
?>
<div <?php if($key['bw'][3] >60){ ?>style="background:#000; color:#FFF"> <?php }?>
<h3>备注:<?php echo $key['bz']; ?> 带宽 <small> 已用 <?php echo humanFileSize($key['bw'][1]); ?> , 总量 <?php echo humanFileSize($key['bw'][0]); ?> ,比例 :<?php echo $key['bw'][3]; ?>%</small></h3>
<div>
<?php } ?>

 

 

 
 
退出移动版