generationtux/healthz

PHP应用的健康检查。

v3.5.1 2023-03-20 22:40 UTC

README

Build Test Status Code Climate Test Coverage

PHP Healthz

带有内置Laravel支持的PHP应用健康检查。

轻松了解您应用程序的健康状况!为负载均衡器或您自己的理智实现健康检查端点。附带可选UI和预配置的检查,您可以使用,并可扩展以添加自定义健康检查到堆栈中。

设置

$ composer require generationtux/healthz

Laravel < 5.4

(以下内容与Lumen兼容,存在一些差异)

添加将注册默认健康检查和路由的服务提供者

// config/app.php
'providers' => [
    Illuminate...,
    Gentux\Healthz\Support\HealthzServiceProvider::class,
]

您应该能够访问 /healthz/ui 来查看默认的Laravel健康检查,或者运行 php artisan healthz 来获得CLI视图。

为了向UI页面添加基本认证,设置环境变量 HEALTHZ_USERNAMEHEALTHZ_PASSWORD。即使UI有基本认证,简化版的 /healthz 端点也将始终可用,以响应负载均衡器和其他自动检查的请求。

为了自定义健康检查,只需在您的应用程序服务提供者(可能是 app/Providers/AppServiceProvider.php)中注册 Gentux\Healthz\Healthz 来构建自定义Healthz实例。

use Gentux\Healthz\Healthz;
use Illuminate\Support\ServiceProvider;
use Gentux\Healthz\Checks\General\EnvHealthCheck;
use Gentux\Healthz\Checks\Laravel\DatabaseHealthCheck;

class AppServiceProvider extends ServiceProvider
{
        public function register()
        {
                $this->app->bind(Healthz::class, function () {
                        $env = new EnvHealthCheck();
                        $db = new DatabaseHealthCheck();
                        $db->setConnection("non-default");

                        return new Healthz([$env, $db]);
                });
        }
}

有关配置可用检查的更多信息

通用PHP

构建健康检查实例

<?php
use Gentux\Healthz\Healthz;
use Gentux\Healthz\Checks\General\MemcachedHealthCheck;

$memcached = (new MemcachedHealthCheck())->addServer("127.0.0.1");
$healthz = new Healthz([$memcached]);

运行检查并查看结果

// @var $results Gentux\Healthz\ResultStack
$results = $healthz->run();

if ($results->hasFailures()) {
        // oh no
}

if ($results->hasWarnings()) {
        // hmm
}

foreach ($results->all() as $result) {
        // @var $result Gentux\Healthz\HealthResult
        if ($result->passed() || $result->warned() || $result->failed()) {
                echo "it did one of those things at least";
        }

        echo "{$result->title()}: {$result->status()} ({$result->description()})";
}

获取UI视图

$html = $healthz->html();

检查配置

HTTP

创建一个新的Guzzle请求并将其传递给HTTP健康检查的构造函数。

use GuzzleHTTP\PSR7\Request;
use Gentux\Healthz\Checks\General\HttpHealthCheck;

$request = new Request("GET", "http://example.com");
$httpCheck = new HttpHealthCheck($request);

您可以传递预期的响应状态码(默认为 200),以及Guzzle客户端选项。

$httpCheck = new HttpHealthCheck($request, 204, [
        "base_url" => "http://example.com",
]);

Memcached

创建一个新的Memcached健康检查并使用 addServersetOptions 方法。

use Gentux\Healthz\Checks\General\MemcachedHealthCheck;

$memcachedCheck = new MemcachedHealthCheck();
$memcachedCheck->addServer($server, $port = 11211, $weight = 0);
$memcachedCheck->setOptions([]);

有关选项信息,请参阅 Memcached setOptions

调试

设置环境变量以检查应用程序是否在调试模式下运行。如果此检查失败,则发出警告。

use Gentux\Healthz\Checks\General\DebugHealthCheck;

$debugCheck = new DebugHealthCheck("APP_DEBUG");

在这种情况下,如果 APP_DEBUG == 'true',则此检查将发出警告。

环境

提供一个环境变量名称来检查应用程序的环境。如果找到提供的env名称,则检查将始终成功并简单地输出名称。如果没有设置环境变量,则检查将发出警告。

use Gentux\Healthz\Checks\General\EnvHealthCheck;

$envCheck = new EnvHealthCheck("APP_ENV");

数据库(Laravel)

此将使用Laravel内置的数据库服务来验证连接性。您可以选择设置要使用的连接名称(如果没有提供,则使用默认值)。

use Gentux\Healthz\Checks\Laravel\DatabaseHealthCheck;

$dbCheck = new DatabaseHealthCheck();
$dbCheck->setConnection("my_conn"); // optional

队列(Laravel)

队列健康检查目前支持 syncsqs 队列。您可以设置要使用的队列名称(如果没有指定,则使用默认值)。

use Gentux\Healthz\Checks\Laravel\QueueHealthCheck;

$queueCheck = new QueueHealthCheck();
$queueCheck->setName("my_queue"); // optional

自定义检查

注意:检查可能有三种状态之一(successwarningfailure)。成功和警告的组合以及整个堆栈将被视为成功。然而,任何单个失败都将使整个堆栈被视为失败。

要创建自定义健康检查,您应该扩展Gentux\Healthz\HealthCheck并实现一个抽象方法run()

<?php

use Gentux\Healthz\HealthCheck;

class MyCustomCheck extends HealthCheck
{
        /** @var string Optionally set a title, otherwise the class name will be used */
        protected $title = "";

        /** @var string Optionally set a description, just to provide more info on the UI */
        protected $description = "";

        public function run()
        {
                // any exception that is thrown will consider the check unhealthy
        }
}

如果没有抛出异常,则假定检查已成功。否则,异常的消息将被用作失败检查的status

public function run()
{
    throw new Exception('Heres why the check failed.');
}

如果您希望检查显示warning而不是完全失败,请抛出一个Gentux\Healthz\Exceptions\HealthWarningException实例。

use Gentux\Healthz\Exceptions\HealthWarningException;

public function run()
{
    throw new HealthWarningException("The check didn't fail, but here ye be warned.");
}

贡献

您需要什么

启动开发环境

docker-compose up -d

进入容器

docker-compose exec app bash

Composer安装

composer install

运行测试

./vendor/bin/phpunit

最后

修改您的代码,并在此更改周围添加任何必要的测试。然后向generationtux存储库提交一个pull request。