Sistema monitorización con Symfony2, RabbitMQ, MongoDB y ExtJS4

5,366 views
5,295 views

Published on

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

No Downloads
Views
Total views
5,366
On SlideShare
0
From Embeds
0
Number of Embeds
2,499
Actions
Shares
0
Downloads
124
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Veremos porqué hemos creado nuestro propio sistema de monitorización, la tecnología utilizada y los componentes que componen el sistema.\n
  • ¿Porqué crear otro sistema de monitorización?\n
  • \n
  • No había nada bueno en PHP.\nHay en Ruby, ¿pero si lo tenemos que adaptar?\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • \n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • \n
  • Explicar para qué utilizamos cada tecnología\nBúscamos minimizar las tecnologías que utilizamos en la empresa.\nPHP, Symfony, RabbitMQ y ExtJS ya las utilizábamos.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Sistema monitorización con Symfony2, RabbitMQ, MongoDB y ExtJS4

    1. 1. Nos presentamos Joan Valduvieco joan.valduvieco@ofertix.com Jordi Llonch jordi.llonch@ofertix.com @jordillonch
    2. 2. ¿Qué es?
    3. 3. vendemos productos y servicios a precios interesantes por internet
    4. 4. cada día abrimos 2-6 pequeñas tiendas durante 3-4 días
    5. 5. vendemosoportunidades de ocio
    6. 6. perfumería y cosmética
    7. 7. productos de temporada
    8. 8. hasta tenemos unatienda de las de toda la vida...
    9. 9. en todos los proyectos IT está en el camino crítico
    10. 10. vale pues tendréis unequipo de IT grande y a picar código, no?
    11. 11. bueno...
    12. 12. venimos de un equipo pequeño...
    13. 13. que hacía software...
    14. 14. era
    15. 15. ágil
    16. 16. rápido
    17. 17. barato
    18. 18. luego el proyecto fue creciendo
    19. 19. pero no queríamosperder los orígenes...
    20. 20. por eso empezamos con...
    21. 21. continuous deployment
    22. 22. requisitos ágiles
    23. 23. pequeños pasos hacia el objetivo
    24. 24. KISS
    25. 25. test mínimopero suficiente para nosotros
    26. 26. pero hoy hablaremos de...
    27. 27. MONITORIZACIÓN
    28. 28. y de cómo y porqué monitorizamos
    29. 29. Para nosotros es vital
    30. 30. nuestro proyecto está vivo
    31. 31. cada día cambia MUCHOen un año hemos añadido 3 líneas de negocio
    32. 32. así que los tests quedan obsoletos muy rápido
    33. 33. Cuando algo va mal
    34. 34. si no lo vemos no pasa para nosotros ...
    35. 35. en producción SIEMPRE hay fallosAunque hayamucho test
    36. 36. las cosas se estropean
    37. 37. pero al final losusuarios son los que lo “sufren”
    38. 38. y normalmente nollaman para quejarse
    39. 39. si sabemos que lascosas se rompen o que a veces la liamos...
    40. 40. como mínimointentemos tardar poco en arreglarlo
    41. 41. podriamos ser instaladores de antenas...
    42. 42. y eso nos haría poco ágiles
    43. 43. pero tenemos la suerte de desarrollar webs
    44. 44. así que podemos...
    45. 45. actualizar el código de la web en minutos
    46. 46. y hacer rollback en segundos... si algo va mal...
    47. 47. tenemos la mayoría de código en un mismo sitio
    48. 48. sólo una versión delcódigo en producción
    49. 49. tenemos conexióndirecta con los clientes
    50. 50. y miles de clientesusando nuestro código
    51. 51. ¡usemos esasventajas para ser más eficientes!
    52. 52. un día decidimos que...
    53. 53. íbamos a buscar elbalance entre test y monitorización
    54. 54. actualizaríamos produccióncon mucha frecuencia
    55. 55. haríamos cambios pequeños
    56. 56. y si algo iba mal, loarreglaríamos rápido
    57. 57. pero para darnoscuenta, necesitábamos...
    58. 58. ¡MONITORIZAR!
    59. 59. vaaaale,¡monitorizaremos!
    60. 60. al monitorizar nosdamos cuenta de que...
    61. 61. ¿3.2 es normal?
    62. 62. si no tenemos histórico no sabemos si lo que vemos es normal
    63. 63. así que es mejorempezar temprano a monitorizar
    64. 64. también tendremos falsas alarmas...
    65. 65. realmenteinoportunas
    66. 66. pero si no monitorizas no te das cuenta
    67. 67. hasta que es demasiado tarde
    68. 68. “Ui, al reiniciar algo no va bien”
    69. 69. es mejor que
    70. 70. “Ui, se nos ha caído todo”
    71. 71. al principio se ven muchos fallos¡paciencia y a solventarlos!
    72. 72. vale, usamos nagios, munin, etc...y ya lo tenemos, ¿no?
    73. 73. bueno...
    74. 74. nosotros usamos estasherramientas pero no nos sirven para todo
    75. 75. vamos a hablar denuestro sistema de monitorización
    76. 76. ¿pero por qué os hacéis un nuevo sistema de monitorización?
    77. 77. Sobretodo paraconocer los eventos de la aplicación y enlazarlos con los eventos del sistema
    78. 78. minimizar tecnologías KISS
    79. 79. adaptado a nuestras necesidades:
    80. 80. monitorizar logsparsear y actuar rápido!
    81. 81. deploy continuomonitorización en tiempo real y aviso sonoro
    82. 82. relacionar eventos con medidas gráficas con flags de eventos
    83. 83. todo el equipo tiene acceso a la monitorización
    84. 84. Miquel monitoriza
    85. 85. Jordi monitoriza
    86. 86. Dani también monitoriza
    87. 87. todosmonitorizamos
    88. 88. ¡venga al lío!
    89. 89. Componentes del sistema
    90. 90. obtien LogMonitor PublisherCli en datos PUB PUBRabbitMQ SUB SUBCollector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    91. 91. LogMonitor obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    92. 92. ¿qué es?
    93. 93. parsea archivos de log
    94. 94. publica errores y valores estadísticos
    95. 95. ¿cómo funciona?
    96. 96. kernel tail -farchivo.log parser actores
    97. 97. ¿qué necesita para funcionar?
    98. 98. 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_errors
    99. 99. ejemplo de código
    100. 100. Parser
    101. 101. Actor
    102. 102. PublisherCli obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    103. 103. ¿qué es?
    104. 104. publica eventos o valores desde la línea de comandos
    105. 105. está autocontenido en:publisher_cli.phar
    106. 106. unos ejemplos
    107. 107. evento: ¡OJO iniciamos backup!php publisher_cli.phar --name="backup started" --event
    108. 108. publicar valor desde shell script php publisher_cli.phar --name=log_length --types=value --value=”$(cat /tmp/file.log|grep error|wc -l)”
    109. 109. publicar valor desde STDIN while true; do ls | wc -l | php publisher_cli.phar --name=num_files --types=time --value=STDIN;sleep 5;done
    110. 110. obtien enCollector LogMonitor PublisherCli datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    111. 111. ¿qué es?
    112. 112. se suscribe al canal dónde sepublican los valores estadísticos
    113. 113. almacena valores estadísticos
    114. 114. ofrece una API para consultar estadística
    115. 115. un ejemplo
    116. 116. storage:  storage_1:    class: StatsStorageMongoFactory    config:      server: mongodb://localhost:27017      default_database: stats_myproject      autorotate: false      events_time_to_store: 365 # daysoutput:  storage: storage_1channel:  class: StatsChannelRabbitMQ  config:    debug: false    host: localhost    port: 5672    user: guest    pass: guest    vhost: /    exchanges:      - myproject_stats
    117. 117. stats:  default_types:    time:      operations:        - median        - percentile_95        - max        - min      retentions:        - 60s:1d            counter:      operations:        - count      retentions:        - 60s:1d        - 1h:15d
    118. 118. obtien enWebUIStats LogMonitor PublisherCli datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    119. 119. ¿qué es?
    120. 120. genera un UI web congráficos interactivos de tus estadísticas
    121. 121. un ejemplo
    122. 122. 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: 10display: title: Sentinel template: tpl_1_1 charts: - chart1
    123. 123. demo
    124. 124. WebUIMonitor obtien LogMonitor PublisherCli en datos PUB PUB PUB PUB RabbitMQ SUB SUB SUB SUB Collector WebUIMonitor utiliza n los da tos WebUIStats MongoDB
    125. 125. ¿qué es?
    126. 126. UI que muestra errores y eventos en tiempo real y reproduce un sonido para errores críticos
    127. 127. 2 partes
    128. 128. servidor websocket en PHP atendiendo a los clientes websocket y suscrito al canal de errores (RabbitMQ)
    129. 129. cliente Javascript que conecta con elservidor websocket y muestra los errores y reproduce sonidos
    130. 130. ¿qué pinta tiene?
    131. 131. WebUIMonitor
    132. 132. Tecnologías utilizadas O... qué juguetes nuevos tendré...
    133. 133. nuestro lenguaje base
    134. 134. ClassLoader
    135. 135. YAML
    136. 136. Console
    137. 137. mecanismo estándar de comunicación entre componentes
    138. 138. almacenamos valores estadísticos
    139. 139. pantallas de usuario ricas
    140. 140. comunicación bidireccional
    141. 141. enviamos errores yeventos en tiempo real al navegador
    142. 142. gráficas interactivas
    143. 143. permite mostrarmarcas de eventos
    144. 144. y hacer zoom
    145. 145. ¿Qué monitorizamos?
    146. 146. errores php, php-fpm,symfony, mysql, redis, 404...
    147. 147. tiempo de login
    148. 148. tiempo renderizado de páginas clave
    149. 149. número de logins por minuto
    150. 150. número de productosañadidos al carrito por minuto
    151. 151. número compras por minuto
    152. 152. etc...
    153. 153. ¿de qué nos ha servido todo esto?
    154. 154. nos dice cuando esimportante no fallar...
    155. 155. picos de compra
    156. 156. nos damos cuentacuando nos pasamos...
    157. 157. el deploy satura algo
    158. 158. previene desastres
    159. 159. algo se está rompiendo por momentos...
    160. 160. en general nos avisa de que hay algo para investigar
    161. 161. y nos conecta con la realidad de nuestro sistema
    162. 162. componente de alertas
    163. 163. persistenciaen el LogMonitor
    164. 164. errores producidos en el navegador
    165. 165. métricas desde elpunto de vista del navegador
    166. 166. mejoras en laarquitectura
    167. 167. conclusión
    168. 168. ¡MONITORIZA!
    169. 169. https://github.com/ofertix ¡muchas gracias!
    170. 170. Fuentes imágeneshttp://all-that-is-interesting.com/fixing-an-antennae-on-the-empire-state-buildinghttp://fountainxm.en.alibaba.com/column/207827945/Quality.htmlhttp://gooddeedaday.wordpress.com/2010/02/23/day-540-once-was-blind-but-now-i-see/http://www.squidoo.com/dangerous-bugshttp://www.veryicon.com/icons/object/lifesaver/red-life-saver.htmlhttp://www.etsy.com/listing/38951509/white-beach-pebbles-engraved-stone-triohttp://www.fastinternetbrowser.net/http://livewareis.blogspot.com.es/2011/07/mejora-de-procesos-una-opcion-para.htmlhttp://www.asianhealthsecrets.com/letha/?p=2314http://chocolatey.org/packages/mongodb

    ×