Ce package vérifie si les ressources de l'application fonctionnent comme elles le devraient et crée un panneau d'état du service. Il comporte les points principaux suivants :
Heath dispose de vérificateurs de ressources préconfigurés pour les services suivants :
Mais vous pouvez ajouter tout ce dont vous avez besoin, il vous suffit de trouver le bon vérificateur à utiliser ou simplement de créer un nouveau vérificateur pour votre ressource.
Si vous avez de nombreux sites Web à vérifier, vous pouvez utiliser le vérificateur HealthPanel pour créer une application Health Monitor afin de vérifier tous vos moniteurs distants et créer un tableau de bord pour résumer l'état de tous vos sites Web.
Créer de nouveaux moniteurs de ressources est simple, il suffit de créer un nouveau fichier YAML dans le dossier config/health de l'application et le tour est joué. Voici quelques exemples :
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
Si vous avez de nombreux services à vérifier, vous pouvez modifier la conception du panneau par défaut pour utiliser moins d'espace :
Passez la souris sur une ressource défaillante et obtenez un accès instantané au message d'erreur :
Cliquez sur le bouton de ressource et vous recevrez une alerte affichant le message d'erreur :
Voici un exemple de notification envoyée via Slack :
Les commandes de vérification de l'état ci-dessous renvoient également un code de sortie dans un format standard :
Valeur numérique | Statut du service | Description de l'état |
---|---|---|
0 | D'ACCORD | Service et semble fonctionner correctement |
1 | Avertissement | La vérification s'est bien déroulée, mais elle était au-dessus d'un certain seuil « d'avertissement » |
2 | Critique | Le service de vérification détecté n'est pas en cours d'exécution ou est au-dessus d'un seuil « critique » |
3 | Inconnu | Les paramètres du contrôle de service peuvent être mal configurés et empêchent l'exécution du contrôle. |
Utilisez la commande health:panel
pour afficher l'état de vos services dans la console.
Utilisez la commande health:check
pour vérifier toutes vos ressources et envoyer des notifications en cas d'échec.
Après l'installation, vous aurez accès aux itinéraires suivants :
L'itinéraire du panneau principal.
Renvoie un json avec tout ce que le package sait sur vos services :
Renvoie une chaîne avec le statut de tous vos services, utile lors de l'utilisation d'autres services de surveillance :
hlthFAIL-dbFAIL-filesystemOK-frmwrkOK-httpOK-httpsOK-mailOK
Renvoie un json avec des informations sur un service particulier :
Utilisez Composer pour l'installer :
composer require pragmarx/health
Ajoutez le fournisseur de services à votre config/app.php
:
PragmaRXHealthServiceProvider::class,
php artisan vendor:publish --provider="PragmaRXHealthServiceProvider"
http://yourdomain.com/health/panel
Presque tout est facilement configurable dans ce package :
Certains vérificateurs nécessitent que vous configuriez le chemin binaire approprié pour que le vérificateur fonctionne :
'services' => [
'ping' => [
'bin' => env('HEALTH_PING_BIN', '/sbin/ping'),
],
'composer' => [
'bin' => env('HEALTH_COMPOSER_BIN', 'composer'),
],
],
Pour recevoir des notifications via Slack, vous devrez configurer les Webhooks entrants et ajouter cette méthode à votre modèle utilisateur avec votre webhook :
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return config('services.slack.webhook_url');
}
Lorsque le résultat Health est mis en cache, vous pouvez vider le cache pour lui faire traiter à nouveau toutes les ressources en ajoutant ?flush=true
à l'URL :
http://yourdomain.com/health/panel?flush=true
Si vous préférez créer votre propre système de notifications, vous pouvez le désactiver et écouter l'événement suivant
PragmaRXHealthEventsRaiseHealthIssue::class
Le vérificateur de diffusion se fait via un système de ping et pong. Le vérificateur de diffusion enverra une requête ping à votre service et il devra répondre. Fondamentalement, ce que vous devez faire est de rappeler une URL avec certaines données :
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 ();
Exemple d'enregistrement de commandes artisanales :
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');
Le package SensioLabs Security Checker ayant été abandonné, ce vérificateur dépend désormais de local-php-security-checker. Vous devez le compiler ou l'installer sur votre serveur ou conteneur afin d'utiliser ce vérificateur, et mettre à jour le fichier config/resources/SecurityChecker.yml
en conséquence.
Pour l'utiliser sur Lumen, vous devrez probablement faire quelque chose comme ceci sur votre 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
Antonio Carlos Ribeiro
Health est sous licence BSD à 3 clauses - voir le fichier LICENSE
pour plus de détails
Les demandes de tirage et les problèmes sont plus que bienvenus.