O documento discute a importância dos logs para monitoramento e solução de problemas em sistemas. Ele explica o que são logs e características de um bom log, como ser claro, ter contexto e ser fácil de pesquisar. Também apresenta o padrão PSR-3 de logs para PHP e a biblioteca Monolog, mostrando exemplos de seu uso. Por fim, discute formas de visualizar e analisar logs, incluindo a centralização e agregação em serviços externos.
2. Gabriel Machado
Autor dos cursos de cloud computing
PHP, DevOps, Data
gmsantos
gmsantos__
gmsantos
gmsantos
Meetup PHP Vale
3. O que são Logs?
• “Quando o homem avançou o mar, na época dos grandes
descobrimentos, para deixar registrado os eventos ocorridos
durante a viagem foi comum a criação de um log, no sentido
de ser um 'diário de bordo'.” - Wikipedia
Meetup PHP Vale
9. Ser claro e informativo
// mensagens que não dizem nada
[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
Meetup PHP Vale
10. Ter contexto
// 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 sobre o contexto
[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}
Meetup PHP Vale
11. Fácil de pesquisar e agrupar
// Repensar logs com mensagem dinâmica
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"]}
Meetup PHP Vale
13. Analise seus logs
• 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 Dashboards a partir dos seus logs
Meetup PHP Vale
15. 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
Especificação da PSR-3
Meetup PHP Vale
16. Níveis de Criticidade
0
1
2
3
4
5
6
7
8
Level
• Debug
Contém informações detalhadas para debug
Geralmente é desligado em produção
(Ex: Iterações de um loop, query SQL gerada pelo ORM)
Meetup PHP Vale
25. Monolog
• Criado por um dos criadores do Composer (@Seldaek)
• Implementa 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
Meetup PHP Vale
26. Monolog
• Handlers
• Destino do log
• Formatters
• Formato em que o log será enviado
• Processors
• Informações extras para o log
Meetup PHP Vale
41. Como visualizar?
• Na sua maquina local, pode acessar diretamente o arquivo
$ tail -f /path/to/log
Meetup PHP Vale
42. 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?
Meetup PHP Vale
43. 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
Meetup PHP Vale
51. Resumindo...
• Organize os logs gerados pela aplicação
• Crie processos de revisão periódica dos logs
• Automatize o envio de alertas
• Centralize os logs da aplicação
• Cruze com outros logs (servidor web, banco de dados)
Meetup PHP Vale
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