我想设置 statsd/graphite,以便我可以记录在 HTML 设备上运行的 JS 应用程序(即不在包含的 LAN 环境中,并且可能有大量我无法直接控制的传入数据)。
我的限制:
- 入口点必须说 HTTP:这是通过一个简单的 HTTP-to-UDP-statsd 代理解决的(例如 github 上的 httpstatsd)
- 必须抵抗单个服务器的故障(与墨菲定律作斗争:)
- 必须是水平可扩展的:webscale,宝贝!:)
- 架构应该尽可能简单(和便宜)
- 我的服务器是虚拟机
- 数据文件将存储在文件管理器设备上(使用 NFS)
- 我可以使用 tcp/udp 硬件负载平衡器
总之,数据路径:[client] -(http)-> [http2statsd] -(udp)-> [statsd] -(tcp)-> [graphite] -(nfs)-> [filer]
到目前为止我的发现:
- 扩展 http2statsd 部分很容易(无状态守护进程)
- 缩放 statsd 部分似乎并不简单(我想我最终会在石墨中得到不连贯的值,例如 sum、avg、min、max ...)。除非 HTTP 守护进程进行一致的散列以对密钥进行分片。也许是一个想法......(但接下来是 HA 问题)
- 缩放石墨部分可以通过分片(使用碳继电器)来完成(但这也不能解决 HA 问题)。显然,多个耳语实例不应写入相同的 NFS 文件。
- 缩放文件管理器部分不是问题的一部分(但 IO 越少越好:)
- 扩展 webapp 似乎很明显(虽然我没有测试过),因为它们只读取共享的 NFS 数据
所以我想知道是否有人有经验和最佳实践可以分享一个可靠的 statsd/graphite 部署?