54
Top Bug Codemotion Madrid España 2014 Alejandro E. Brito Monedero - @ae_bm

Top Bug

Embed Size (px)

DESCRIPTION

Charla dada en el Codemotion España que se celebró en Madrid el 21 y 22 /11/2014 Como tiene gifs animado, es recomendable descargar la presentación Trata sobre el uso de herramientas de sistemas para hacer debugging

Citation preview

Page 1: Top Bug

Top BugCodemotion Madrid España 2014

Alejandro E. Brito Monedero - @ae_bm

Page 2: Top Bug

Sobre mi

Trabajo como sysadmin / devops / SRE / lector de mensajes de error / título tonto aquí

Miembro de Madrid DevOps, Postgres España, Python Madrid y muchos más meetups de los que puedo asistir

Más info en http://bit.ly/1sT7bLw

Charla inspirada por http://youtu.be/UxFq16IG_k0

Page 3: Top Bug

Sobre mi

Page 4: Top Bug

Plan de operaciones

Un poco de teoría aburrida

Loadout

Historias de batallas

Lecciones para llevar

Referencias y créditos

Preguntas

Page 5: Top Bug

Un poco de teoría aburrida

Page 6: Top Bug

Un poco de teoría aburrida

¿Por qué?

Hay que saber como actuar para cuando lleguen las crisis. Si, llegarán

Si vis pacem, para bellum

Page 7: Top Bug

Un poco de teoría aburrida

¿Qué hacer? / ¿Qué hago?

Mantener la calma

No caer en el quedar inmóvil / huir

Evitar ser trigger happy / disparar primero y preguntar después

Page 8: Top Bug

Un poco de teoría aburrida

¿Qué hacer? / ¿Qué hago?

Mantener la calma

No caer en el quedar inmóvil / huir

Evitar ser trigger happy / disparar primero y preguntar después

Page 9: Top Bug

Un poco de teoría aburrida

Pasar de esto

Page 10: Top Bug

Un poco de teoría aburrida

A esto

Page 11: Top Bug

Un poco de teoría aburrida

¿Cómo? / El arma secreta

El método científico

Descripción del problemaHipótesisPredicciónPrueba (experimental / observacional)Análisis

Page 12: Top Bug

Un poco de teoría aburrida

¿Cómo? / El arma secreta

Una técnica que uso para formular hipótesis es pensar en como puede estar implementado el sistema o como yo lo hubiera implementado

Page 13: Top Bug

Un poco de teoría aburrida

Uno de los principales obstáculos

El efecto observador / heisenbugs

Page 14: Top Bug

Loadout

Page 15: Top Bug

Loadout

Código fuente

La fuente última (no pun intended)

A veces es tan feo o complejo que es preferible estar abordo del Event Horizon, puede ser como estar en la dimensión de los cenobites

Se puede usar la técnica del print

Page 16: Top Bug

Loadout

Logs

Según como estén, si es que están, pueden ser un valioso aliado

Dependen del equipo de desarrollo, ¡sí tu! No el de atrás

¡Nada como los stacktraces! Nadie nunca ha dicho esto

Page 17: Top Bug

Loadout

Estado general del sistema

htop: Top pero más bonito / ajustable

atop: Sirve para capturar a esos procesos de muy corta duración

vmstat: Ver casi todo el estado del sistema

iotop: Como top pero para el IO

sar: Información de actividad del sistema

Page 18: Top Bug

Loadout

lsof

Siglas de list open files

Todo (casi) en unix es un fichero

Al saber que ficheros tiene abiertos un proceso se puede ver si escribe en algún log o si tiene conexiones de red, en este apartado también se podría usar ss o netstat

Page 19: Top Bug

Loadout

lsof

También sirve para saber que procesos tienen directorios o ficheros abiertos

lsof -n -p <pid>

lsof <fichero>

lsof +D <directorio>

lsof -n -i 4TCP@<ip>:<puerto>

Page 20: Top Bug

Loadout

Tcpdump / tshark / wireshark

Las herramientas para saber que pasa en la red

El antídoto contra la gente que no documenta sus APIs

Page 21: Top Bug

Loadout

Tcpdump / tshark / wireshark

No sirve con SSL a menos que se tenga la llave privada y no se este usando perfect forward secrecy. También se puede usar un proxy que haga de MITM o quitar / degradar SSL

Page 22: Top Bug

Loadout

Tcpdump / tshark / wireshark

En la máquina siendo analizada (a veces puede ser util usar la opción -B

tcpdump -n -p -i <iface> -s 0 \

-w <capture file> <pcap filter>

En la máquina desde la que se hace el análisis

wireshark <capture file>

Page 23: Top Bug

Loadout

strace

Para cuando se entra en territorios hostiles

Para hacer tracing de llamadas al sistema y señales

Existe una versión para hacer tracing a nivel de la biblioteca de C llamada ltrace

Page 24: Top Bug

Loadout

strace

Puede hacer tracing sobre procesos hijos del proceso estudiado

Permite ver el tiempo que tardan las llamadas al sistema

Pero el proceso siendo estudiado se ejecuta más lento

Page 25: Top Bug

Loadout

strace

strace [-S <sortby>] -c -p <pid>

strace -o <fichero> [-T] [-ff] \

[-s <strsize>] [-e <expr>] \

-p <pid>

Page 26: Top Bug

Loadout

sysdig

Herramienta de exploración a nivel de sistema

Es como un tcpdump sobre el flujo de llamadas a sistema

Extensible con lua

Page 27: Top Bug

Loadout

sysdig

No genera tanto overhead como strace

Crea un módulo para el kernel

No se puede tener más de una instancia en ejecución

Page 28: Top Bug

Loadout

sysdig

Necesita privilegios de root

Se ha ganado mi <3 por su capacidad de usar filtros y chisels

Sólo sirve en Linux

Page 29: Top Bug

Loadout

sysdig

sysdig -w <capture file> \

[-s <len>] <filtro>

sysdig -r <capture file> \

[-c <chisel> <args>]

Page 30: Top Bug

Loadout

Escribir tus propias herramientas

Quitarse el trabajo manual

Procesar de maneras no imaginadas la data que ya tenemos

Page 31: Top Bug

Loadout

Herramientas para gente grande

Implica saber más de sistemas operativos

Por ahora no he sentido la necesidad de usarlas más allá que para pruebas

Por ejemplo: dtrace, SystemTap, ftrace, ...

Page 32: Top Bug
Page 33: Top Bug

Historias de batallas

Page 34: Top Bug

Historias de batallas

Caso 1

Postfix no inicia

/var/log/mail.log sólo muestra 'ERROR'

Por experiencia sabemos que muchos errores son problemas de permisos

Sabemos que postfix está dividido en múltiples procesos

Page 35: Top Bug

Historias de batallas

Caso 1

Para descartar el problema de los permisos usamos strace

Cambiamos el script de inicio para que llame a postfix con la opción -ff

Revisamos los ficheros que creó strace buscando las llamadas al sistema que no terminaron correctamente

Page 36: Top Bug

Historias de batallas

Caso 1

Encontramos una llamada a open que referencia a un fichero dentro de /var/spool/postfix falló por un problema de permisos

Comparamos los atributos del fichero en una máquina que no presenta el problema

Tiene permisos distintos

Page 37: Top Bug

Historias de batallas

Caso 1

Cambiamos los permisos para que sean iguales que en el sistema control

Postfix inicia correctamente

Page 38: Top Bug

Historias de batallas

Caso 2

La aplicación X no funciona

Nadie sabe donde guarda los logs

Sabemos que el log puede ser una conexión a algo como syslog o un fichero

Nada que haga referencia a la aplicación en /var/log

Page 39: Top Bug

Historias de batallas

Caso 2

No saben que es syslog

Sabemos que la aplicación esta programada en un lenguaje interpretado

Con pgrep buscamos procesos con el interprete que se está utilizando

Con el PID listamos con lsof los ficheros que tiene abierto el proceso

Page 40: Top Bug

Historias de batallas

Caso 2

Conseguimos que el log estaba guardándose en /tmp

El log indica cual es el problema con la aplicación

Page 41: Top Bug

Historias de batallas

Caso 3

Una aplicación web tiene un performance de pena

El sistema recibe peticiones HTTP, revisa en una BD y publica mensajes en un broker

Los desarrolladores piden más HW y máquinas, culpan al broker de ser un cuello de botella

Page 42: Top Bug

Historias de batallas

Caso 3

Hay otra aplicación que usa el broker y no va tan lento, descartamos esa opción

Sabemos por experiencia que usualmente la gente no sabe usar las BBDD

Pensamos que seria interesante saber que queries se están enviando a la BD

Page 43: Top Bug

Historias de batallas

Caso 3

Revisar las queries desde la BD es complicado dado el despliegue actual

Desde el frontal web lanzamos tcpdump para capturar el tráfico de la app a la BD

Con wireshark revisamos la captura y vemos muchas queries a las tablas del schema

Page 44: Top Bug

Historias de batallas

Caso 3

Comentamos al equipo de desarrollo que el ORM sux

Cambian la configuración del ORM para que no haga siempre las consultas al esquema

El desempeño de la aplicación se multiplica por 10 sin agregar más HW o máquinas

Page 45: Top Bug

Historias de batallas

Caso 4

La aplicación web no sirve los ficheros que se le piden

¿Por qué esto no lo hace el servidor web si están en el filesystem?

Los ficheros están en el filesystem pero la aplicación web no los encuentra

Page 46: Top Bug

Historias de batallas

Caso 4

Hay que averiguar donde la app esta buscando

Es engorroso usar strace en aplicaciones donde los procesos son creados y destruidos de forma continua

sysdig permite filtrar eventos por nombre de proceso y por acción

Page 47: Top Bug

Historias de batallas

Caso 4

Usamos sysdig con un filtro que sólo vea los eventos de filesystem generados por los procesos X, que hayan tenido errores y cuyo nombre de fichero sea similar a Y

Page 48: Top Bug

Historias de batallas

Caso 4

Revisamos la captura y vemos que la app buscaba el nombre del fichero solicitado agregándole parámetros al nombre

Se elimina el bug

Page 49: Top Bug

Lecciones para llevar

Las herramientas vienen y van, lo importante es el plan de acción, el mindset:

“Es un error capital teorizar antes de tener datos. Sin darse cuenta, uno empieza a deformar los hechos para que se adapten a las teorías, en lugar de adaptar las teorías a los hechos” Sherlock Holmes - Arthur Conan Doyle

Page 50: Top Bug

Lecciones para llevar

Mantener la cabeza fría

No olvidar el principio de presunción de inocencia

Usar la imaginación para saber como puede estar hecho el sistema

Es bueno saber “un poco” de sistemas operativos y de la arquitectura de la aplicación

Page 51: Top Bug

Referencias y créditos

Man 2 <syscall>

Internets

Brendan Gregg http://www.brendangregg.com/index.html @brendangregg

http://goo.gl/DDfgGq

http://goo.gl/I1XKzU

Page 52: Top Bug

Referencias y créditos

http://oi52.tinypic.com/iyodxs.jpg

http://i.giphy.com/fDzM81OYrNjJC.gif

http://i.giphy.com/110VRbH47qa2Jy.gif

http://upload.wikimedia.org/wikipedia/commons/3/3c/Displacement_roll_with_instruction_diagram.PNG

http://upload.wikimedia.org/wikipedia/commons/1/18/AIM-54_6_Pack.jpg

http://i.giphy.com/GlMN2r04gXTgs.gif

https://upload.wikimedia.org/wikipedia/commons/0/00/F-14_VF-111_launching_Phoenix_1991.jpeg

https://upload.wikimedia.org/wikipedia/commons/d/d3/Rainbow_bug.png

http://upload.wikimedia.org/wikipedia/commons/4/4e/Plaque_Commemorating_Battle_of_Harlem_Heights,_near_Riverside_Church.jpg

http://i.giphy.com/6rgpEGDP0Rv3i.gif

Page 53: Top Bug

Preguntas

Page 54: Top Bug

¡Gracias!