posixpascal / spark-alarm
简单易用的服务器监控库,带有自定义警报和通知。
Requires
- php: >=7.1.0
- phpunit/phpunit: 6.1.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-29 01:07:30 UTC
README
Spark是一个非常简单的监控工具,具有非常灵活的架构。您可以创建自定义警报,在您代表的情况下触发,并发送自定义通知。实现细节是有意为之的简约风格,以便Spark适应您的平台。
它被设计成既可以作为一个CLI应用程序,也可以作为一个常规的shell脚本,这样您就可以添加一个cronjob,在您需要时运行Spark。
它也与许多低价VPS托管商提供的"cronjob工具"兼容,在这些托管商那里,您只能通过URL调用远程PHP脚本。
如果您需要自定义服务器监控、自定义通知,或者您被绑定在低价VPS托管商那里 – Spark正是您所需要的。
安装
使用composer安装
composer require "posixpascal/spark-alarm"
使用方法
Spark遵循自定义Alarm类概念,这些类包含一个简单的test()方法和可选的错误/成功处理器。一旦您有了自己的警报类,您可以将其添加到Spark实例中并运行它。
<?php use Spark\SparkAlarm; use Spark\Spark; class AlertIfCPULoadIsHigh extends SparkAlarm { public function test(){ return !($this->getCPULoadAverage() > 80); // not higher than 80 } } class AlertIfCPULoadIsSuperHigh extends SparkAlarm { public function test(){ return !$this->getCPULoadAverage() > 95; // not higher than 95 } public function error(){ // CPU is above 95% mail("posixpascal@gmail.com", "CPU for server is above 95%", "Be aware, your CPU resources are low..."); } } $spark = new Spark(); $spark ->addAlarm(new AlertIfCPULoadIsHigh()) ->addAlarm(new AlertIfCPULoadIsSuperHigh()) ->run();
现在将此脚本添加到您的crontab文件中,您就已经添加了第一个服务器监控工具。
以下是一个检查特定网站是否可访问的警报
<?php use Spark\SparkAlarm; use Spark\Spark; class AlertIfWebsiteNotReachable extends SparkAlarm { public function test(){ $ch = curl_init("https://google.de"); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return !$response; } public function success(){ // website is reachable, lets log it or do sth else. } public function error(){ // website if off, mail here or let notifier handle the rest. } } $spark = new Spark(); $spark ->addAlarm(new AlertIfWebsiteNotReachable()) ->run();
如果您想定期检查警报,您可以告诉Spark像这样保持其存活
<?php $spark ->addAlarm(new AlertIfCPULoadIsHigh()) ->addAlarm(new AlertIfCPULoadIsSuperHigh()) ->keepAlive(true) ->run();
现在该脚本将定期检查您的警报,并在任何条件失败时通知您。默认情况下,Spark在每个警报检查后暂停5分钟,您可以通过向spark实例传递->interval(<seconds>)来更改此延迟。
在每次运行结束时,spark将使用所谓的Notifier来通知您测试结果,默认情况下,内置的Notifier仅将失败的警报记录到控制台,但您可以轻松地编写自己的Notifier,如下面的示例所示
<?php use Spark\Notifier; use Spark\AlarmStatus; class MyCustomNotifier implements Notifier { /** * in this example I build a string summary and publish it to a logfile. * @param $alarms array holds every failed alarm class, you can attach custom functions to your alarmclass as well. */ public function send(array $alarms){ $str = "Test results:\n"; foreach ($alarms as $alarm){ if ($alarm->status == AlarmStatus::SUCCESS){ $str .= get_class($alarm).": executed successfully @".date("Y-m-d H:i:s"); } else { $str .= get_class($alarm).": failed @".date("Y-m-d H:i:s"); } $str .= "\n"; } file_put_contents("/var/log/spark.log", $str); } } $spark ->notifier(new MyCustomNotifier()) ->run();
如前所述,Spark仅将失败的警报传递给Notifier,如果您想接收所有警报,您可以选择全局设置如下
$spark->sendNotificationOnSuccess(true)
或者在单个警报中通过设置sendNotificationOnSuccess为true
<?php use Spark\SparkAlarm; class AlertIfCPULoadIsHigh extends SparkAlarm { public $sendNotificationOnSuccess = true; }
如果您正在使用->keepAlive运行检查,您可能不希望Notifier发送摘要。您还可以使用->throttle(<seconds>)方法设置notifier之间的最小延迟。
使用throttle和interval,您可以保持检查警报并按指定间隔执行其错误函数,但仅在throttle后发送通知。
我通常这样使用它
$spark ->throttle(60 * 60) // send summaries of failed alerts every hour ->interval(60) // execute alarm tests every minute
由于您可以在Notifier类中访问失败的警报,您可以构建相当详细的摘要,例如,您不仅可以将服务器1的CPU使用率超过95%通知用户,还可以通过将此类方法添加到警报并在Notifier中调用它来列出消耗最多CPU的进程。
助手
SparkAlarm是警报的基类,包括许多获取系统资源的实用方法。这些方法仅在Linux机器上工作,但并非您的警报工作所必需。它们包括
<?php interface SparkAlarmHelper { // cpu public function getCPULoadAverage(); // disk space public function getFreeDiskSpace(); public function getTotalDiskSpace(); public function getFreeDiskSpaceInPercentage(); // memory public function getTotalMemory(); public function getFreeMemory(); public function getFreeMemoryInPercentage(); }
为什么
为了一个个人项目,我需要一个可靠的服务器监控工具,并且我不想为任何现有的解决方案付费。GitHub上的大多数服务器监控工具都包括诸如统计信息、数据库设置、管理后端等功能,这些功能对于小型个人网站来说太沉重了。
待办事项
我将来想实现许多功能,但我个人在这个库上投入不多。目前它相当简陋,但我计划在需要时添加以下功能
- 默认添加带有良好模板的邮件通知器
- 为内置SparkAlarm Helper添加Windows和mac支持
- 可选使警报依赖于另一个
- 默认情况下保留日志文件
许可协议
MIT 协议