我想设置statsd / graphite,以便我可以记录在HTML设备上运行的JS应用程序(即不在封闭的LAN环境中,并且可能包含大量我不直接控制的传入数据)。
我的约束:
- 入口点必须使用HTTP:这是通过简单的HTTP-to-UDP-statsd代理(例如github上的httpstatsd)解决的
- 必须抵抗单个服务器的故障(以对抗墨菲定律:)
- 必须水平可扩展:网络规模,宝贝!:)
- 架构应尽可能简单(且便宜)
- 我的服务器是虚拟机
- 数据文件将存储在Filer设备上(带有NFS)
- 我可以使用tcp / udp硬件负载平衡器
简而言之,数据路径:[客户端]-(http)-> [http2statsd]-(udp)-> [statsd]-(tcp)-> [石墨]-(nfs)-> [文件管理器]
到目前为止,我的发现:
- 缩放http2statsd部分很容易(无状态守护程序)
- 缩放statsd部分似乎并不简单(我想对于诸如sum,avg,min,max ...之类的汇总数据,我最终会在石墨中得到不连贯的值)。除非HTTP守护程序进行一致的哈希处理以分片密钥。也许是个主意...(但接着是HA的问题)
- 缩放石墨零件可以通过分片(使用碳中继)来完成(但这也不能解决HA问题)。显然,几个耳语实例不应该写入相同的NFS文件。
- 扩展文件管理器部分不是问题的一部分(但是IO越少越好:)
- 缩放Web应用程序似乎很明显(尽管我尚未测试),因为它们仅读取共享的NFS数据
因此,我想知道是否有人可以共享可靠的statsd / graphite部署经验和最佳实践?
阅读Etsy关于StatsD的博客文章上的评论后,他们写道他们每10秒钟提供StatsD 10,000-30,000个指标。我建议将一个http2statsd客户端链接到一个statsd服务器,如果发送到statsd的度量标准数量成为瓶颈,则将其分片。
—
pkhamre 2012年
您最终实现了吗?如果可以,您可以分享详细信息吗?
—
gf_