Monitorización DeSymfony

Preview:

Citation preview

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

quintana.cano@gmail.com http://es.linkedin.com/in/cristinaquintanacano

http://joind.in/talk/view/8850

Contacto