我有超过一百台服务器正在向我的statsd-graphite设置发送指标。公制子树中的叶子类似于 -
stats.dev.medusa.ip-10-0-30-61.jaguar.v4.outbox.get
stats.dev.medusa.ip-10-0-30-62.jaguar.v4.outbox.get
我的大多数抓取工具都是AWS spot-instances,这意味着它们中的20个随机变化,每次都会分配不同的IP地址。这意味着相同的列表变为 -
stats.dev.medusa.ip-10-0-30-6.<|subtree
stats.dev.medusa.ip-10-0-30-1.<|subtree
stats.dev.medusa.ip-10-0-30-26.<|subtree
stats.dev.medusa.ip-10-0-30-21.<|subtree
假设子树下的所有指标在总存储4G指标中,20个点实例下降,后来其中30个用不同的IP地址生成,意味着我的存储突然膨胀了120G。此外,这是每周一次。
虽然删除旧的IP子树简单明了,但我真的想保留这些指标。我可以在第0周有3个medusas,第1周有23个medusas,第2周有15个medus,第4周有40个。我可以选择什么?你会如何解决这个问题?
答案 0 :(得分:0)
我们通过不记录IP地址来实现这一点。使用确定性锁定概念,当实例出现时,它们请求机器ID。然后,他们可以使用此计算机ID而不是statsd存储桶的IP地址。
stats.dev.medusa.machine-1.<|subtree
stats.dev.medusa.machine-2.<|subtree
这意味着您最多只能拥有40个这样的存储桶。我们成功地使用了这个概念,在一个单独的机器上使用一个简单的数字分配器api来分配实例号。一旦机器具有实例编号,它就将其存储为该机器上的标签,因此我们的分配器可以查询ec2实例的标签以查看当前正在使用的内容。这允许它重新分配旧的机器ID。