Joaquin DiezIT Architect@joaquindiez
MADRID · NOV 18-19 · 2016
Fran RodriguezSite Reliability Engineer@fjrodriguez2
MADRID · NOV 18-19 · 2016
¿Que es una linea de Log?1. Algo que ha ocurrido en un momento en el tiempo.
2. Información:1. Estadísticas y métricas de máquinas y servicios
2. Información de Actividad de Aplicaciones -> negocio3. Dispositivos de Internet Of Things.
3. Información Estructurada o No Estructurada
MADRID · NOV 18-19 · 2016
Cuando hacíamos uso de los LogsCUANDO ALGO EXCEPCIONAL OCURRIA
- Un fallo en el Sistema ( máquina o aplicación)- Un cliente se quejaba por un error.- Un Ataque informático
MADRID · NOV 18-19 · 2016
1. Menor coste almacenamiento
2. Computación en la nube
3. BIG DATA
4. HADOOP,NOSQL
5. Stream Analytics ( Spark, Storm…)
6. Deep Learning
Las cosas han cambiado…..
LOGS
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
Como en toda comunicación- Emisor y receptor han de entender el mensaje.
- Contener información de interés
MADRID · NOV 18-19 · 2016
Errores comunes- Escribíamos Logs pensando en Humanos
- Ausencia de Información importante.
- Mezcla de diferentes tipo de información
- Escribir lineas de logs con saltos de linea.
MADRID · NOV 18-19 · 2016
log.info("Usuario ha hecho Login Correctamente”);log.info("Listar Alertas”);log.info("Mostrar Alerta ” + alert.getId());log.info("Editar Alerta ” + alert.getId());log.info("Logout usuario ”);
2016-11-13T20:04:36,040 INFO lt.web.LoginController Usuario ha hecho Login Correctamente2016-11-13T20:06:06,011 INFO lt.web.AlertController Listar Alertas2016-11-13T20:07:01,012 INFO lt.web.AlertController Mostrar Alerta A000012016-11-13T20:10:00,400 INFO lt.web.AlertController Editar Alerta A000012016-11-13T20:12:15,141 INFO lt.web.LogOutController Logout usuario
MADRID · NOV 18-19 · 2016
Normas Básicas- Escribir para ser leídos por máquinas no para humanos- Estructurar la información -> Definir Formatos
MADRID · NOV 18-19 · 2016
log.info("user={} action={} result={}” , user.getEmail(), “login”, “ok”);log.info("user={} action={} result={}” , user.getEmail(), “alert_list”, “ok”);log.info("user={} action={} alert={} result={}” , user.getEmail(), “alert_show”, alert.getId(),“ok”);log.info("user={} action={} alert={} result={}” , user.getEmail(), “alert_edit”, alert.getId(),“ok”);log.info("user={} action={} result={}” , user.getEmail(), “logout”, “ok”);
2016-11-13T20:04:36,040 INFO lt.web.LoginController [email protected] action=login result=ok2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected] action=alert_list result=ok2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected] action=alert_show alert=A00001 result=ok2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected] action=alert_edit alert=A00001 result=ok2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected] action=logout result=ok
Estructurar la información
MADRID · NOV 18-19 · 2016
log.info("{}|{}|{}” , user.getEmail(), “login”, “ok”);log.info("{}|{}|{}” , user.getEmail(), “alert_list”, “ok”);log.info("{}|{}|{}|{}” , user.getEmail(), “alert_show”,“ok”, alert.getId());log.info("{}|{}|{}|{}” , user.getEmail(), “alert_edit”,“ok”, alert.getId());log.info("{}|{}|{}” , user.getEmail(), “logout”, “ok”);
2016-11-13T20:04:36,040 INFO lt.web.LoginController [email protected]|login|ok2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected]|alert_list|ok 2016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected]|alert_show|ok|A000012016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected]|alert_edit|ok|A000012016-11-13T20:04:36,040 INFO lt.web.AlertController [email protected]|logout|ok
Estructurar la información
MADRID · NOV 18-19 · 2016
Normas Básicas- Escribir para ser leídos por máquinas no para humanos- Estructurar la información -> Definir Formatos- Separar cada tipo de Evento en ficheros diferentes
MADRID · NOV 18-19 · 2016
Normas Básicas- Escribir para ser leídos por máquinas no para humanos- Estructurar la información -> Definir Formatos- Separar cada tipo de Evento en ficheros diferentes- Evitar escribir Saltos de linea (Excepciones)
Evitar logs Multilineatry { // Code that generates an IOException } catch (IOException e) { logger.fatal("An exception occurred while opening the file.", e); }
Evitar logs MultilineaUsar Appenders modernos que eliminen los saltos de linea y los substituyan por un carácter alternativo - Log4j2 o LogBack en Java (por ejemplo - NLog ( .Net)
MADRID · NOV 18-19 · 2016
Normas Básicas- Escribir para ser leídos por máquinas no para humanos- Estructurar la información -> Definir Formatos- Separar cada tipo de Evento en ficheros diferentes- Evitar escribir Saltos de linea (Excepciones)
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
Democratizar los Logs- Son de TODOS y para TODOS
- Pueden(y deben) consultarlos por toda la organización
- Facilitar herramientas para buscar en ellos y extraer información
- Logs no solo cosa de técnicos
MADRID · NOV 18-19 · 2016
Democratizar los Logs: Consecuencias
- Eliminamos dependencias y bloqueos
- Acceso libre a la información ( sobre todo Negocio)
- Más información —> Mejor toma de decisiones.
- Mayor Productividad
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
Tecnologias de BBDD
Bases de Datos Relacionales (muy estructurados)
Clave/Valor, Columnares y otros (semi-estructurados)
MongoDB
NOSQL
Cassandra
CouchDB
RDBMS
Redis
Bases de Datos
• Mantener un estado consistente de la información(ACID)
• Es una foto estática de tus datos en un momento dato en el tiempo
RDBMS
Dia 1• Entra en la aplicación
• Crea Una alerta A
• Sale de la aplicación
Dia 2• Entra en la aplicación
• Edita la Alerta A y cambia sus parámetros
• Sale de la aplicación
Dia 3• Entra en la aplicación
• Borra la Alerta A
• Sale de la aplicación
id name params creation_date update_date1 A {‘user’:’obama’,
‘role’:’president’}2016-11-01 12:00 2016-11-01 12:00
id name params creation_date update_date1 A {‘user’:’trump’,
‘role’:’president’}2016-11-01 12:00 2016-11-02 15:00
id name params creation_date update_date
Dia 1• Entra en la aplicación
• Crea Una alerta A
• Sale de la aplicación
Dia 2• Entra en la aplicación
• Edita la Alerta A y cambia sus parámetros
• Sale de la aplicación
Dia 3• Entra en la aplicación
• Borra la Alerta A
• Sale de la aplicación
2016-11-01 11:50:00 user=alberto action=login 2016-11-01 12:00:00 user=alberto action=create_alert alert_id=1 alert_name=A params={‘user’:’obama’,’role’:’president’} 2016-11-01 12:02:00 user=alberto action=logout
2016-11-02 14:58:00 user=alberto action=login 2016-11-02 15:00:00 user=alberto action=edit_alert alert_id=1 alert_name=A params={‘user’:’trump’,’role’:’president’} 2016-11-02 15:02:00 user=alberto action=logout
2016-11-03 10:00:00 user=alberto action=login 2016-11-03 10:05:00 user=alberto action=delete_alert alert_id=1 alert_name=A 2016-11-03 10:07:00 user=alberto action=logout
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
“Escribir logs es un Arte más que una ciencia”
“Es una habilidad que separa a los buenos programadores de los Grandes Programadores”
MADRID · NOV 18-19 · 2016
- Se consistente, piensa bien un formato de log que te permita capturar información util.
- Escribe todo lo que necesites tanto para depurar o resolver un problema cuando surja
- NUNCA escribas información sensible, passwords, número tarjetas de crédito….
Recomendaciones
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
SyslogEl nacimiento de los sysadmins.
Formato: <PRI>timestamp hostname tag: message// <34>Oct 11 22:14:15 mymachine su: failed for frodriguez on /dev/pts/8// <0>2016 Oct 22 10:52:01 TZ-6 prueba.logtrust.com 10.1.2.3 sched[0]: That's All Folks!
Distintos RFC’s.
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
MonitorizaciónTodo en logs.
Alertas. NO a los falsos positivos.
Estado de los servicios.
Seguridad. El chivato.
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda Desarrollo
Visualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
CentralizaciónMás servicios más logs.
Optimización de los servicios.
Análisis global y a futuro.
MADRID · NOV 18-19 · 2016
Logging Best
Practices
Aprender a Escribir Logs
Bien
Democratizar los logs Vitamina
tu BBDD
Ayuda DesarrolloVisualización
Centralización Monitorización Syslog
MADRID · NOV 18-19 · 2016
VisualizaciónEl histórico es como tu padre.
Agregados. Todos para uno y uno para todos.
Dashboards. Compartir es vivir.