该包检查应用程序资源是否正常运行,并创建一个服务状态面板。其主要有以下几点:
Heath 为以下服务预先配置了资源检查器:
但是您可以添加您需要的任何其他内容,您只需找到合适的检查器即可使用,或者只需为您的资源创建一个新的检查器。
如果您有很多网站需要检查,您可以使用 HealthPanel 检查器创建一个 Health Monitor 应用程序来检查所有远程监视器并创建一个仪表板来汇总所有网站的状态。
创建新的资源监视器很简单,只需在应用程序的 config/health 文件夹中创建一个新的 YAML 文件即可。以下是一些示例:
name: S3
abbreviation: s3
checker: PragmaRXHealthCheckersCloudStorageChecker
notify: true
driver: s3
file: pragmarx-health-s3-testfile.txt
contents: {{ str_random(32) }}
error_message: 'Amazon S3 connection is failing.'
column_size: 4
name: NginxServer
abbreviation: ngnxsrvr
checker: PragmaRXHealthCheckersProcessChecker
command: 'pgrep %s'
method: process_count
process_name: nginx
instances:
minimum:
count: 4
message: 'Process "%s" has not enough instances running: it has %s, when should have at least %s'
maximum:
count: 8
message: 'Process "%s" exceeded the maximum number of running instances: it has %s, when should have at most %s'
notify: true
pid_file_missing_error_message: 'Process ID file is missing: %s.'
pid_file_missing_not_locked: 'Process ID file is not being used by any process: %s.'
column_size: 4
如果您有很多服务需要检查,您可以更改默认面板设计以使用更少的空间:
将鼠标悬停在出现故障的资源上并立即访问错误消息:
单击资源按钮,您将收到一条显示错误消息的警报:
以下是通过 Slack 发送的通知的示例:
下面的运行状况检查命令还会返回标准格式的退出代码:
数值 | 服务状态 | 状态说明 |
---|---|---|
0 | 好的 | 服务并且似乎运行正常 |
1 | 警告 | 检查运行正常,但高于某些“警告”阈值 |
2 | 批判的 | 检查检测到的服务未运行或高于“临界”阈值 |
3 | 未知 | 服务检查的设置可能配置错误并阻止执行检查 |
使用命令health:panel
在控制台中查看服务的状态。
使用命令health:check
检查所有资源并发送故障通知。
安装后您将可以访问以下路由:
主面板路线。
返回一个 json,其中包含包所知道的有关您的服务的所有信息:
返回包含所有服务状态的字符串,在使用其他监控服务时很有用:
hlthFAIL-dbFAIL-filesystemOK-frmwrkOK-httpOK-httpsOK-mailOK
返回包含有关特定服务的信息的 json:
使用 Composer 来安装它:
composer require pragmarx/health
将服务提供商添加到您的config/app.php
:
PragmaRXHealthServiceProvider::class,
php artisan vendor:publish --provider="PragmaRXHealthServiceProvider"
http://yourdomain.com/health/panel
几乎所有东西都可以在这个包中轻松配置:
一些检查器需要您配置正确的二进制路径才能使检查器工作:
'services' => [
'ping' => [
'bin' => env('HEALTH_PING_BIN', '/sbin/ping'),
],
'composer' => [
'bin' => env('HEALTH_COMPOSER_BIN', 'composer'),
],
],
要通过 Slack 接收通知,您必须设置传入 Webhooks 并使用 Webhook 将此方法添加到您的用户模型中:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return config('services.slack.webhook_url');
}
当健康结果被缓存时,您可以通过在 url 中添加?flush=true
来刷新缓存以使其再次处理所有资源:
http://yourdomain.com/health/panel?flush=true
如果您更喜欢构建自己的通知系统,您可以禁用它并监听以下事件
PragmaRXHealthEventsRaiseHealthIssue::class
广播检查器是通过 ping 和 pong 系统完成的。广播检查器将 ping 您的服务,并且它必须返回。基本上你需要做的是回调带有一些数据的 url:
var request = require('request');
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('pragmarx-health-broadcasting-channel');
redis.on('message', function (channel, message) {
message = JSON.parse(message);
if (message.event == 'PragmaRX\Health\Events\HealthPing') {
request.get(message.data.callbackUrl + '?data=' + JSON.stringify(message.data));
}
});
server.listen(3000);
<!DOCTYPE html>
<html>
<head>
<title>Pusher Test</title>
<script src="https://js.pusher.com/3.2/pusher.min.js"></script>
<script>
var pusher = new Pusher('YOUR-PUSHER-KEY', {
encrypted: true
});
var channel = pusher.subscribe('pragmarx-health-broadcasting-channel');
channel.bind('PragmaRX\Health\Events\HealthPing', function(data) {
var request = (new XMLHttpRequest());
request.open("GET", data.callbackUrl + '?data=' + JSON.stringify(data));
request.send();
});
</script>
</head>
<body>
Pusher waiting for events...
</body>
</html>
$ generalHealthState = app ( ' pragmarx.health ' )-> checkResources ();
// or
$ databaseHealthy = app ( ' pragmarx.health ' )-> checkResource ( ' database ' )-> isHealthy ();
检查 artisan 命令示例:
Artisan::command('database:health', function () {
app('pragmarx.health')->checkResource('database')->isHealthy()
? $this->info('database is healthy')
: $this->info('database is in trouble')
;
})->describe('Check database health');
由于 SensioLabs Security Checker 软件包已被废弃,该检查器现在依赖于 local-php-security-checker。您需要在服务器或容器上编译或安装它才能使用此检查器,并相应地更新config/resources/SecurityChecker.yml
文件。
要在 Lumen 上使用它,您可能需要在bootstrap/app.php
上执行以下操作:
$app->instance('path.config', app()->basePath() . DIRECTORY_SEPARATOR . 'config');
$app->instance('path.storage', app()->basePath() . DIRECTORY_SEPARATOR . 'storage');
$app->withFacades();
$app->singleton('IlluminateContractsRoutingResponseFactory', function ($app) {
return new IlluminateRoutingResponseFactory(
$app['IlluminateContractsViewFactory'],
$app['IlluminateRoutingRedirector']
);
});
$app->register(PragmaRXHealthServiceProvider::class);
$ composer test
安东尼奥·卡洛斯·里贝罗
Health 根据 BSD 3-Clause License 获得许可 - 有关详细信息,请参阅LICENSE
文件
拉取请求和问题非常受欢迎。