Me gustaría configurar statsd / graphite para poder registrar aplicaciones JS que se ejecutan en dispositivos HTML (es decir, no en un entorno LAN contenido, y posiblemente con un gran volumen de datos entrantes que no controlo directamente).
Mis limitaciones:
- el punto de entrada debe hablar HTTP: esto se resuelve mediante un simple proxy HTTP-to-UDP-statsd (por ejemplo, httpstatsd en github)
- debe resistir la falla de un solo servidor (para combatir la ley de Murphy :)
- debe ser escalable horizontalmente: escala web, bebé! :)
- La arquitectura debe ser lo más simple (y barata) posible
- mis servidores son máquinas virtuales
- los archivos de datos se almacenarán en un dispositivo archivador (con NFS)
- Tengo equilibradores de carga de hardware tcp / udp a disposición
En resumen, la ruta de datos: [cliente] - (http) -> [http2statsd] - (udp) -> [statsd] - (tcp) -> [grafito] - (nfs) -> [archivador]
Mis hallazgos hasta ahora:
- escalar la parte http2statsd es fácil (demonios sin estado)
- escalar la parte de statsd no parece sencillo (supongo que terminaría con valores incoherentes en grafito para datos agregados como sum, avg, min, max ...). A menos que el demonio HTTP realice un hashing consistente para fragmentar las claves. Tal vez una idea ... (pero luego está la pregunta de HA)
- El escalado de la parte de grafito se puede hacer mediante fragmentación (usando el relé de carbono) (pero eso tampoco resuelve la pregunta de HA). Obviamente, varias instancias de susurro no deberían escribir el mismo archivo NFS.
- escalar la parte del archivador no es parte de la pregunta (pero cuanto menos IO, mejor :)
- escalar la aplicación web parece obvio (aunque no lo he probado) ya que solo leen los datos compartidos de NFS
Entonces, me preguntaba si alguien tenía experiencias y mejores prácticas para compartir para una implementación sólida de estadísticas / grafito.