brightmachine / scrutiny
Scrutiny 会检查您的环境,以确保您的应用程序按预期运行 - 使用 Oh Dear 或 Pingdom 进行检查
Requires (Dev)
- laravel/framework: 8.*
- orchestra/testbench: ~6.0
README
Scrutiny 帮助您的 Laravel 8 项目确保其当前服务器环境配置正确并按计划运行。
问题
您是否曾经遇到过以下情况:您已经迁移了服务器,但忘记
- 使您的队列运行?
- 添加 cron 作业来运行您的计划?
- 安装您每月使用一次的神秘程序?
- 启用您需要用于 API 的 PHP 扩展?
这就是 Scrutiny 构建要解决的问题 - 使用您已经使用的可用性监视器(如 Oh Dear 或 Pingdom)来监视您环境的其他重要方面。
这意味着您的可用性监视器会在您的服务器环境设置出现问题时通知您,而不是等待您的客户或客户告诉您有问题。
安装
要通过 composer 安装,请将以下内容添加到您的 composer.json 文件中
{
"require": {
"brightmachine/scrutiny": "~2.0"
}
}
然后从终端运行 composer install。
快速安装
可以使用以下方法简化安装说明
composer require "brightmachine/scrutiny=~2.0"
您已设置完成 - 下一步是添加您的探测器!
它如何工作
- 在
AppServiceProvider::boot()中,配置探测器以检查您的环境需要运行的所有内容 - 在 Oh Dear 或 Pingdom 中设置一个
uptime check,如果任何探测器失败,则会提醒您
如何配置不同的探测器
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { // … $this->configureScrutinyProbes(); } public function register() { } protected function configureScrutinyProbes() { \Scrutiny\ProbeManager::configure() ->connectsToDatabase() ->executableIsInstalled('composer.phar') ->queueIsRunning(30, 'high') ->queueIsRunning(60, 'low') ; } }
有哪些探测器可用
所有探测器都通过 \Scrutiny\ProbeManager 添加,并且可以链式调用
\Scrutiny\ProbeManager::configure()->scheduleIsRunning()->queueIsRunning();
以下探测器通过 \Scrutiny\ProbeManager::configure() 提供
availableDiskSpace()
确保您始终有可用空间。
它通过查找与给定文件夹相关的磁盘并检查其使用情况来实现。
public availableDiskSpace( number $minPercentage [, string $diskFolder = null ] )
$minPercentage是应可用的最小磁盘空间量$diskFolder是用于查找磁盘的文件夹。默认为存储您的 Laravel 应用的磁盘。
callback()
如果您的用例不支持开箱即用,您可以编写自己的自定义探测器。
当检查探测器时,可能出现三种结果
- 跳过 - 如果抛出
\Scrutiny\ProbeSkippedException异常 - 失败 - 如果抛出任何其他异常
- 通过 - 如果没有抛出异常
public callback( string $probeName , callable $callback )
$probeName是用于报告检查结果的探测器的名称$callback是运行您的自定义检查的回调
connectsToDatabase()
检查您是否能够连接到 config/database.php 中配置的数据库之一。
public connectsToDatabase([ string $connectionName = null ])
$connectionName是config/database.php中数据库连接的名称
connectsToHttp()
此探测器检查给定的 URL 是否会返回 2xx 响应。
注意:不会跟随重定向 - 仅考虑第一个响应。
public connectsToHttp( string $url [, array $params = array(), string $verb = 'GET' ] )
$url是要检查的 URL,它可以包含用户名和密码,例如https://user:pass@example.com$params要添加到请求中的 URL 参数数组$verb可以是GET或POST
executableIsInstalled()
此探针将在您的路径和当前 vendor/bin 中搜索特定的可执行文件。
public executableIsInstalled( string $executableName )
$executableName要查找的可执行文件名称
phpExtensionLoaded()
检查特定 PHP 扩展是否已加载。
public phpExtensionLoaded( string $extensionName )
$extensionName要检查的 PHP 扩展名称
queueIsRunning()
此探针将检查您的 Laravel 队列是否正在运行。
public queueIsRunning( [ int $maxHandleTime = 300, $queue = null, $connection = null ] )
$maxHandleTime您分配给给定队列的作业的最大运行时间(以秒为单位)$queue如果您在同一连接上运行多个队列,则这是要检查的队列名称$connection如果您运行多个连接,则这是要检查的连接,配置在config/queue.php
scheduleIsRunning()
确保 artisan 调度正在运行。
public scheduleIsRunning()
自定义探针名称
默认情况下,当 scrutiny 输出探针的详细信息(例如,如果它失败或在历史记录中)时,它会根据配置设置猜测一个名称。
如果默认名称会输出敏感信息,例如 API 密钥,那么您可能需要设置探针的名称。
public named( string $identifier )
您可以通过在设置探针后调用 ->named() 来重写名称
\Scrutiny\ProbeManager::configure() ->connectsToHttp('https://api.example.com/me?api_key=12345678900987654321') ->named('example.com API');
自定义可执行文件搜索路径
某些探针需要在磁盘上搜索特定的可执行文件。
默认情况下,scrutiny 将在您的 $PATH 环境变量中的目录以及您的 base_path() 和 vendor/bin 中搜索。
但这并不总是足够。
您可以在配置探针时将目录添加到路径中
\Scrutiny\ProbeManager::extraDirs([ '/usr/local/bin/', '/var/www/bin', ]);
本地调试
您配置的探针每分钟只能检查一次。
当首次设置探针时,这不是您想要的,因此为了在本地绕过此限制,请在 .env 文件中设置 DEBUG=true。
Artisan 命令
运行 php artisan scrutiny:check-probes 来检查探针是否通过。
此命令不受速率限制,因此在更改后立即进行测试或作为部署过程的一部分都是一个很好的方法。
命令将在成功时返回 0,在失败时返回 1。
如何配置 Oh Dear
在 Oh Dear 中配置新站点,并使用以下设置
- 在
设置(常规选项卡),指向您的域的 scrutiny URLyourdomain.com/~scrutiny/check-probes,其中 yourdomain.com 是您的生产域名 - 当出现问题时,scrutiny 将返回 HTTP 状态码
590 Some Tests Failed- 这是一个自定义代码
如何配置 pingdom
在 pingdom 中配置新的检查,并使用以下设置
- 在 pingdom 中添加一个
uptime check,以访问https://yourdomain.com/~scrutiny/check-probes,其中 yourdomain.com 是您的生产域名 - 当出现问题时,scrutiny 将返回 HTTP 状态码
590 Some Tests Failed- 这是一个自定义代码
贡献
任何贡献都以谦逊和感激的心情接受。
如果您考虑为此项目做出改进,请感谢。
流程:
- Fork, change, create pull-request
- 告诉我们您的 PR 如何/为什么将使项目受益
- 我们可能会要求您进行澄清,但我们会很快告诉您您的更改是否可能被合并
😘 Xx