剖析Pi-Dashboard的机制
笔者试用了一下树莓派实验室发布的一款开源的 IoT 设备监控工具Pi Dashboard (Pi 仪表盘) ,界面简洁实用,可以查看树莓派很多状态。局部界面如下:
作为做过前端bootstrap的小鲜肉来说,太熟悉这个风格了,情不自禁要看看到底怎么来监控树莓派的状态的,可以作为linux服务器监控的一种手段。
1、安装Pi Dashboard
首先安装 Nginx(或 Apache)和 PHP,笔者使用的是Apache,具体安装在这两个程序可以参考我的文章-树莓派安装LAMP,部署个人网页。
命令行进入到/var/www/html目录,此目录是web服务器目录,通过GitHub 部署pi-dashboard。
cd /var/www/html
sudo git clone https://github.com/spoonysonny/pi-dashboard.git
2、浏览器访问
浏览器输入http://ipaddress/pi-dashboard/来访问,可以查看CPU、内存、进程等实时数据。
3、源码index.php
那这些状态参数是怎么打印显示出来的呢?笔记查看index.php后发现每个参数对应$D数组的其中一个数值,index.php文件没有数组$D的具体信息,查看开头require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'device.php');
原来在device.php里面,那这个被调用的文件就是完成读取树莓派参数的功能。
4、核心device.php
文件里面有数组建立的代码$D = Array();,简单看几个参数怎么赋值$D数组的。
cpu温度赋值:(哈哈,大家可以参考我的另外文章,四种方法查看树莓派CPU温度)
if (($str = @file("/sys/class/thermal/thermal_zone0/temp")) !== false){
$D['cpu']['temp'] = $str;
}
else{
$D['cpu']['temp'] = 0;
}
cpu频率赋值,也是读取文件内容:
if (($str = @file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")) !== false){
$D['cpu']['freq'] = $str[0];
}
else{
$D['cpu']['freq'] = 0;
}
user等树莓派信息赋值,这个是通过函数赋值的。
总计一下,数组$D里面的数值是通过文件读取写入数组和php的函数赋值的。
5、改写device.php
在文件末尾加上打印的功能,直接在命令行打印出树莓派状态,开启上帝模式,就不需要web服务器apache啦 。
echo "<pre>";
print_r($D);
echo "<pre>";
添加后,修改执行权限,chmod +x device.php。
在命令行输入/usr/bin/php device.php,执行代码。
代码是按格式打印出数组$D,看看局部打印效果:
当然如果要更加好看简便,只能一个个echo数组$D里面的参数了。比如:echo "memory_total:". $D['mem']['total']."\n";更加一目了然。
6、展望一下
选择有很多linux服务器,我要用这样的方法 来监控,该怎么实现呢?我需要一个树莓派做监控服务器,上面部署监控主页面。
界面左侧可以通过列表IP显示所有服务器,点击哪个就显示哪个服务器IP的dashboard,主界面还要显示所有服务器的主要状态吧,这就需要统计服务器的状态并统一显示在主界面上。那可以在各个服务器上面的index.php里面将主要参数插入到树莓派监控服务器的数据库,树莓派监控服务器再统一调用显示。