intrepidity / healthcheck
简化应用外部依赖项健康检查的库
Requires
- php: >=7.2.0
- ext-json: *
- ext-pdo: *
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/log: ^1.1
- roave/security-advisories: dev-master
Requires (Dev)
- phpunit/phpunit: ^7.5
- predis/predis: ^1.1
- zelenin/http-client: ^4.0
- zendframework/zend-diactoros: ^2.1
Suggests
- predis/predis: Required to use PredisCheck
README
警告:这是一个处于开发阶段的库,可能不适合生产环境。这里可能还有一些小怪物。
健康检查
为了快速诊断应用程序中的问题,能够快速区分应用程序本身的问题和其依赖项的问题非常重要。
现代应用程序通常有多层依赖项。例如,您的应用程序使用了一个API,而这个API消耗了一个MySQL数据库。该数据库的停机几乎肯定会影响链中的第二层应用程序。
为了处理这种情况,我们需要有效的健康检查。这使我们能够快速发现我们的依赖项authentication_api(例如)已经不健康,并且该API的健康状态表明其MySQL依赖项已经离开了。
这个库旨在使处理健康检查变得稍微容易一些。
用法
健康检查由一个包含一个或多个HealthCheckInterface实例的HealthService实例组成。健康检查检查单个依赖项,然后健康服务实例报告整个集合的情况。
例如,我们可以这样初始化和执行一组检查
$healthCheck = HealthService([
new PdoCheck("dsn", "username", "password"),
new HttpStatusCheck($httpClient, $requestFactory, new Uri("http://my-endpoint"), [200])
]);
$report = $healthCheck->performAll();
报告变量随后包含一个包含所有检查结果以及一些高级摘要信息的对象。
此库自带简单的HTTP状态检查和PDO连接检查,其他检查需要手动实现。
此库严重依赖于PSR-7、PSR-17和PSR-18标准,因此通常假定您提供自己的PSR接口实现,例如请求和响应工厂。
建议
标签
每个检查的标签属性应反映正在检查的应用程序的名称。
例如,我的主应用程序可以有一个标记为authentication_api的健康检查,这可以导致某些监控系统对该特定应用程序执行查询,以确定其依赖项中哪些已经不健康,等等。这样,可以在您的组织中生成几乎自动的服务健康映射。
暴露健康检查
健康检查应该暴露在一个URL上,以便外部服务和监控系统可以访问它们。但是,建议仅将暴露的健康端点保留在您的网络内部。
可以使用ResponseFactory类轻松创建PSR-7响应,用于在健康端点中使用,如下所示
$factory = new ResponseFactory(
$psrResponseFacory,
$streamFactory,
$healthService
);
$response = $factory->create();
待办事项
以下功能仍在进行中
- PSR中间件以暴露健康信息
- 更多标准健康检查