Códigos utilizados nessa palestra:
https://github.com/gmsantos/tdc-php-logs
Vamos entender importância dos logs e como eles podem ser utilizados além de uma forma de debug. Vamos conhecer níveis de criticidade definidos pela PSR-3, como funciona o Monolog e como podemos configurá-lo para permitir um melhor aproveitamento dos logs gerados pelas nossas aplicações.
2. Gabriel Machado
Autor dos cursos de cloud computing
PHP e DevOps
gmsantos
gmsantos__
gmsantos
gmsantos
3. Conteúdo
• O que são logs?
• Como escrever um bom log
• PSR-3
• Monolog
• Analisando os logs
4. O que são Logs?
• É uma expressão utilizada para descrever o processo de
registro de eventos relevantes
• Utilizado para determinar o o que aconteceu numa aplicação
• Auditoria
• Diagnóstico de problemas em sistemas
Fonte: Wikipedia
9. Ser claro e informativo
// mensagens que não descrevem o que está acontecendo
[2017-07-20 02:41:11] INFO: foi
[2017-07-20 02:41:11] DEBUG: vai
[2017-07-20 02:41:11] NOTICE: passou!!
[2017-07-20 02:41:11] DEBUG: 2
[2017-07-20 02:41:11] DEBUG: 3
[2017-07-20 02:41:11] DEBUG: 4
// sem detalhes do evento
[2017-07-20 02:41:11] WARNING: Unable to sync Sale Order
10. Ser claro e informativo
// Explicar o que está acontecendo
[2017-07-20 02:48:25] INFO: Starting csv file import {"file":"/path/file.csv"} []
[2017-07-20 02:48:25] DEBUG: Reading csv file [] []
[2017-07-20 02:48:25] NOTICE: Skip header {"line":1} []
[2017-07-20 02:48:25] DEBUG: Loading row 2 {"line":2,"data":{"some":"data"}} []
[2017-07-20 02:48:25] DEBUG: Loading row 3 {"line":3,"data":{"some":"data"}} []
[2017-07-20 02:48:25] DEBUG: Loading row 4 {"line":4,"data":{"some":"data"}} []
// Incluir informações auxiliares
[2017-07-20 02:48:25] WARNING: Unable to sync Sale Order {"id":123}
{"file":"/mnt/c/Users/gabri/Projects/tdc/good-
logs.php","line":32,"class":null,"function":null}
11. Fácil de pesquisar e agrupar
// Necessário agrupar com uma regex '/Allowed memory size of d+ bytes exhausted/'
ERROR: Allowed memory size of 5202142 bytes exhausted (tried to allocate 370697 bytes)
ERROR: Allowed memory size of 2916448 bytes exhausted (tried to allocate 251567 bytes)
ERROR: Allowed memory size of 4127488 bytes exhausted (tried to allocate 895479 bytes)
// Incluir tags
INFO: Starting csv file import {"file":"/path/file.csv"} {"tags":["integration","product"]}
NOTICE: Skip header {"line":1} {"tags":["integration","product"]}
DEBUG: Loading row 2 {"line":2,"data":{"some":"data"}} {"tags":["integration","product"]}
DEBUG: Loading row 3 {"line":3,"data":{"some":"data"}} {"tags":["integration","product"]}
DEBUG: Loading row 4 {"line":4,"data":{"some":"data"}} {"tags":["integration","product"]}
14. PSR-3
• Padrão de Logs para PHP
• De acordo com os níveis de criticidade da IETF RFC 5424
• Algumas implementações: monolog, zend-log, log4php
• Integrado ao seu código utilizando a sua interface
Repositório da interface
Especificação da PSR-3
15.
16. PSR-3
<?php namespace AppController;
use PsrLogLoggerInterface;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class DefaultController
{
public function index(Request $request, LoggerInterface $log)
{
$log->info('Hello World!');
return new Response('Welcome');
}
}
26. Monolog
• Criado por um dos criadores do Composer (@Seldaek)
• Implementação a PSR-3
• Versão 2.0 lançada recentemente (suporte PHP 7.2+)
• Versão 1.0 é mantida por enquanto (PHP 5.3+)
• Já vem integrado em Frameworks como Symfony e Laravel
27. Monolog
• Handlers
• Destino do log
• Formatters
• Formato em que o log será enviado
• Processors
• Informações extras para o log
35. Boas práticas
• Antecipe problemas analisando seus logs
• Tenha rotinas para ver logs não críticos
• Não use seus logs só para apagar incêndios
• Crie visualizações a partir dos seus logs
36. Como visualizar?
• Na sua maquina local, pode acessar diretamente o arquivo
$ tail -f /path/to/log
37. Como visualizar?
• Em produção, caso tenha acesso a máquina via ssh
$ ssh -i ~/.ssh/key.pem user@host tail –f /path/to/log
• E se o seu ambiente for composto por 35 hosts?
38. Você pode precisar de
• Agregação e centralização de logs
• Pesquisa por determinadas ocorrências
• Geração de métricas (KPIs e SLA)
• Alertas e notificações
46. Resumindo...
• Organize os logs gerados pela aplicação
• Crie processos para revisar e analisar seus logs
• Envie alertas para processos críticos
• Evolua como você trata os logs da sua aplicação a medida que ela
cresce
Podemos criar um provider que escuta alguns eventos da Queue e enviamos esse evento para um log...
Aqui estou escutando os eventos de inicio do Job, job processado com sucesos ou erro na execução, juntamente com o erro que ocorreu
E ao enviar isso para um serviço externo
Podemos criar um dashboard bom informações sobre nosso sistema, como quantidade de Jobs durante o tempo, jobs que falharam