写给自己用的,防止自己哪个服务器崩了自己都不知道。需要配合至少一个报警api使用(例如用带api的酷Q报警、调用TG机器人的api、调用阿里云api市场的短信api等)。而且使用这个程序时,如果手上的服务器遍布国内国外,链路有好有坏,就需要放在一台网络优秀的机子上或者加大超时时间、加大请求频率,否则会出现大规模诈死现象。
Github↓
线程更大更智能更精准支持更多平台的Golang版:
部署
直接扔进有php环境的服务器就行,可以放在任意目录。
放进去之后,需要编辑config.php
文件,根据注释修改密钥、超时时间和通知函数的代码。
使用
Ⅰ、添加监控
以默认值为例,添加新服务器进入监控时,需要在新服务器上设定定时任务。默认超时时间是150s,推荐定时任务设置为每分钟执行一次。想要调高精度的话,可以把两者调小(crontab最高分钟级,需要使用一些特殊手段提高频率),但是超时时间一定要比任务执行周期长。
如果使用宝塔面板的话,可以添加定时访问URL,URL为
http(s)://demo.mmxblog.com/VPS-Broker/?key=Mmx_demo&point=name
紫色部分为放置程序的域名和路径,蓝色部分为config.php
中声明的key,黄色部分为为该服务器起的别名。设定好执行时间后即可。
也可以直接使用crontab添加。
编辑crontab文件
vi /etc/crontab
然后按i
编辑,插入一行代码,以每分钟执行为例。需要更大或更小的周期请自行搜索。
* * * * * root curl http(s)://demo.mmxblog.com/VPS-Broker/?key=Mmx_demo&point=name
然后按Esc
,输入:wq
以保存。若任务没有生效,可以重新加载crontab:/etc/init.d/cron reload
。
Ⅱ、修改辨识方式
默认以ip辨识,若需以别名作为辨识主机的方式(适用于动态ip主机),可以修改config.php
,把
$s1='health_checker/'.$ip;
$s2='health_locker/'.$ip;
改为
$s1='health_checker/'.$point;
$s2='health_locker/'.$point;
多台主机别名相同时,如果前者为$point
,后者为$ip
,那么所有同别名主机超时才会触发警报,任何一台主机恢复都会触发恢复提示。即只要有一台是ok的就ok。我寻思能用到这个的大概都是大佬。
Ⅲ、暂停监控
需要在health_checker
或health_locker
目录下将相应的文件删除(默认为ip,否则为别名,详参第二点),同时删除或暂停或注释掉被监控服务器上的定时任务。
Ⅳ、通知函数的可用变量
$message
:完整的通知内容,可通过修改worker.php
修改内容。
*以下变量需在函数内声明全局变量后方可使用(global $xxx,$xxx2;
)
$ip
:被监控主机的ip。
$point
:被监控主机别名。
$tmessage
:若为恢复通知,则为宕机时间(格式化了的字符串),否则为null。
$btime
:若为恢复通知,则为宕机时间(整数,秒),否则为null。
效果截图
另外不建议使用人名做别名,否则可能有奇妙的诅咒效果。