pragmarx / health
Laravel 服务器与应用健康监控与通知器
Requires
- php: >=7.3
- ext-json: *
- illuminate/support: >=8.0
- phpunit/php-timer: ^1.0|^2.0|^3.0|^4.0|^5.0
- pragmarx/yaml: >=0.1
Requires (Dev)
- docusign/esign-client: >=2.0
- guzzlehttp/guzzle: >=6.0
- laravel/framework: 9.*
- laravel/laravel: >=8.0
- nesbot/carbon: >=1.34
- orchestra/testbench: 5.*|6.*|7.*
- phpunit/phpunit: >=6.5
- predis/predis: >=1.0
Suggests
- docusign/esign-client: >=2.0
- guzzlehttp/guzzle: >=6.0
- league/flysystem-aws-s3-v3: >=1.0
- predis/predis: >=1.0
- sensiolabs/security-checker: >=4.1
- spatie/ssl-certificate: >=1.0
- dev-master
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.6
- v1.1.5
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.2
- v1.0.1
- v1.0.0
- v0.11.1
- v0.11.0
- v0.10.4
- v0.10.3
- V0.10.2
- v0.10.1
- v0.10.0
- v0.9.18
- v0.9.17
- v0.9.16
- v0.9.15
- v0.9.14
- v0.9.13
- v0.9.12
- v0.9.11
- v0.9.10
- v0.9.9
- v0.9.8
- v0.9.7
- v0.9.6
- v0.9.5
- v0.9.0
- v0.4.0
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-dependabot/composer/laravel/framework-11.star
- dev-fix/empty-elapsed-time
- dev-dependabot/add-v2-config-file
- dev-feature/add-total-time-to-console-panel
- dev-feature/ssl-certificates
- dev-feature/debug-mode-production-only
- dev-pr-220
- dev-feature/improve-routes-speed
- dev-feature/add-checkout-com-checker
- dev-feature/refactor-security-check
- dev-analysis-lZE6Jk
- dev-fix/security-issues
- dev-fix/timer
- dev-fix/remove-composer-lock
- dev-materialdesign
This package is auto-updated.
Last update: 2024-09-10 08:28:18 UTC
README
Laravel 服务器与应用健康监控与通知器
本包检查应用资源是否按预期运行,并创建服务状态面板。以下是其主要特点
- 高度可扩展和可配置:您可以非常容易地创建新的检查器和通知器,并且几乎可以更改其上的任何内容。
- 易于配置:使用 YAML 作为配置文件
- 弹性资源检查器:如果框架正在运行且至少有一个通知渠道,您应该会收到通知消息。
- 内置通知系统:通过邮件、Slack、Telegram 或其他任何您需要的方式获取通知。
- 提供以下路由:面板、JSON 结果、字符串结果和资源。
- 可配置的面板设计。
- 缓存。
- 安排检查,在服务失败时自动接收通知。
- 在面板中直接查看应用错误消息。
- 错误时返回 HTTP 响应代码 200 和 500,以跟踪像 Envoyer 这样的应用的健康状态。
内置资源
Heath 为以下服务预配置了资源检查器
- Adyen
- AppKey
- APIs
- 广播
- 缓存
- 配置缓存
- 证书
- Checkout.com
- 数据库
- 调试模式
- 目录权限
- 磁盘空间
- DocuSign
- ElasticsearchConnectable
- EnvExists
- 文件系统
- 框架
- HealthPanel
- Horizon
- Http
- Https
- LaravelServices
- 延迟
- 本地存储
- 邮件
- MailgunConnectable
- MemcachedConnectable
- 迁移更新
- MixManifest
- MySql
- MySqlConnectable
- NewrelicDeamon
- NginxServer
- 包更新
- PHP
- PostgreSqlConnectable
- PostgreSqlServer
- 队列
- 队列工作进程
- 需要重启
- Redis
- RedisConnectable
- RedisServer
- 路由缓存
- S3
- 安全检查器
- SeeTickets
- Sendinblue
- 服务器负载
- 服务器变量
- 服务器运行时间
- Sshd
- Supervisor
但是,您可以添加任何需要的其他内容,您只需要找到正确的检查器来使用,或者只需为您的资源创建一个新的检查器。
面板中的面板
如果您有大量的网站需要检查,您可以使用 HealthPanel 检查器创建一个健康监控应用程序来检查所有远程监控,并创建一个仪表板来总结所有网站的运行状态。
易于配置
创建新的资源监控非常简单,只需在应用的 config/health 文件夹中创建一个新的 YAML 文件即可完成。以下是一些示例
Amazon S3
name: S3
abbreviation: s3
checker: PragmaRX\Health\Checkers\CloudStorageChecker
notify: true
driver: s3
file: pragmarx-health-s3-testfile.txt
contents: {{ str_random(32) }}
error_message: 'Amazon S3 connection is failing.'
column_size: 4
Nginx
name: NginxServer
abbreviation: ngnxsrvr
checker: PragmaRX\Health\Checkers\ProcessChecker
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
截图
面板
面板的替代设计
如果您有大量的服务需要检查,您可能需要将默认的面板设计更改为使用更少的空间
4 列布局的面板
错误消息
将鼠标悬停在失败的资源上,即可立即访问错误消息
点击资源按钮,您将获得一个显示错误消息的警报
Slack 通知
这是一个通过 Slack 发送的示例通知
Artisan 控制台命令
以下健康检查命令也以标准格式返回退出码
health:panel
使用命令 health:panel
在控制台查看您的服务状态。
health:check
使用命令 health:check
检查所有资源并在失败时发送通知。
路由
安装后,您将可以访问以下路由
/health/panel
主要面板路由。
/health/check
返回一个包含该包关于您的服务的所有信息的 JSON
/health/string
返回一个包含所有服务状态的字符串,当使用其他监控服务时很有用
hlthFAIL-dbFAIL-filesystemOK-frmwrkOK-httpOK-httpsOK-mailOK
/health/resource/{name}
返回有关特定服务的 JSON 信息
要求
- PHP 7.3+
- Laravel 8.0+
安装
使用 Composer 安装
composer require pragmarx/health
Laravel 上安装
将服务提供者添加到您的 config/app.php
PragmaRX\Health\ServiceProvider::class,
发布配置和视图
php artisan vendor:publish --provider="PragmaRX\Health\ServiceProvider"
访问健康面板
http://yourdomain.com/health/panel
配置所有设置
几乎所有的设置都可以在这个包中轻松配置
- 面板名称
- 标题和消息
- 资源检查器
- Slack 图标
- 通知渠道
- 模板位置
- 路由和前缀
- 邮件服务器
- 缓存
- 调度器
配置二进制文件
某些检查器需要您配置正确的二进制文件路径才能正常工作
'services' => [
'ping' => [
'bin' => env('HEALTH_PING_BIN', '/sbin/ping'),
],
'composer' => [
'bin' => env('HEALTH_COMPOSER_BIN', 'composer'),
],
],
允许 Slack 通知
要接收 Slack 通知,您需要设置 入站 Webhooks 并将此方法添加到您的用户模型中,并添加您的 webhook
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return config('services.slack.webhook_url');
}
缓存
当健康结果被缓存时,您可以通过将 ?flush=true
添加到 URL 来刷新缓存,以便重新处理所有资源
http://yourdomain.com/health/panel?flush=true
事件
如果您更喜欢构建自己的通知系统,您可以禁用它并监听以下事件
PragmaRX\Health\Events\RaiseHealthIssue::class
广播检查器
广播检查器是通过 ping 和 pong 系统完成的。广播检查器会 ping 您的服务,并且它必须 pong 回来。基本上,您需要调用一个带有数据的 URL 回调
Redis + Socket.io
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);
Pusher
<!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 安全检查器 包已被放弃,此检查器现在依赖于 local-php-security-checker。您需要编译或安装它到您的服务器或容器中,才能使用此检查器,并相应地更新 config/resources/SecurityChecker.yml
文件。
Lumen
要在 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('Illuminate\Contracts\Routing\ResponseFactory', function ($app) {
return new \Illuminate\Routing\ResponseFactory(
$app['Illuminate\Contracts\View\Factory'],
$app['Illuminate\Routing\Redirector']
);
});
$app->register(PragmaRX\Health\ServiceProvider::class);
测试
$ composer test
作者
许可
Health 在 BSD 3-Clause 许可证下授权 - 详细信息请参阅 LICENSE
文件
贡献
欢迎拉取请求和问题。