sarfraznawaz2005/servermonitor

Laravel 包,用于定期监控服务器和网站的健康状态。

5.0.0 2024-02-27 18:41 UTC

README

Latest Version on Packagist Total Downloads

Laravel 服务器监控

Laravel 包,用于定期监控服务器和应用程序的健康状态。它自带了一些常见的检查,并允许您添加自己的自定义检查。该软件包提供了控制台和网页界面。

要求

  • PHP >= 8+
  • Laravel 9

安装

$ composer require sarfraznawaz2005/servermonitor

现在运行以下命令以发布软件包的配置文件

$ php artisan vendor:publish --provider="Sarfraznawaz2005\ServerMonitor\ServiceProvider"

查看 config/server-monitor.php 配置文件以自定义检查、通知等。

内置检查

该软件包自带以下检查。检查可以分为三个类别

  • 服务器检查:仅与您的服务器相关的检查。
  • 通用检查:仅与您的应用程序相关的检查,但在本质上都是通用的,无论您的应用程序在哪个环境中运行。这些检查在所有环境中运行。
  • 环境检查:仅与您的应用程序相关的检查,但仅限于特定的环境,如生产或开发。

服务器检查

  • ✅ 已安装所需的 PHP 扩展
  • ✅ 磁盘空间充足
  • ✅ 平均 CPU 使用率
  • ✅ FTP 连接正常工作
  • ✅ SFTP 连接正常工作
  • ✅ SSL 证书有效
  • ✅ 服务器可 ping 通
  • ✅ 检查 HTTP 状态码
  • ✅ 检查 php.ini 文件值

通用检查

  • ✅ 安装了正确的 PHP 版本
  • ✅ 环境文件存在
  • ✅ APP_KEY 已设置
  • ✅ 正确的目录权限
  • ✅ 数据库可访问
  • ✅ 迁移是最新的
  • ✅ Composer 依赖是最新的
  • ✅ 检查 Composer 软件包的安全性
  • ✅ 存储目录已链接
  • ✅ Redis 缓存可访问
  • ✅ 邮件工作正常
  • ✅ 云存储工作正常
  • ✅ 配置文件值正确

环境检查(开发)

  • ✅ 调试模式开启
  • ✅ 配置缓存关闭
  • ✅ 路由缓存关闭

环境检查(生产)

  • ✅ 调试模式关闭
  • ✅ 配置缓存开启
  • ✅ 路由缓存开启
  • ✅ 禁用了不必要的 PHP 扩展
  • ✅ Supervisor 程序正在运行

命令

该软件包包含两个命令

  • php artisan servermonitor:check 运行配置文件中启用的所有检查并返回它们的新状态。
  • php artisan servermonitor:status 返回之前运行的所有检查的状态,而不运行新的进程。

以下是它的样子

Screen 3

这两个命令都接受可选参数。如果指定,它将只运行指定的检查或返回指定检查的状态

  • php artisan servermonitor:check AppKeySet 运行新的检查过程以检查 AppKeySet
  • php artisan servermonitor:status AppKeySet 返回检查 AppKeySet 的之前的运行状态

定时任务

您可以使用 servermonitor:check 命令定期检查启用检查的状态,而不是每次都手动运行此命令。

根据需要在 Laravel 的控制台内核文件中安排它

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
   $schedule->command('servermonitor:check')->hourly();
}

网页界面

该软件包提供了内置的网页界面。您可以在配置文件 'route' => 'servermonitor' 中自定义网页界面的路由。完成后,您可以在网址 http://yourapp.com/servermonitor 访问网页界面。将 servermonitor 替换为您使用的路由。

除了命令之外,您还可以使用Web界面运行所有或单个检查的新检查过程。

Screen 1

Screen 2

禁用Web界面

如果您想禁用Web界面,可以将web_interface_enabled设置为false,此时访问Web界面路由将返回404。

仪表板刷新间隔

您可以通过更改config/server-monitor.php文件中的server-monitor.dashboard_refresh_interval值来刷新仪表板页面。您提供的值必须是秒数,如果您没有此配置键(例如:旧用户),不用担心,默认值为60秒。

通过编程方式运行/获取检查

如果您仍然想以自己的方式在视图中显示各种检查的状态,您可以像这样以编程方式获取所有检查的状态

use Sarfraznawaz2005\ServerMonitor\ServerMonitor;

$sm = new ServerMonitor();
$checkResults = $sm->getChecks();
dump($checkResults);

您也可以通过编程方式运行检查($sm->runChecks()),请参阅文件:vendor/Sarfraznawaz2005/ServerMonitor/src/ServerMonitor.php中的可用方法

仅Web运行检查

如果您出于某些原因只想手动和通过Web界面运行一些检查,您可以为此类检查指定web_only选项,如下所示

\Sarfraznawaz2005\ServerMonitor\Checks\Server\RequiredPhpExtensionsAreInstalled::class => [
    'web_only' => true
],

现在,当运行servermonitor:check时,上述检查将不会通过控制台运行。然而,当您通过Web界面运行所有检查时,此检查将执行。

自定义

有关所有检查的详细信息,请参阅config/server-monitor.php文件。请注意,一些检查是故意注释掉的,如果您需要使用它们,可以取消注释。

您还可以通过传递name配置值来自定义在控制台/Web界面中显示的检查名称

\Sarfraznawaz2005\ServerMonitor\Checks\Application\AppKeySet::class => [
    'name' => 'Check if APP_KEY is set',
],

如果您没有传递name键,它将自动从类名转换为,在上面的例子中是从“PascalCase”转换为“Pascal Case”。

一些检查可能需要额外的配置选项,例如

\Sarfraznawaz2005\ServerMonitor\Checks\Application\ComposerDependenciesUpToDate::class => [
    'binary_path' => 'composer'
],

为了使上述检查正常工作,您必须提供binary_path值,例如。

警报配置

当检查失败时,您可以收到通知。此包支持以下警报/通知通道

  • mail
  • log
  • slack
  • pushover

在配置文件中的notifications选项下更新您的通知选项。

请注意,您还可以为单个检查自定义所有通知选项。例如,您已指定mail作为警报的默认通道,但对于以下检查,它将通过log通道发出警报,并具有不同的警报标题。

\Sarfraznawaz2005\ServerMonitor\Checks\Application\AppKeySet::class => [
    'notification_channel' => 'log',
    'notification_title' => 'Hello World'
]

您也可以像这样为单个检查禁用警报

\Sarfraznawaz2005\ServerMonitor\Checks\Application\AppKeySet::class => [
    'disable_notification' => true
]

创建您自己的自定义检查

您可以通过实现Sarfraznawaz2005\ServerMonitor\Checks\Check接口并将类添加到配置文件中来创建自定义检查。示例

use Sarfraznawaz2005\ServerMonitor\Checks\Check;

class MyCheck implements Check
{
    /**
     * Perform the actual verification of this check.
     *
     * @param array $config
     * @return bool
     */
    public function check(array $config): bool
    {
        return 1 === 1;
    }

    /**
     * The error message to display in case the check does not pass.
     *
     * @return string
     */
    public function message(): string
    {
        return "This error message that users see if check returns false.";
    }
}

问题

如果您注意到任何问题,我们建议为现有或新检查提交PR。

没有测试?

我们欢迎为测试案例提交PR。

鸣谢

许可证

有关更多信息,请参阅许可证文件