20.1MB
1.32MB
Graphite的正式版本是一个高度可扩展的实时图形系统。我们写应用的时候,可以把自己收集的所有数字时间序列数据发送到Graphite的处理后台,让你直接把这些数据全部可视化。
谁应该使用石墨?
任何想要长期跟踪任何值的人。如果你有一个可能随时间变化的数值,你可能想用一个图形来展示这个数值随时间的变化,那么Graphite或许可以满足你的需求。
具体来说,Graphite被设计用来处理数字时间序列数据。例如,石墨非常适合绘制股价图,因为它们是随时间变化的数字。无论是几个数据点,还是来自数千台服务器的几十个性能指标,Graphite都适合您。作为奖励,你不用提前知道这些东西的名字(谁愿意维持这么庞大的配置?);您只需要发送一个测量名称、一个时间戳和一个值,Graphite会处理剩下的事情。
石墨的可扩展性如何?
从CPU的角度来看,Graphite在前端和后端都是水平扩展的,这意味着您可以简单地添加更多的机器来获得更多的吞吐量。它还具有容错性,即丢失一台后端机器将导致最小的数据丢失(无论这台机器在内存中缓存什么),如果您有足够的备用容量来处理负载,它不会损坏系统。
从I/O的角度来看,在负载下,Graphite会非常快速地对许多不同的文件执行许多微小的I/O操作。这是因为发送到Graphite的每一个不同的指标都存储在自己的数据库文件中,这类似于许多基于RRD的工具的工作方式(drraw、Cacti、Centreon等。).事实上,Graphite最初确实使用RRD进行存储,直到出现了基本的限制,需要一个新的存储引擎。
高容量(每分钟更新数千个不同的指示器)几乎需要良好的RAID阵列和/或SSD。如果磁盘跟不上大量的小型写操作(每个数据点只有几个字节,但大多数标准磁盘每秒不能超过几千个I/O操作,即使很小),Graphite的后端会缓存传入的数据。当这种情况发生时,Graphite的数据库引擎whisper允许carbon一次写入多个数据点,从而提高整体吞吐量,但代价是将多余的数据缓存在内存中,直到可以写入为止。
Graphite还支持备用存储后端,这可以极大地改变这些特性。
图表的实时性如何?
非常实时。即使在负载较重的情况下,当每个时间间隔内的传入指标数量远大于存储系统执行I/O操作的速度,并且在存储管道中缓存了大量数据点时(见前面的问题解释),Graphite仍然可以绘制实时图形。诀窍是,当Graphite webapp收到绘制图形的请求时,它从磁盘和预存储缓存(如果有多个后端服务器,缓存可能是分布式的)中检索数据,并将两个数据源结合起来创建一个实时图形。
谁已经在使用石墨了?
Graphite由Orbitz内部开发,用于可视化各种关键运营数据,包括应用指标、数据库指标、销售等。在撰写本文时,Orbitz的生产系统每分钟可以处理大约160,000个不同的指标,这些指标运行在高速SAN上的两个niagra-2 Sun服务器上。
石墨是用什么写的?
Graphite webapp构建在Django web框架之上,使用ExtJS javascript GUI工具包。图形渲染使用Cairo图形库完成。后台和数据库都是纯Python写的。
谁来编写和维护石墨?
石墨最初是由Orbitz的克里斯·戴维斯开发的。Orbitz长期以来一直是开源社区的一部分,并发布了一些其他内部开发的产品。
Graphite目前由Graphite-Project GitHub组织的志愿者团队开发。