Steins;Lab

某团的自留研究所

[趴会儿Project]No.004 洞察秋毫的观测者 - 服务器监控助手(基于PHP探针和Raspberry Pi)

用Python爬虫抓取PHP探针提供的实时信息,比如网速、负载、内存信息等等,然后显示在1602显示屏上。让你随时监控服务器

关键词:PHP探针、服务器监控、VPS监控、Python、树莓派、Raspberry Pi、1602。

本项目隶属于趴会儿Project项目组,详见[企划]趴会儿Project–宿舍床上趴到底&解放双腿计划

项目编号004,分类为信息/监控。

thumb

 

 

0.序言

我的ipv6代理服务器很受欢迎,因此按需求来讲,我需要一个能实时监控流量的工具。PHP探针作为一个很方便的工具,成为了我的选择。但是自带的web界面对我来说不是很方便。

玩了一假期的树莓派,之前做项目剩了很多1602屏幕。它们之间的组合,就有了今天的作品。

服务器监控助手,基于PHP探针和Raspberry Pi。用Python爬虫抓取PHP探针提供的实时信息,比如网速、负载、内存信息等等,然后经过处理,显示在1602显示屏上。让你随时监控服务器网速。服务器down掉了也能一秒发现。

又到了激动人心的命名环节了。不用考虑那么多,名字我早想好了

《洞察秋毫的观测者》——基于PHP探针和树莓派的服务器监控助手

 

 

1.PHP探针

使用PHP探针是有理由的,不光是因为MJJ最喜欢以针会友,也是因为对于一个有LNMP环境的服务器,上一个探针并不会带来多少性能损失。因此,准备PHP探针既方便,又合适。

我也做了一个提前预备,探索了一下雅黑PHP探针的结构,尝试用爬虫抓取了一下。

详细笔记参见:

[学习笔记]利用PHP探针和Python爬虫监控服务器状态–https://steinslab.xyz/archives/1144

这里调出一些骨架内容。

 

1.1 关于PHP探针

关于PHP探针,给不知道的读者说道说道。

雅黑实验室  –  http://www.yahei.net/

【雅黑PHP探针】
雅黑PHP探针最大的优点:每秒更新,不用刷网页。有一个负责的站长,会对探针进行长期支持和更新。
用于Linux系统(不推荐使用于Windows系统)。
可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息,1秒钟刷新一次。
以及包括服务器IP地址,Web服务器环境监测,php等信息。

php探针对于经常购买VPS折腾的人肯定不陌生,简单地老说就是一个可以获取系统信息并在网页上显示的php程序。雅黑PHP探针的界面如下:

我一个Digitalocean服务器上挂的演示探针:  http://sfo01.misaka.cc:888/tz.php

因此,经常有人买各种廉价小内存的VPS,只能挂个探针,却因此获得巨大快感,并从bbs上交流。叫做以针会友。

 

1.2 分析

具体的分析方法请参见笔记:

[学习笔记]利用PHP探针和Python爬虫监控服务器状态–https://steinslab.xyz/archives/1144

 

1.3 服务器返回json

这个探针,在前端使用ajax每秒向服务器请求数据,请求的url为:

http://sfo01.misaka.cc:888/tz.php?act=rt

服务器会返回一个json数据,用于解析计算,在前端显示服务器负载网速信息等。返回的json其实多了小括号,示例如下:

爬虫的思路也清晰了。

 

 

 


2 Python爬虫

Python爬虫的简易教程我参考了:

Python爬虫教程 – 崔庆才的个人博客

文章简洁精悍。没多少字,简单带过后,了解了爬虫运用的一些思想。

我的探索笔记见:

[学习笔记]利用PHP探针和Python爬虫监控服务器状态–https://steinslab.xyz/archives/1144

 

最后的爬虫代码(Python3):

运行一下:

确实得到了一个包含数据的字典。

这里注意一下。字典中”speed”的值为一累计数,在后来的数据处理用,需要算出差值,在本机估算网速。

 


 

3.使用1602液晶屏

3.1 1602及接口定义

16是指一行显示16个字符,02表示2行。1602是一种非常常见的、在DIY和工业中广泛使用的显示期间。价格低,可以选用各种颜色的背光,字符颜色也是可选的。

 

这里不是i2c接口的1602显示屏。

1602的引脚定义如下:

  1. VSS,接地
  2. VDD,接5V电源
  3. VO,液晶对比度调节,接电位器中间的引脚
  4. RS,寄存器选择
  5. RW,读写选择
  6. EN,使能信号
  7. D0,数据位0,4位工作模式下不用,不接
  8. D1,数据位1,4位工作模式下不用,不接
  9. D2,数据位2,4位工作模式下不用,不接
  10. D3,数据位3,4位工作模式下不用,不接
  11. D4,数据位4
  12. D5,数据位5
  13. D6,数据位6
  14. D7,数据位7
  15. A,液晶屏背光+,接5V
  16. K,液晶屏背光-,接地

 

3.2 Raspberry Pi 3B 的引脚定义

该图是型号3b的引脚定义图。之前也是图不对被坑了好久。注意在以下Python代码中,接口号码指的是“GPIO”代号

 

3.3 Adafruit的charLCD库

Adafruit系列的库是我比较喜欢的库,好用,简洁易懂!

https://github.com/adafruit/Adafruit_Python_CharLCD

下载后在树莓派上安装时,注意:

需要注意python命令默认代表的Python版本号。我的树莓派,“python”这条命令默认指的是Python2。因此,我需要运行

 

3.4 点亮1602和运行示例代码

来看一下charLCD库的示例代码:

用起来感觉和Arduino一样。

已经很清楚了,主要是注意,数字代表GPIO接口。

ok,我找到正确的GPIO参照图后,成功点亮。

 

 

 


4.最终组合

先贴出来完整代码

  1. 主函数,前四行类似于Arduino中的setup(),只运行一次初始化。然后进入大循环。
  2.  myserver.getSpeed()返回值为字符串,需要转化成float。
  3. 计算网速,用了两次time.time获取时间戳,然后再相除换算得到具体网速。鉴于本地和服务器延迟基本稳定,此方法比较准确。
  4. "%.3f"%(d/1024/t)保留3位小数
  5. 面向对象的设计模式意识浅薄,多多包涵

运行,成功!

 

 

 


5.包装及最终效果

包装见:

残念系手工艺人:手把手教你用湿巾盒DIY树莓派外壳 — https://steinslab.xyz/archives/1151

 

最终效果:

 

6.结语

假期学了一点点Python,玩了树莓派。在学期初真真正正用树莓派做出了一个符合自己需求的东西。

树莓派真的好玩,我突然发现我对Linux的理解更深了,一些日常操作也不在话下了。

树莓派真好玩儿,您得来一个。

点赞
  1. largercode说道:
    Google Chrome 62 Google Chrome 62 Windows 7 Windows 7

    :razz: 可以告诉我你是直接接线LCD 1602的么,一级萌新表示按照example里面接无法点亮。

    1. SPtuan说道:
      Google Chrome 64 Google Chrome 64 Windows 10 Windows 10

      抱歉这么长时间忙,没有上博客,没有及时回复。我是直接接的LCD1602,但是线已经拆了。不过之前我曾因为Adafruit的Python库版本问题无法点亮,可以考虑下库的版本,希望能帮到你

  2. Gaby说道:
    Google Chrome 45 Google Chrome 45 Windows 7 Windows 7

    膜!

    1. SPtuan说道:
      Google Chrome 56 Google Chrome 56 Windows 10 Windows 10

      最近怎么多了一堆魔法师 :neutral:

  3. lionel说道:
    Google Chrome 57 Google Chrome 57 GNU/Linux GNU/Linux

    :sad:

  4. 萝莉说道:
    Google Chrome 56 Google Chrome 56 Mac OS X 10.12 Mac OS X 10.12

    大神,收下膝盖

    1. SPtuan说道:
      Google Chrome 56 Google Chrome 56 Windows 10 Windows 10

      使不得,使不得

  5. Sang说道:
    QQbrowser QQbrowser Android 7.0 Android 7.0

    团长狠

    1. SPtuan说道:
      Google Chrome 56 Google Chrome 56 Google Chrome OS Google Chrome OS

      使不得

发表评论

电子邮件地址不会被公开。 必填项已用*标注