此套件檢查應用程式資源是否正常運行,並建立一個服務狀態面板。其主要有以下幾點:
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
文件
拉取請求和問題非常受歡迎。