martes 19 de junio de 12
martes 19 de junio de 12
Nos presentamos                              Joan Valduvieco                              joan.valduvieco@ofertix.com     ...
¿Qué es?martes 19 de junio de 12
vendemos productos y                      servicios a precios                       interesantes por                      ...
cada día abrimos 2-6                             pequeñas tiendas                             durante 3-4 díasmartes 19 de...
martes 19 de junio de 12
vendemos                     oportunidades de ociomartes 19 de junio de 12
martes 19 de junio de 12
perfumería y cosméticamartes 19 de junio de 12
martes 19 de junio de 12
productos de                            temporadamartes 19 de junio de 12
martes 19 de junio de 12
hasta tenemos una                    tienda de las de toda la                              vida...martes 19 de junio de 12
martes 19 de junio de 12
en todos los proyectos                     IT está en el camino                            críticomartes 19 de junio de 12
vale pues tendréis un                  equipo de IT grande y a                     picar código, no?martes 19 de junio de 12
bueno...martes 19 de junio de 12
venimos de un equipo                            pequeño...martes 19 de junio de 12
que hacía software...martes 19 de junio de 12
eramartes 19 de junio de 12
ágilmartes 19 de junio de 12
rápidomartes 19 de junio de 12
baratomartes 19 de junio de 12
luego el proyecto fue                                creciendomartes 19 de junio de 12
pero no queríamos                           perder los orígenes...martes 19 de junio de 12
por eso empezamos                                  con...martes 19 de junio de 12
continuous deploymentmartes 19 de junio de 12
requisitos ágilesmartes 19 de junio de 12
pequeños pasos hacia el                       objetivomartes 19 de junio de 12
KISSmartes 19 de junio de 12
test mínimomartes 19 de junio de 12
test mínimo                           pero suficiente para                                nosotrosmartes 19 de junio de 12
pero hoy hablaremos                                   de...martes 19 de junio de 12
martes 19 de junio de 12
MONITORIZACIÓNmartes 19 de junio de 12
y de cómo y porqué                              monitorizamosmartes 19 de junio de 12
Para nosotros es vitalmartes 19 de junio de 12
nuestro proyecto                               está vivomartes 19 de junio de 12
cada día cambiamartes 19 de junio de 12
cada día cambia                            MUCHOmartes 19 de junio de 12
cada día cambia                                MUCHO                           en un año hemos añadido 3                  ...
así que los tests quedan                   obsoletos muy rápidomartes 19 de junio de 12
Cuando algo va malmartes 19 de junio de 12
si no lo vemos no pasamartes 19 de junio de 12
si no lo vemos no pasa                     para                  nosotros ...martes 19 de junio de 12
en producción                            SIEMPRE                             hay fallosmartes 19 de junio de 12
en producción                             SIEMPRE                              hay fallos                           Aunque...
las cosas se estropeanmartes 19 de junio de 12
pero al final los                    usuarios son los que lo                           “sufren”martes 19 de junio de 12
y normalmente no                           llaman para quejarsemartes 19 de junio de 12
si sabemos que las                   cosas se rompen o que                     a veces la liamos...martes 19 de junio de 12
como mínimo                 intentemos tardar poco                       en arreglarlomartes 19 de junio de 12
podriamos ser instaladores                       de antenas...martes 19 de junio de 12
y eso nos haría poco                                  ágilesmartes 19 de junio de 12
pero tenemos la suerte                     de desarrollar websmartes 19 de junio de 12
así que podemos...martes 19 de junio de 12
actualizar el código de                        la web en minutosmartes 19 de junio de 12
y hacer rollback en                                segundosmartes 19 de junio de 12
y hacer rollback en                                segundos                ... si algo va mal...martes 19 de junio de 12
tenemos la mayoría de                      código en un mismo                              sitiomartes 19 de junio de 12
sólo una versión del                           código en producciónmartes 19 de junio de 12
tenemos conexión                    directa con los clientesmartes 19 de junio de 12
y miles de clientes                    usando nuestro códigomartes 19 de junio de 12
¡usemos esas      ventajas para ser       más eficientes!martes 19 de junio de 12
¡usemos esas      ventajas para ser       más eficientes!martes 19 de junio de 12
un día decidimos que...martes 19 de junio de 12
íbamos a buscar el                           balance entre test y                            monitorizaciónmartes 19 de ju...
actualizaríamos                                producción                           con mucha frecuenciamartes 19 de junio...
haríamos cambios                               pequeñosmartes 19 de junio de 12
y si algo iba mal, lo                           arreglaríamos rápidomartes 19 de junio de 12
pero para darnos                 cuenta, necesitábamos...martes 19 de junio de 12
¡MONITORIZAR!martes 19 de junio de 12
vaaaale,                           ¡monitorizaremos!martes 19 de junio de 12
al monitorizar nos                    damos cuenta de que...martes 19 de junio de 12
¿3.2 es normal?martes 19 de junio de 12
si no tenemos histórico                    no sabemos si lo que                      vemos es normalmartes 19 de junio de 12
así que es mejor                           empezar temprano a                                monitorizarmartes 19 de junio...
también tendremos                             falsas alarmas...martes 19 de junio de 12
realmente                           inoportunasmartes 19 de junio de 12
realmente                           inoportunasmartes 19 de junio de 12
pero si no monitorizas                        no te das cuentamartes 19 de junio de 12
hasta que es demasiado                           tardemartes 19 de junio de 12
“Ui, al reiniciar algo no                        va bien”martes 19 de junio de 12
es mejor quemartes 19 de junio de 12
“Ui, se nos ha caído                                   todo”martes 19 de junio de 12
al principio se ven                              muchos fallos             ¡paciencia y a solventarlos!martes 19 de junio ...
vale, usamos nagios,                                munin, etc...                           y ya lo tenemos, ¿no?martes 19...
bueno...martes 19 de junio de 12
nosotros usamos estas                     herramientas pero no                      nos sirven para todomartes 19 de junio...
vamos a hablar de                           nuestro sistema de                             monitorizaciónmartes 19 de juni...
¿pero por qué os hacéis un             nuevo sistema de              monitorización?martes 19 de junio de 12
Sobretodo para                   conocer los eventos de                      la aplicación y                     enlazarlo...
minimizar tecnologías                                         KISSmartes 19 de junio de 12
adaptado a nuestras                              necesidades:martes 19 de junio de 12
monitorizar logsmartes 19 de junio de 12
monitorizar logs                           parsear y actuar   rápido!martes 19 de junio de 12
deploy continuomartes 19 de junio de 12
deploy continuo                           monitorización en                              tiempo real                      ...
relacionar eventos                              con medidasmartes 19 de junio de 12
relacionar eventos                              con medidas                              gráficas con                      ...
todo el equipo tiene                               acceso a la                             monitorizaciónmartes 19 de juni...
Miquel monitorizamartes 19 de junio de 12
Jordi monitorizamartes 19 de junio de 12
Dani también        monitorizamartes 19 de junio de 12
todosmonitorizamosmartes 19 de junio de 12
¡venga al lío!martes 19 de junio de 12
Componentes del                              sistemamartes 19 de junio de 12
obtien                             LogMonitor      PublisherCli          en                                               ...
obtien                             LogMonitor      PublisherCli          en                                               ...
obtien                             LogMonitor      PublisherCli          en                                               ...
obtien                             LogMonitor      PublisherCli          en                                               ...
obtien                             LogMonitor      PublisherCli           en                                              ...
LogMonitor                                                              obtien                              LogMonitor    ...
¿qué es?martes 19 de junio de 12
parsea archivos de logmartes 19 de junio de 12
publica errores y valores                                  estadísticosmartes 19 de junio de 12
¿cómo funciona?martes 19 de junio de 12
kernel                            tail -f              archivo.log                                       parser           ...
¿qué necesita para                               funcionar?martes 19 de junio de 12
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
test_error_access_log.yml                           upstreamerrors:                             file: test/error.log      ...
ejemplo de códigomartes 19 de junio de 12
Parsermartes 19 de junio de 12
Parsermartes 19 de junio de 12
Parsermartes 19 de junio de 12
Parsermartes 19 de junio de 12
Actormartes 19 de junio de 12
Actormartes 19 de junio de 12
obtien                             LogMonitor      PublisherCli           en                                              ...
PublisherCli                                                                 obtien                                 LogMon...
¿qué es?martes 19 de junio de 12
publica eventos o valores desde                          la línea de comandosmartes 19 de junio de 12
está autocontenido en:                           publisher_cli.pharmartes 19 de junio de 12
unos ejemplosmartes 19 de junio de 12
evento: ¡OJO iniciamos                          backup!         php publisher_cli.phar --name="backup                     ...
publicar valor desde shell                     script  php publisher_cli.phar --name=log_length                 --types=va...
publicar valor desde STDIN                 while true; do ls | wc -l | php                publisher_cli.phar --name=num_fi...
obtien                             LogMonitor      PublisherCli           en                                              ...
obtien                                                                    en               Collector                      ...
¿qué es?martes 19 de junio de 12
se suscribe al canal dónde se                    publican los valores estadísticosmartes 19 de junio de 12
almacena valores estadísticosmartes 19 de junio de 12
ofrece una API para consultar                                    estadísticamartes 19 de junio de 12
un ejemplomartes 19 de junio de 12
storage:                             storage_1:                               class: StatsStorageMongoFactory             ...
storage:                             storage_1:                               class: StatsStorageMongoFactory             ...
storage:                             storage_1:                               class: StatsStorageMongoFactory             ...
storage:                             storage_1:                               class: StatsStorageMongoFactory             ...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
stats:                             default_types:                               time:                                 oper...
obtien                             LogMonitor      PublisherCli           en                                              ...
obtien                                                                       en                 WebUIStats                ...
¿qué es?martes 19 de junio de 12
genera un UI web con                           gráficos interactivos de tus                                  estadísticasma...
un ejemplomartes 19 de junio de 12
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
charts:                 chart1:                   title: Sentinel 7 days                   options:                     xA...
martes 19 de junio de 12
demomartes 19 de junio de 12
obtien                             LogMonitor      PublisherCli           en                                              ...
WebUIMonitor                                                                  obtien                                  LogM...
¿qué es?martes 19 de junio de 12
UI que muestra errores y eventos                en tiempo real y reproduce un                 sonido para errores críticos...
2 partesmartes 19 de junio de 12
servidor websocket en PHP atendiendo a                los clientes websocket y suscrito al canal de                       ...
cliente Javascript que conecta con el               servidor websocket y muestra los errores y                            ...
¿qué pinta tiene?martes 19 de junio de 12
WebUIMonitormartes 19 de junio de 12
Tecnologías utilizadasmartes 19 de junio de 12
Tecnologías utilizadas                             O... qué juguetes nuevos tendré...martes 19 de junio de 12
martes 19 de junio de 12
nuestro lenguaje basemartes 19 de junio de 12
martes 19 de junio de 12
ClassLoadermartes 19 de junio de 12
YAMLmartes 19 de junio de 12
Consolemartes 19 de junio de 12
martes 19 de junio de 12
mecanismo estándar de                   comunicación entre                      componentesmartes 19 de junio de 12
martes 19 de junio de 12
almacenamos valores                               estadísticosmartes 19 de junio de 12
martes 19 de junio de 12
pantallas de usuario                                   ricasmartes 19 de junio de 12
martes 19 de junio de 12
comunicación                            bidireccionalmartes 19 de junio de 12
enviamos errores y                    eventos en tiempo real                         al navegadormartes 19 de junio de 12
martes 19 de junio de 12
gráficas interactivasmartes 19 de junio de 12
permite mostrar                           marcas de eventosmartes 19 de junio de 12
y hacer zoommartes 19 de junio de 12
¿Qué monitorizamos?martes 19 de junio de 12
errores php, php-fpm,                           symfony, mysql, redis,                                   404...martes 19 d...
tiempo de loginmartes 19 de junio de 12
tiempo renderizado de                         páginas clavemartes 19 de junio de 12
número de logins por                                 minutomartes 19 de junio de 12
número de productos                     añadidos al carrito por                            minutomartes 19 de junio de 12
número compras por                                minutomartes 19 de junio de 12
etc...martes 19 de junio de 12
¿de qué nos ha servido                          todo esto?martes 19 de junio de 12
nos dice cuando es                           importante no fallar...martes 19 de junio de 12
martes 19 de junio de 12
picos de compramartes 19 de junio de 12
nos damos cuenta                      cuando nos pasamos...martes 19 de junio de 12
martes 19 de junio de 12
el deploy satura algomartes 19 de junio de 12
previene desastresmartes 19 de junio de 12
martes 19 de junio de 12
algo se está rompiendo por momentos...martes 19 de junio de 12
en general nos avisa de que           hay algo para investigarmartes 19 de junio de 12
y nos conecta con la                            realidad de nuestro                                  sistemamartes 19 de j...
martes 19 de junio de 12
componente                            de alertasmartes 19 de junio de 12
persistencia                           en el LogMonitormartes 19 de junio de 12
errores producidos en                          el navegadormartes 19 de junio de 12
métricas desde el                           punto de vista del                              navegadormartes 19 de junio de...
mejoras en la                           arquitecturamartes 19 de junio de 12
martes 19 de junio de 12
conclusiónmartes 19 de junio de 12
martes 19 de junio de 12
¡MONITORIZA!martes 19 de junio de 12
https://github.com/ofertixmartes 19 de junio de 12
https://github.com/ofertix                     ¡muchas                     gracias!martes 19 de junio de 12
Fuentes imágenes           http://all-that-is-interesting.com/fixing-an-antennae-on-the-empire-state-building           htt...
Upcoming SlideShare
Loading in …5
×

Sistema monitorización ofertix

702 views

Published on

A presentation about our monitoring system that helps us being more agile and permits continuous deployment. It is in spanish.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
702
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sistema monitorización ofertix

  1. 1. martes 19 de junio de 12
  2. 2. martes 19 de junio de 12
  3. 3. Nos presentamos Joan Valduvieco joan.valduvieco@ofertix.com Jordi Llonch jordi.llonch@ofertix.com @jordillonchmartes 19 de junio de 12
  4. 4. ¿Qué es?martes 19 de junio de 12
  5. 5. vendemos productos y servicios a precios interesantes por internetmartes 19 de junio de 12
  6. 6. cada día abrimos 2-6 pequeñas tiendas durante 3-4 díasmartes 19 de junio de 12
  7. 7. martes 19 de junio de 12
  8. 8. vendemos oportunidades de ociomartes 19 de junio de 12
  9. 9. martes 19 de junio de 12
  10. 10. perfumería y cosméticamartes 19 de junio de 12
  11. 11. martes 19 de junio de 12
  12. 12. productos de temporadamartes 19 de junio de 12
  13. 13. martes 19 de junio de 12
  14. 14. hasta tenemos una tienda de las de toda la vida...martes 19 de junio de 12
  15. 15. martes 19 de junio de 12
  16. 16. en todos los proyectos IT está en el camino críticomartes 19 de junio de 12
  17. 17. vale pues tendréis un equipo de IT grande y a picar código, no?martes 19 de junio de 12
  18. 18. bueno...martes 19 de junio de 12
  19. 19. venimos de un equipo pequeño...martes 19 de junio de 12
  20. 20. que hacía software...martes 19 de junio de 12
  21. 21. eramartes 19 de junio de 12
  22. 22. ágilmartes 19 de junio de 12
  23. 23. rápidomartes 19 de junio de 12
  24. 24. baratomartes 19 de junio de 12
  25. 25. luego el proyecto fue creciendomartes 19 de junio de 12
  26. 26. pero no queríamos perder los orígenes...martes 19 de junio de 12
  27. 27. por eso empezamos con...martes 19 de junio de 12
  28. 28. continuous deploymentmartes 19 de junio de 12
  29. 29. requisitos ágilesmartes 19 de junio de 12
  30. 30. pequeños pasos hacia el objetivomartes 19 de junio de 12
  31. 31. KISSmartes 19 de junio de 12
  32. 32. test mínimomartes 19 de junio de 12
  33. 33. test mínimo pero suficiente para nosotrosmartes 19 de junio de 12
  34. 34. pero hoy hablaremos de...martes 19 de junio de 12
  35. 35. martes 19 de junio de 12
  36. 36. MONITORIZACIÓNmartes 19 de junio de 12
  37. 37. y de cómo y porqué monitorizamosmartes 19 de junio de 12
  38. 38. Para nosotros es vitalmartes 19 de junio de 12
  39. 39. nuestro proyecto está vivomartes 19 de junio de 12
  40. 40. cada día cambiamartes 19 de junio de 12
  41. 41. cada día cambia MUCHOmartes 19 de junio de 12
  42. 42. cada día cambia MUCHO en un año hemos añadido 3 líneas de negociomartes 19 de junio de 12
  43. 43. así que los tests quedan obsoletos muy rápidomartes 19 de junio de 12
  44. 44. Cuando algo va malmartes 19 de junio de 12
  45. 45. si no lo vemos no pasamartes 19 de junio de 12
  46. 46. si no lo vemos no pasa para nosotros ...martes 19 de junio de 12
  47. 47. en producción SIEMPRE hay fallosmartes 19 de junio de 12
  48. 48. en producción SIEMPRE hay fallos Aunque haya mucho testmartes 19 de junio de 12
  49. 49. las cosas se estropeanmartes 19 de junio de 12
  50. 50. pero al final los usuarios son los que lo “sufren”martes 19 de junio de 12
  51. 51. y normalmente no llaman para quejarsemartes 19 de junio de 12
  52. 52. si sabemos que las cosas se rompen o que a veces la liamos...martes 19 de junio de 12
  53. 53. como mínimo intentemos tardar poco en arreglarlomartes 19 de junio de 12
  54. 54. podriamos ser instaladores de antenas...martes 19 de junio de 12
  55. 55. y eso nos haría poco ágilesmartes 19 de junio de 12
  56. 56. pero tenemos la suerte de desarrollar websmartes 19 de junio de 12
  57. 57. así que podemos...martes 19 de junio de 12
  58. 58. actualizar el código de la web en minutosmartes 19 de junio de 12
  59. 59. y hacer rollback en segundosmartes 19 de junio de 12
  60. 60. y hacer rollback en segundos ... si algo va mal...martes 19 de junio de 12
  61. 61. tenemos la mayoría de código en un mismo sitiomartes 19 de junio de 12
  62. 62. sólo una versión del código en producciónmartes 19 de junio de 12
  63. 63. tenemos conexión directa con los clientesmartes 19 de junio de 12
  64. 64. y miles de clientes usando nuestro códigomartes 19 de junio de 12
  65. 65. ¡usemos esas ventajas para ser más eficientes!martes 19 de junio de 12
  66. 66. ¡usemos esas ventajas para ser más eficientes!martes 19 de junio de 12
  67. 67. un día decidimos que...martes 19 de junio de 12
  68. 68. íbamos a buscar el balance entre test y monitorizaciónmartes 19 de junio de 12
  69. 69. actualizaríamos producción con mucha frecuenciamartes 19 de junio de 12
  70. 70. haríamos cambios pequeñosmartes 19 de junio de 12
  71. 71. y si algo iba mal, lo arreglaríamos rápidomartes 19 de junio de 12
  72. 72. pero para darnos cuenta, necesitábamos...martes 19 de junio de 12
  73. 73. ¡MONITORIZAR!martes 19 de junio de 12
  74. 74. vaaaale, ¡monitorizaremos!martes 19 de junio de 12
  75. 75. al monitorizar nos damos cuenta de que...martes 19 de junio de 12
  76. 76. ¿3.2 es normal?martes 19 de junio de 12
  77. 77. si no tenemos histórico no sabemos si lo que vemos es normalmartes 19 de junio de 12
  78. 78. así que es mejor empezar temprano a monitorizarmartes 19 de junio de 12
  79. 79. también tendremos falsas alarmas...martes 19 de junio de 12
  80. 80. realmente inoportunasmartes 19 de junio de 12
  81. 81. realmente inoportunasmartes 19 de junio de 12
  82. 82. pero si no monitorizas no te das cuentamartes 19 de junio de 12
  83. 83. hasta que es demasiado tardemartes 19 de junio de 12
  84. 84. “Ui, al reiniciar algo no va bien”martes 19 de junio de 12
  85. 85. es mejor quemartes 19 de junio de 12
  86. 86. “Ui, se nos ha caído todo”martes 19 de junio de 12
  87. 87. al principio se ven muchos fallos ¡paciencia y a solventarlos!martes 19 de junio de 12
  88. 88. vale, usamos nagios, munin, etc... y ya lo tenemos, ¿no?martes 19 de junio de 12
  89. 89. bueno...martes 19 de junio de 12
  90. 90. nosotros usamos estas herramientas pero no nos sirven para todomartes 19 de junio de 12
  91. 91. vamos a hablar de nuestro sistema de monitorizaciónmartes 19 de junio de 12
  92. 92. ¿pero por qué os hacéis un nuevo sistema de monitorización?martes 19 de junio de 12
  93. 93. Sobretodo para conocer los eventos de la aplicación y enlazarlos con los eventos del sistemamartes 19 de junio de 12
  94. 94. minimizar tecnologías KISSmartes 19 de junio de 12
  95. 95. adaptado a nuestras necesidades:martes 19 de junio de 12
  96. 96. monitorizar logsmartes 19 de junio de 12
  97. 97. monitorizar logs parsear y actuar rápido!martes 19 de junio de 12
  98. 98. deploy continuomartes 19 de junio de 12
  99. 99. deploy continuo monitorización en tiempo real y aviso sonoromartes 19 de junio de 12
  100. 100. relacionar eventos con medidasmartes 19 de junio de 12
  101. 101. relacionar eventos con medidas gráficas con flags de eventosmartes 19 de junio de 12
  102. 102. todo el equipo tiene acceso a la monitorizaciónmartes 19 de junio de 12
  103. 103. Miquel monitorizamartes 19 de junio de 12
  104. 104. Jordi monitorizamartes 19 de junio de 12
  105. 105. Dani también monitorizamartes 19 de junio de 12
  106. 106. todosmonitorizamosmartes 19 de junio de 12
  107. 107. ¡venga al lío!martes 19 de junio de 12
  108. 108. Componentes del sistemamartes 19 de junio de 12
  109. 109. obtien LogMonitor PublisherCli en datos PUB PUB RabbitMQ SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  110. 110. obtien LogMonitor PublisherCli en datos PUB PUB RabbitMQ SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  111. 111. obtien LogMonitor PublisherCli en datos PUB PUB RabbitMQ SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  112. 112. obtien LogMonitor PublisherCli en datos PUB PUB RabbitMQ SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  113. 113. obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  114. 114. LogMonitor obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  115. 115. ¿qué es?martes 19 de junio de 12
  116. 116. parsea archivos de logmartes 19 de junio de 12
  117. 117. publica errores y valores estadísticosmartes 19 de junio de 12
  118. 118. ¿cómo funciona?martes 19 de junio de 12
  119. 119. kernel tail -f archivo.log parser actoresmartes 19 de junio de 12
  120. 120. ¿qué necesita para funcionar?martes 19 de junio de 12
  121. 121. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  122. 122. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  123. 123. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  124. 124. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  125. 125. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  126. 126. test_error_access_log.yml upstreamerrors:   file: test/error.log   file_stat: test/error.log.sdf   parser: LogMonitorParsersNginxErrorParser   actors:     - LogMonitorActorsErrorsErrorPhpActor     - LogMonitorActorsErrorsErrorSqlActor     - LogMonitorActorsErrorsErrorSymfonyActor   actor_config:     name: [test] error.log     publishers:       publisher_1:         class: LogMonitorPublishersRabbitMQ         config:           host: localhost           port: 5672           user: guest           pass: guest           vhost: /           exchange: myproject_errorsmartes 19 de junio de 12
  127. 127. ejemplo de códigomartes 19 de junio de 12
  128. 128. Parsermartes 19 de junio de 12
  129. 129. Parsermartes 19 de junio de 12
  130. 130. Parsermartes 19 de junio de 12
  131. 131. Parsermartes 19 de junio de 12
  132. 132. Actormartes 19 de junio de 12
  133. 133. Actormartes 19 de junio de 12
  134. 134. obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  135. 135. PublisherCli obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  136. 136. ¿qué es?martes 19 de junio de 12
  137. 137. publica eventos o valores desde la línea de comandosmartes 19 de junio de 12
  138. 138. está autocontenido en: publisher_cli.pharmartes 19 de junio de 12
  139. 139. unos ejemplosmartes 19 de junio de 12
  140. 140. evento: ¡OJO iniciamos backup! php publisher_cli.phar --name="backup started" --eventmartes 19 de junio de 12
  141. 141. publicar valor desde shell script php publisher_cli.phar --name=log_length --types=value --value=”$(cat /tmp/file.log|grep error|wc -l)”martes 19 de junio de 12
  142. 142. publicar valor desde STDIN while true; do ls | wc -l | php publisher_cli.phar --name=num_files --types=time --value=STDIN;sleep 5;donemartes 19 de junio de 12
  143. 143. obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  144. 144. obtien en Collector LogMonitor PublisherCli datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  145. 145. ¿qué es?martes 19 de junio de 12
  146. 146. se suscribe al canal dónde se publican los valores estadísticosmartes 19 de junio de 12
  147. 147. almacena valores estadísticosmartes 19 de junio de 12
  148. 148. ofrece una API para consultar estadísticamartes 19 de junio de 12
  149. 149. un ejemplomartes 19 de junio de 12
  150. 150. storage:   storage_1:     class: StatsStorageMongoFactory     config:       server: mongodb://localhost:27017       default_database: stats_myproject       autorotate: false       events_time_to_store: 365 # days output:   storage: storage_1 channel:   class: StatsChannelRabbitMQ   config:     debug: false     host: localhost     port: 5672     user: guest     pass: guest     vhost: /     exchanges:       - myproject_statsmartes 19 de junio de 12
  151. 151. storage:   storage_1:     class: StatsStorageMongoFactory     config:       server: mongodb://localhost:27017       default_database: stats_myproject       autorotate: false       events_time_to_store: 365 # days output:   storage: storage_1 channel:   class: StatsChannelRabbitMQ   config:     debug: false     host: localhost     port: 5672     user: guest     pass: guest     vhost: /     exchanges:       - myproject_statsmartes 19 de junio de 12
  152. 152. storage:   storage_1:     class: StatsStorageMongoFactory     config:       server: mongodb://localhost:27017       default_database: stats_myproject       autorotate: false       events_time_to_store: 365 # days output:   storage: storage_1 channel:   class: StatsChannelRabbitMQ   config:     debug: false     host: localhost     port: 5672     user: guest     pass: guest     vhost: /     exchanges:       - myproject_statsmartes 19 de junio de 12
  153. 153. storage:   storage_1:     class: StatsStorageMongoFactory     config:       server: mongodb://localhost:27017       default_database: stats_myproject       autorotate: false       events_time_to_store: 365 # days output:   storage: storage_1 channel:   class: StatsChannelRabbitMQ   config:     debug: false     host: localhost     port: 5672     user: guest     pass: guest     vhost: /     exchanges:       - myproject_statsmartes 19 de junio de 12
  154. 154. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  155. 155. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  156. 156. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  157. 157. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  158. 158. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  159. 159. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  160. 160. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  161. 161. stats:   default_types:     time:       operations:         - median         - percentile_95         - max         - min       retentions:         - 60s:1d              counter:       operations:         - count       retentions:         - 60s:1d         - 1h:15dmartes 19 de junio de 12
  162. 162. obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  163. 163. obtien en WebUIStats LogMonitor PublisherCli datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  164. 164. ¿qué es?martes 19 de junio de 12
  165. 165. genera un UI web con gráficos interactivos de tus estadísticasmartes 19 de junio de 12
  166. 166. un ejemplomartes 19 de junio de 12
  167. 167. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  168. 168. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  169. 169. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  170. 170. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  171. 171. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  172. 172. charts: chart1: title: Sentinel 7 days options: xAxis: maxZoom: 3600000 # 1h tooltip: yDecimals: 2 series: serie1: title: myweb average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_myweb_60s_7d/median/2/0 serie2: title: google average time (s) url: http://localhost/Collector/web/stats_events/ sys_myweb_sentinel_google_60s_7d/median/2/0 interval: 10 display: title: Sentinel template: tpl_1_1 charts: - chart1martes 19 de junio de 12
  173. 173. martes 19 de junio de 12
  174. 174. demomartes 19 de junio de 12
  175. 175. obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  176. 176. WebUIMonitor obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDBmartes 19 de junio de 12
  177. 177. ¿qué es?martes 19 de junio de 12
  178. 178. UI que muestra errores y eventos en tiempo real y reproduce un sonido para errores críticosmartes 19 de junio de 12
  179. 179. 2 partesmartes 19 de junio de 12
  180. 180. servidor websocket en PHP atendiendo a los clientes websocket y suscrito al canal de errores (RabbitMQ)martes 19 de junio de 12
  181. 181. cliente Javascript que conecta con el servidor websocket y muestra los errores y reproduce sonidosmartes 19 de junio de 12
  182. 182. ¿qué pinta tiene?martes 19 de junio de 12
  183. 183. WebUIMonitormartes 19 de junio de 12
  184. 184. Tecnologías utilizadasmartes 19 de junio de 12
  185. 185. Tecnologías utilizadas O... qué juguetes nuevos tendré...martes 19 de junio de 12
  186. 186. martes 19 de junio de 12
  187. 187. nuestro lenguaje basemartes 19 de junio de 12
  188. 188. martes 19 de junio de 12
  189. 189. ClassLoadermartes 19 de junio de 12
  190. 190. YAMLmartes 19 de junio de 12
  191. 191. Consolemartes 19 de junio de 12
  192. 192. martes 19 de junio de 12
  193. 193. mecanismo estándar de comunicación entre componentesmartes 19 de junio de 12
  194. 194. martes 19 de junio de 12
  195. 195. almacenamos valores estadísticosmartes 19 de junio de 12
  196. 196. martes 19 de junio de 12
  197. 197. pantallas de usuario ricasmartes 19 de junio de 12
  198. 198. martes 19 de junio de 12
  199. 199. comunicación bidireccionalmartes 19 de junio de 12
  200. 200. enviamos errores y eventos en tiempo real al navegadormartes 19 de junio de 12
  201. 201. martes 19 de junio de 12
  202. 202. gráficas interactivasmartes 19 de junio de 12
  203. 203. permite mostrar marcas de eventosmartes 19 de junio de 12
  204. 204. y hacer zoommartes 19 de junio de 12
  205. 205. ¿Qué monitorizamos?martes 19 de junio de 12
  206. 206. errores php, php-fpm, symfony, mysql, redis, 404...martes 19 de junio de 12
  207. 207. tiempo de loginmartes 19 de junio de 12
  208. 208. tiempo renderizado de páginas clavemartes 19 de junio de 12
  209. 209. número de logins por minutomartes 19 de junio de 12
  210. 210. número de productos añadidos al carrito por minutomartes 19 de junio de 12
  211. 211. número compras por minutomartes 19 de junio de 12
  212. 212. etc...martes 19 de junio de 12
  213. 213. ¿de qué nos ha servido todo esto?martes 19 de junio de 12
  214. 214. nos dice cuando es importante no fallar...martes 19 de junio de 12
  215. 215. martes 19 de junio de 12
  216. 216. picos de compramartes 19 de junio de 12
  217. 217. nos damos cuenta cuando nos pasamos...martes 19 de junio de 12
  218. 218. martes 19 de junio de 12
  219. 219. el deploy satura algomartes 19 de junio de 12
  220. 220. previene desastresmartes 19 de junio de 12
  221. 221. martes 19 de junio de 12
  222. 222. algo se está rompiendo por momentos...martes 19 de junio de 12
  223. 223. en general nos avisa de que hay algo para investigarmartes 19 de junio de 12
  224. 224. y nos conecta con la realidad de nuestro sistemamartes 19 de junio de 12
  225. 225. martes 19 de junio de 12
  226. 226. componente de alertasmartes 19 de junio de 12
  227. 227. persistencia en el LogMonitormartes 19 de junio de 12
  228. 228. errores producidos en el navegadormartes 19 de junio de 12
  229. 229. métricas desde el punto de vista del navegadormartes 19 de junio de 12
  230. 230. mejoras en la arquitecturamartes 19 de junio de 12
  231. 231. martes 19 de junio de 12
  232. 232. conclusiónmartes 19 de junio de 12
  233. 233. martes 19 de junio de 12
  234. 234. ¡MONITORIZA!martes 19 de junio de 12
  235. 235. https://github.com/ofertixmartes 19 de junio de 12
  236. 236. https://github.com/ofertix ¡muchas gracias!martes 19 de junio de 12
  237. 237. Fuentes imágenes http://all-that-is-interesting.com/fixing-an-antennae-on-the-empire-state-building http://fountainxm.en.alibaba.com/column/207827945/Quality.html http://gooddeedaday.wordpress.com/2010/02/23/day-540-once-was-blind-but-now-i-see/ http://www.squidoo.com/dangerous-bugs http://www.veryicon.com/icons/object/lifesaver/red-life-saver.html http://www.etsy.com/listing/38951509/white-beach-pebbles-engraved-stone-trio http://www.fastinternetbrowser.net/ http://livewareis.blogspot.com.es/2011/07/mejora-de-procesos-una-opcion-para.html http://www.asianhealthsecrets.com/letha/?p=2314 http://chocolatey.org/packages/mongodbmartes 19 de junio de 12

×