使用案例:InfluxDB与普罗米修斯

Spa*_*key 66 database influxdb prometheus

普罗米修斯网页之后,普罗米修斯和InfluxDB之间的一个主要区别就是用例:普罗米修斯存储时间序列只有InfluxDB更适合存储个别事件.由于在InfluxDB的存储引擎上做了一些重要工作,我想知道这是否仍然如此.

我想设置一个时间序列数据库,除了推/推模型(可能是性能上的差异),我看不出两个项目分开的大事.有人可以解释用例的区别吗?

Pau*_*Dix 81

这里有InfluxDB CEO和开发人员.下一版本的InfluxDB(0.9.5)将拥有我们的新存储引擎.使用该引擎,我们将能够有效地存储单个事件数据或定期采样系列.即不规则和规则的时间序列.

InfluxDB支持使用不同压缩方案的int64,float64,bool和字符串数据类型.普罗米修斯只支持float64.

对于压缩,0.9.5版本将具有与Prometheus竞争的压缩性.在某些情况下,我们会看到更好的结果,因为我们会根据我们看到的内容改变时间戳上的压缩.最佳案例场景是以固定间隔采样的常规系列.在那些默认情况下,我们可以压缩1k点时间戳作为8字节的开始时间,delta(Z字形编码)和计数(也是zig-zag编码).

根据我们所见的数据形状,压缩后平均每点2.5个字节.

YMMV基于您的时间戳,数据类型和数据的形状.例如,具有大的可变增量的纳秒级时间戳的随机浮点数将是最差的.

时间戳中的变量精度是InfluxDB的另一个特性.它可以表示秒,毫秒,微秒或纳秒刻度时间.普罗米修斯固定在几毫秒.

另一个区别是,在向客户端发送成功响应后,对InfluxDB的写入是持久的.Prometheus缓冲区在内存中写入,默认情况下每隔5分钟刷新一次,这会打开一个潜在数据丢失的窗口.

我们希望一旦0.9x版本的InfluxDB发布,它将是普罗米修斯用户使用长期指标存储(与Prometheus一起使用)的不错选择.我很确定Prometheus已经支持了,但在0.9.5版本下降之前它可能会有点不稳定.显然,我们必须共同努力并进行一系列测试,但这正是我所希望的.

对于单服务器度量标准的提取,我希望Prometheus能够获得更好的性能(尽管我们没有在这里进行测试并且没有数字),因为它们的数据模型更受限制,并且因为它们在写出索引之前不会将写入附加到磁盘.

两者之间的查询语言非常不同.我不确定他们支持我们还没有,反之亦然,所以你需要深入研究两者的文档,看看是否有你可以做的事情.从长远来看,我们的目标是使InfluxDB的查询功能成为Graphite,RRD,Prometheus和其他时间序列解决方案的超集.我说超集是因为我们想要在以后更多的分析函数中覆盖那些超集.显然我们有时间去那儿.

最后,InfluxDB的长期目标是通过群集支持高可用性和水平可伸缩性.当前的群集实现尚未完成功能,仅在alpha中.但是,我们正在努力,这是该项目的核心设计目标.我们的聚类设计是数据最终是一致的.

据我所知,Prometheus的方法是对HA使用双写(因此没有最终的一致性保证)并使用联合进行水平可伸缩性.我不确定如何跨联合服务器进行查询.

在InfluxDB集群中,您可以跨服务器边界进行查询,而无需通过网络复制所有数据.这是因为每个查询都被分解为一种可以即时运行的MapReduce作业.

可能还有更多,但这就是我现在能想到的.

  • Prometheus开发人员在这里.Paul是正确的,Prometheus是并且将永远是float-only(字符串可以通过标签以有限的方式),而InfluxDB支持许多数据类型.我认为查询语言在实践中的功效非常相似(Prometheus是Turing Complete).我们的HA方法是使用隔离的冗余服务器,alertmanager将从它们中删除警报.我们通常采用AP方法来监控而不是CP,因为丢失一些数据比监控下降更好.Prometheus旨在成为您在紧急情况下可以依赖的系统. (35认同)
  • 另一个普罗米修斯在这里开发.是的,普罗米修斯本身并不打算成为一个持久的长期存储.但在其他方面,它的范围更大,更多关于活动系统和服务监控:来自客户端库(它们不仅会说一些度量输出协议,还可以帮助您管理度量基元,如计数器,仪表,直方图和摘要) ,通过主动目标发现/数据收集,仪表板,一直提醒计算和通知处理.查询语言也不像SQL一样,但对于维度时间序列数据的计算非常有效. (13认同)
  • InfluxDB集群设计也主要是AP,但它的目标是最终保持一致.我们通过Hinted Handoff(当前版本中提供)和Active Anti-Entroy(我们将在0.9.6发布周期中开始)实现这一目标.显然我们还没有完成聚类,但那是设计目标.更多细节:https://influxdb.com/blog/2015/06/03/InfluxDB_clustering_design.html (9认同)
  • 这两者之间的主要设计差异意味着使用Prometheus,[除了*now*之外的时间戳附加的导入指标没有简单的方法](https://github.com/prometheus/pushgateway#about-timestamps).如果用例涉及可能遇到延迟的来源,这可能是一个交易破坏者.在这方面,InfluxDB [似乎没有受到这样的限制](https://docs.influxdata.com/influxdb/v0.13/introduction/getting_started/#writing-and-exploring-data). (8认同)
  • 是的,我必须抽出时间(重新)评估InfluxDB 0.9.5作为Prometheus的长期存储候选者 - 我希望它能解决我之前使用的所有/大多数问题.关于磁盘空间,摄取速度和查询性能的过去.我们真的希望将长期存储委托给外部系统(如InfluxDB,如果它运行良好),而不是试图自己解决. (7认同)

use*_*461 33

我们在其他答案中得到了两家公司的营销信息.现在让我们忽略它,回到时间数据系列的悲惨现实世界.

一些历史

InfluxDB和prometheus被用来取代过去时代的旧工具(RRDtool,graphite).

InfluxDB是一个时间序列数据库.Prometheus是一种度量标准收集和警报工具,其中只有一个存储引擎.(我实际上不确定你是否可以[或者应该]重复使用存储引擎)

限制

遗憾的是,编写数据库是一项非常复杂的任务.这些工具设法运送的唯一方法是删除与高可用性和群集相关的所有硬件功能.

说白了,它是一个只运行单个节点的应用程序.

Prometheus没有任何目标支持群集和复制.支持故障转移的官方方法是" 运行2个节点并将数据发送给它们 ".哎哟.(请注意,它是唯一可行的现有方式,它在官方文档中写了无数次).

InfluxDB多年来一直在谈论集群......直到3月份正式放弃.对于InfluxDB,群集不再存在于桌面上.把它忘了吧.当它完成时(假设它曾经)它将只在企业版中可用.

https://influxdata.com/blog/update-on-influxdb-clustering-high-availability-and-monetization/

在未来几年内,我们希望拥有一个精心设计的时间序列数据库,它可以处理与数据库相关的所有难题:复制,故障转移,数据安全,可扩展性,备份......

目前,没有银弹.

该怎么办

评估预期的数据量.

100个指标*100个来源*1秒=>每秒10000个数据点=>每天864个兆位数据点.

时间序列数据库的优点在于它们使用紧凑格式,压缩良好,聚合数据点,并清理旧数据.(另外,它们还具有与时间数据系列相关的功能.)

假设数据点被视为4个字节,那么每天只有几千兆字节.幸运的是,有10个核心和10 TB驱动器的系统随时可用.这可能在单个节点上运行.

另一种方法是使用经典的NoSQL数据库(Cassandra,ElasticSearch或Riak),然后设计应用程序中的缺失位.这些数据库可能没有针对那种存储进行优化(或者是现代数据库是如此复杂和优化,除非进行基准测试,否则无法确定).

您应该评估应用程序所需的容量.用这些不同的数据库写出概念证明并测量事物.

看看它是否属于InfluxDB的限制.如果是这样,那可能是最好的选择.如果没有,你将不得不在其他方面做出自己的解决方案.

  • 我们使用ElasticSearch在高负载下存储生产中的指标。我可以确认这对于该用例而言远非理想:没有内置的保留功能(我们在一侧使用Elastic的curator),没有内置的旧数据压缩(我们在一侧运行了自定义ETL)并且没有内置的发出警报(我们在侧面运行Yelp的ElastAlert)。 (2认同)

小智 17

InfluxDB根本无法保存1000台服务器的生产负载(指标).它在数据摄取方面存在一些实际问题,最终导致停滞/挂起和无法使用.我们尝试使用它一段时间,但一旦数据量达到某个临界水平,它就不能再使用了.没有内存或CPU升级帮助.因此,我们的经验肯定是避免它,它不是成熟的产品,并有严重的建筑设计问题.我甚至没有谈论Influx突然转向商业广告.

接下来我们研究了普罗米修斯,虽然它需要重写查询,但它现在摄取了4倍的指标,与我们尝试提供给Influx相比没有任何问题.所有这些负载都由单个Prometheus服务器处理,它快速,可靠,可靠.这是我们在相当沉重的负荷下经营庞大的国际网络商店的经验.

  • 我来这里是因为我们在 InfluxDB 上遇到了类似的问题,特别是内存问题。我们的部署规模稍小(数百台服务器)。感谢分享。 (2认同)

Tra*_*ear 5

IIRC当前的Prometheus实现是围绕单个服务器上的所有数据进行设计的.如果您拥有大量数据,则可能并非所有数据都适合普罗米修斯.

  • Prometheus开发人员可以将Prometheus扩展到单个服务器之外,尽管很少需要.我们重视可靠性而不是一致性,因为这适合于关键监控,因此避免群集.见http://www.robustperception.io/scaling-and-federating-prometheus/ (5认同)