monitorización desymfony
TRANSCRIPT
Cristina Quintana Soy de Córdoba Java Sun Certified Programmer Zend Certified Engineer PHP 5.3
Monitorización
Monitorización
¿Por qué?
Bueno
Conoceríamos el estado de las piezas vitales del sistema.
Monitorización
¿Por qué?
Bueno Bonito
Anticiparnos a errores. Mínimos tiempos de respuesta a fallos.
Monitorización
¿Por qué?
Bueno Bonito Barato
Prevenimos perder dinero con: • cortes de servicio • estructuras mal dimensionadas • estructuras mal configuradas
Monitorización
¿Por qué?
Monitorización
Objetivos
Monitorización
Objetivos
Identificar
Obtener
Utilizar
Ejemplo de infraestructra
Ejemplo de infraestructura
Esquema básico
Ejemplo de infraestructura
Atentos...
Queremos saber: • el estado de los servicios • qué ven los nodos entre ellos • qué ve el usuario
Ejemplo de infraestructura
Comprobando nodos
Ejemplo de infraestructura
Atentos... ¿a qué?
Queremos saber: • el estado de los servicios • qué ven los nodos entre ellos • qué ve el usuario
Ejemplo de infraestructura
Esto también, ¿eh?
Ejemplo de infraestructura
Ahora... ¡sí!
Ejemplo de infraestructura
Atentos... ¿a qué?
Queremos saber: • el estado de los servicios • qué ven los nodos entre ellos • qué ve el usuario
Ejemplo de infraestructura
Casi... pero no
Ejemplo de infraestructura
Verdad verdadera
¿Cómo monitorizar?
¿Cómo monitorizar?
Niveles de seguimiento
Infraestructura
Aplicación
Funcional
¿Cómo monitorizar?
Socket / puertos
A nivel de infraestructura
¿Cómo monitorizar?
Socket / puertos
A nivel de infraestructura
Se debe monitorizar todo aquello que tenga un socket, que sea necesario para el funcionamiento de la plataforma.
server$ netstat -lnpt (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connection (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
¿Cómo monitorizar?
Procesos
A nivel de infraestructura
root 31905 1 0 May28 ? 00:00:00 nginx: master process /usr/sbin nginx www-data 31906 31905 0 May28 ? 00:03:11 nginx: worker process www-data 31907 31905 0 May28 ? 00:01:48 nginx: worker process www-data 31908 31905 0 May28 ? 00:01:28 nginx: worker process www-data 31909 31905 0 May28 ? 00:03:05 nginx: worker process
Se debe controlar, por ejemplo, que el número de procesos no sea excesivo.
¿Cómo monitorizar?
Status
A nivel de infraestructura
Apache, nginx o lighttpd tienen módulos que muestran el estado del servidor a través de una url.
Estos datos pueden ser analizados por nagios.
¿Cómo monitorizar?
Third parties
A nivel de infraestructura
Chequeo de las conexiones con plataformas externas, como servicios de correo o de envío de sms.
• Puertos de escucha • Funciones por api • ...
¿Cómo monitorizar?
HERRAMIENTAS
A nivel de infraestructura
Cacti Nagios
New Relic
Icinga
Splunk
¿Cómo monitorizar?
HERRAMIENTAS
Icinga
¿Cómo monitorizar?
HERRAMIENTAS
Icinga
¿Cómo monitorizar?
Niveles de seguimiento
Infraestructura
Aplicación
Funcional
¿Cómo monitorizar?
Probes end2end
A nivel de aplicación
Chequeo de que la aplicación devuelve lo que esperamos. • Medición de tiempos de respuesta • ...
¿Cómo monitorizar?
Logs
A nivel de aplicación
Complemento de la anterior.
• Seguimiento de los logs de la app • Sequimiento de los logs de máquinas
¿Cómo monitorizar?
HERRAMIENTAS
A nivel de aplicación
New relic
Monolog
Desarrollo de Ofertix
¿Cómo monitorizar?
HERRAMIENTAS
A nivel de aplicación New Relic
¿Cómo monitorizar?
HERRAMIENTAS
New Relic
¿Cómo monitorizar?
Niveles de seguimiento
Infraestructura
Aplicación
Funcional
¿Cómo monitorizar?
HERRAMIENTAS
A nivel de funcional
Pingdom Behat
¿Cómo monitorizar?
HERRAMIENTAS
Behat
server$ bin/behat features/search.feature Feature: Buscar en el museo Vamos a buscar arte Scenario: Buscar # ../search.feature:4 Given I am on "http://www.museothyssen.org/thyssen/home" # ::visit() When I fill in "buscar_thyssen" with "tintoretto" # ::fillField() And I press "sa" # ::pressButton() Then I should see "andrea" # ::assetPageContainsText() 1 scenario (1 passed) 4 steps (4 passed) 0m1.333s
¿Cómo monitorizar?
HERRAMIENTAS
Behat
<form method="post" action="http://www.museothyssen.org/validation/resultados_buscador" id="cse-search-box">
<fieldset> <label for="buscar_thyssen">
<input type="text" id="buscar_thyssen" name="q"/> <input type="submit" name="sa" alt="Enviar" src="http://www.museothyssen.org/img/flecha33.png" id="submit_buscar_thyssen"
value=""/> </fieldset>
</form>
Given I am on "http://www.museothyssen.org/thyssen/home"
¿Cómo monitorizar?
HERRAMIENTAS
Behat
<form method="post" action="http://www.museothyssen.org/validation/resultados_buscador" id="cse-search-box">
<fieldset> <label for="buscar_thyssen">
<input type="text" id="buscar_thyssen" name="q"/> <input type="submit" name="sa" alt="Enviar" src="http://www.museothyssen.org/img/flecha33.png" id="submit_buscar_thyssen"
value=""/> </fieldset>
</form>
When I fill in "buscar_thyssen" with "tintoretto"
¿Cómo monitorizar?
HERRAMIENTAS
Behat
<form method="post" action="http://www.museothyssen.org/validation/resultados_buscador" id="cse-search-box">
<fieldset> <label for="buscar_thyssen">
<input type="text" id="buscar_thyssen" name="q"/> <input type="submit" name="sa" alt="Enviar" src="http://www.museothyssen.org/img/flecha33.png" id="submit_buscar_thyssen"
value=""/> </fieldset>
</form>
And I press "sa"
¿Cómo monitorizar?
HERRAMIENTAS
Behat
<ul class="listadoCalendario"> <li>
<a title=" <strong>TINTORETTO</strong>" href="http://www.museothyssen.org/thyssen/ficha_artista/558">
<strong>TINTORETTO</strong> <span>
Andrea Schiavone.
<strong>TINTORETTO</strong> empezó a ejercer como maestro independiente en 1539, cultivando en esos años asuntos religiosos,...
</span> </a>
</li>
</ul>
Then I should see "andrea"
¿Cómo monitorizar?
HERRAMIENTAS
¿Cómo monitorizar?
HERRAMIENTAS
Pingdom
¿Cómo monitorizar?
HERRAMIENTAS
New Relic Pingdom
¿Cómo monitorizar?
HERRAMIENTAS
Casos
Casos
SUPUESTO 1
Infraestructura:
o Varnish o Varias máquinas virtuales (webserver)
Problema:
o Una de cada 5 páginas vistas, por ejemplo se queda en blanco.
Casos
Página en blanco
Supuesto 1
Casos
Supuesto 1
Casos
Supuesto 1
Casos
Página en blanco
Supuesto 1
Casos
¿La caché de symfony de una de las máquinas virtuales no se ha generado correctamente? Unas veces si y otras no, ¿algo en una máquina?
Supuesto 1
CAUSA
Casos
Consulta de logs de symfony.
Supuesto 1
DETECCIÓN DEL PROBLEMA
Casos
• Parseo del fichero según criterios de búsqueda.
• Alertas a usuarios.
Supuesto 1
FUTURA MONITORIZACIÓN
Casos
Supuesto 1
EJEMPLO DE NOTIFICACIÓN
Casos
Supuesto 1
EJEMPLO DE NOTIFICACIÓN
Casos
VARIANTE DEL SUPUESTO 1
Casos
SUPUESTO 2
No login
Casos
SUPUESTO 2
Login
Casos
SUPUESTO 2
La visualización de esta pequeña parte de pantalla, cambia aleatoriamente.
Casos
CAUSA
¿Tener varios varnish? ¿APC?
¿Security.yml? ...
¿Mala suerte?
Supuesto 2
Casos
Factor humano
Supuesto 2
DETECCIÓN DEL PROBLEMA
Casos
Supuesto 2
POSIBLE SOLUCIÓN
Cambiar el hash por el que se cachea esa request en Varnish, mediante una cookie.
La cookie se crea y destruye en función del
acceso de cada usuario. La cookie contiene información reproducible por
el usuario.
Curiosidades
Curiosidades
Querido hacker,
Curiosidades
XXX - - [31/May/2013:11:00:29 -0400] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 239 "-" "ZmEu" "-" 0/905
XXX - - [31/May/2013:11:00:30 -0400] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 226 "-" "ZmEu" "-" 0/442
XXX - - [31/May/2013:11:00:30 -0400] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 226 "-" "ZmEu" "-" 0/341
XXX - - [31/May/2013:11:00:31 -0400] "GET /admin/scripts/setup.php HTTP/1.1" 404
221 "-" "ZmEu" "-" 0/312
XXX - - [31/May/2013:11:00:31 -0400] "GET /pma/scripts/setup.php HTTP/1.1" 404 219 "-" "ZmEu" "-" 0/370
XXX - - [31/May/2013:11:00:32 -0400] "GET /mysql/scripts/setup.php HTTP/1.1" 404 221 "-" "ZmEu" "-" 0/895
¡Ay truhán! que poco me conoces...
Curiosidades
Querido hacker, Toda relación es pasajera. Te enseñan lo que necesitas saber, y luego se van para continuar su camino.
Se te quiere...
Preguntas
Muchas gracias
@jautu
[email protected] http://es.linkedin.com/in/cristinaquintanacano
http://joind.in/talk/view/8850
Contacto