Este paquete comprueba si los recursos de la aplicación se están ejecutando como deberían y crea un panel de estado del servicio. Tiene los siguientes puntos principales:
Heath tiene verificadores de recursos preconfigurados para los siguientes servicios:
Pero puede agregar cualquier otra cosa que necesite, solo tiene que encontrar el verificador correcto para usar o simplemente crear un nuevo verificador para su recurso.
Si tiene muchos sitios web para verificar, puede usar el verificador HealthPanel para crear una aplicación Health Monitor para verificar todos sus monitores remotos y crear un panel para resumir el estado de todos sus sitios web.
Crear nuevos monitores de recursos es fácil, simplemente cree un nuevo archivo YAML en la carpeta config/health de la aplicación y listo. A continuación se muestran algunos ejemplos:
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 tiene muchos servicios que verificar, puede cambiar el diseño del panel predeterminado para usar menos espacio:
Pase el mouse sobre un recurso defectuoso y obtenga acceso instantáneo al mensaje de error:
Haga clic en el botón de recursos y recibirá una alerta que muestra el mensaje de error:
A continuación se muestra un ejemplo de notificación enviada a través de Slack:
Los siguientes comandos de verificación de estado también devuelven un código de salida en un formato estándar:
Valor numérico | Estado del servicio | Descripción del estado |
---|---|---|
0 | DE ACUERDO | Servicio y parece estar funcionando correctamente. |
1 | Advertencia | La comprobación se ejecutó bien, pero superó algún umbral de "advertencia" |
2 | Crítico | El servicio de verificación detectado no se está ejecutando o está por encima de un umbral "crítico" |
3 | Desconocido | Es posible que los ajustes para la verificación del servicio estén mal configurados e impidan que se realice la verificación. |
Utilice el comando health:panel
para ver el estado de sus servicios en la consola.
Utilice el comando health:check
para comprobar todos sus recursos y enviar notificaciones sobre fallos.
Después de la instalación tendrás acceso a las siguientes rutas:
La ruta del panel principal.
Devuelve un json con todo lo que el paquete sabe sobre tus servicios:
Devuelve una cadena con el estado de todos sus servicios, útil cuando se utilizan otros servicios de monitoreo:
hlthFAIL-dbFAIL-filesystemOK-frmwrkOK-httpOK-httpsOK-mailOK
Devuelve un json con información sobre un servicio en particular:
Utilice Composer para instalarlo:
composer require pragmarx/health
Agregue el proveedor de servicios a su config/app.php
:
PragmaRXHealthServiceProvider::class,
php artisan vendor:publish --provider="PragmaRXHealthServiceProvider"
http://yourdomain.com/health/panel
Casi todo es fácilmente configurable en este paquete:
Algunos de los verificadores necesitan que usted configure la ruta binaria adecuada para que funcione el comprobador:
'services' => [
'ping' => [
'bin' => env('HEALTH_PING_BIN', '/sbin/ping'),
],
'composer' => [
'bin' => env('HEALTH_COMPOSER_BIN', 'composer'),
],
],
Para recibir notificaciones a través de Slack, deberás configurar Webhooks entrantes y agregar este método a tu modelo de Usuario con tu webhook:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return config('services.slack.webhook_url');
}
Cuando el resultado de salud se almacena en caché, puede vaciar el caché para que procese todos los recursos nuevamente agregando ?flush=true
a la URL:
http://yourdomain.com/health/panel?flush=true
Si prefiere crear sus propios sistemas de notificaciones, puede desactivarlo y escuchar el siguiente evento.
PragmaRXHealthEventsRaiseHealthIssue::class
La transmisión del verificador se realiza mediante un sistema de ping y pong. El verificador de transmisiones hará ping a su servicio y deberá devolverlo. Básicamente, lo que debes hacer es devolver la llamada a una URL con algunos datos:
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 ();
Ejemplo de comprobación de comandos artesanales:
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');
Como se abandonó el paquete SensioLabs Security Checker, este verificador ahora depende de local-php-security-checker. Debe compilarlo o instalarlo en su servidor o contenedor para poder utilizar este verificador y actualizar el archivo config/resources/SecurityChecker.yml
en consecuencia.
Para usarlo en Lumen, probablemente necesitarás hacer algo como esto en tu 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 tiene la licencia BSD de 3 cláusulas; consulte el archivo LICENSE
para obtener más detalles.
Las solicitudes de extracción y los problemas son más que bienvenidos.