1) O documento apresenta como implementar logs na aplicação PHP de acordo com o padrão PSR-3 usando a biblioteca Monolog. 2) É descrito como configurar níveis de criticidade, handlers, formatters e processors em Monolog. 3) Também são apresentadas dicas para analisar logs de forma a antecipar problemas e integrá-los a serviços como ELK para centralização e geração de métricas.
2. Gabriel Machado
Autor dos cursos de cloud computing
PHP, DevOps, Data
gmsantos
gmsantos__
gmsantos
gmsantos
PHP Community Summit 2019
3. Requisitos
• Para aproveitar melhor esse workshop você vai precisar
• Notebook com acesso a internet
• Git
• Docker (para rodar um cluster ELK localmente)
• PHP 7.2+ recomendando, mínimo PHP 7.0
• Extensão do SQLite habilitada
• Composer
• Terminal
• Editor de código (VSCode)
PHP Community Summit 2019
4. 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
PHP Community Summit 2019
9. Características de um bom log
Implementando PSR-3 com Monolog
PHP Community Summit 2019
10. 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
PHP Community Summit 2019
11. 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}
PHP Community Summit 2019
12. 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"]}
PHP Community Summit 2019
14. 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
PHP Community Summit 2019
16. 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
PHP Community Summit 2019
17. 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)
PHP Community Summit 2019
20. Níveis de Criticidade
0
1
2
3
4
5
6
7
8
Level
• Warning
Eventos não caracterizados como erro, mas que merecem
uma certa atenção
(Ex.: Uso de funções descontinuadas)
PHP Community Summit 2019
22. Níveis de Criticidade
0
1
2
3
4
5
6
7
8
Level
• Critical
Condições críticas no sistema, como falha de serviços
externos
Pode ser usado para medir nível de serviço (SLA)
PHP Community Summit 2019
26. 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
PHP Community Summit 2019
27. Monolog
• Handlers
• Destino do log
• Formatters
• Formato em que o log será enviado
• Processors
• Informações extras para o log
PHP Community Summit 2019
42. Como visualizar?
• Na sua maquina local, pode acessar diretamente o arquivo
$ tail -f /path/to/log
PHP Community Summit 2019
43. 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?
PHP Community Summit 2019
44. 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
PHP Community Summit 2019
47. 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)
PHP Community Summit 2019