Este pacote verifica se os recursos do aplicativo estão funcionando como deveriam e cria um painel de status do serviço. Possui os seguintes pontos principais:
Heath possui verificadores de recursos pré-configurados para os seguintes serviços:
Mas você pode adicionar tudo o que precisar, basta encontrar o verificador certo para usar ou apenas criar um novo verificador para o seu recurso.
Se você tiver muitos sites para verificar, poderá usar o verificador HealthPanel para criar um aplicativo Health Monitor para verificar todos os seus monitores remotos e criar um painel para resumir o estado de todos os seus sites.
Criar novos monitores de recursos é fácil, basta criar um novo arquivo YAML na pasta config/health do aplicativo e pronto. Aqui estão alguns exemplos:
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
Se você tiver muitos serviços para verificar, poderá alterar o design padrão do painel para usar menos espaço:
Passe o mouse sobre um recurso com falha e obtenha acesso instantâneo à mensagem de erro:
Clique no botão do recurso e você receberá um alerta mostrando a mensagem de erro:
Aqui está um exemplo de notificação enviada via Slack:
Os comandos de verificação de integridade abaixo também retornam um código de saída em formato padrão:
Valor Numérico | Status do serviço | Descrição do status |
---|---|---|
0 | OK | Serviço e parece estar funcionando corretamente |
1 | Aviso | A verificação correu bem, mas estava acima de algum limite de "aviso" |
2 | Crítico | O serviço de verificação detectada não está em execução ou está acima de um limite "crítico" |
3 | Desconhecido | As configurações para a verificação de serviço podem estar configuradas incorretamente e estão impedindo a execução da verificação |
Use o comando health:panel
para visualizar o status de seus serviços no console.
Use o comando health:check
para verificar todos os seus recursos e enviar notificações sobre falhas.
Após a instalação você terá acesso às seguintes rotas:
A rota do painel principal.
Retorna um json com tudo que o pacote sabe sobre seus serviços:
Retorna uma string com o status de todos os seus serviços, útil ao usar outros serviços de monitoramento:
hlthFAIL-dbFAIL-filesystemOK-frmwrkOK-httpOK-httpsOK-mailOK
Retorna um json com informações sobre um determinado serviço:
Use o Composer para instalá-lo:
composer require pragmarx/health
Adicione o provedor de serviços ao seu config/app.php
:
PragmaRXHealthServiceProvider::class,
php artisan vendor:publish --provider="PragmaRXHealthServiceProvider"
http://yourdomain.com/health/panel
Quase tudo é facilmente configurável neste pacote:
Alguns dos verificadores precisam que você configure o caminho binário adequado para que o verificador funcione:
'services' => [
'ping' => [
'bin' => env('HEALTH_PING_BIN', '/sbin/ping'),
],
'composer' => [
'bin' => env('HEALTH_COMPOSER_BIN', 'composer'),
],
],
Para receber notificações via Slack, você terá que configurar Incoming Webhooks e adicionar este método ao seu modelo de usuário com seu webhook:
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return config('services.slack.webhook_url');
}
Quando o resultado de integridade é armazenado em cache, você pode liberar o cache para que ele processe todos os recursos novamente adicionando ?flush=true
ao URL:
http://yourdomain.com/health/panel?flush=true
Se preferir construir seus próprios sistemas de notificação, você pode desativá-lo e ouvir o seguinte evento
PragmaRXHealthEventsRaiseHealthIssue::class
O verificador de transmissão é feito via sistema ping e pong. O verificador de transmissão fará ping em seu serviço e deverá retornar. Basicamente o que você precisa fazer é chamar de volta uma URL com alguns dados:
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 ();
Verificando o exemplo de comandos do artesão:
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 o pacote SensioLabs Security Checker foi abandonado, este verificador agora depende do local-php-security-checker. Você precisa compilá-lo ou instalá-lo em seu servidor ou contêiner para usar este verificador e atualizar o arquivo config/resources/SecurityChecker.yml
adequadamente.
Para usá-lo no Lumen, você provavelmente precisará fazer algo assim em seu 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 é licenciado sob a licença BSD de 3 cláusulas - consulte o arquivo LICENSE
para obter detalhes
Solicitações pull e problemas são mais que bem-vindos.