Prometheus vs Graphite

半兽人 发表于: 2019-07-23   最后更新时间: 2019-07-23 23:07:40  
{{totalSubscript}} 订阅, 3,453 游览

Prometheus vs Graphite

范围

Graphite专注于查询语言和图表特征的时间序列数据库。其他都需要依赖外部组件实现。

Prometheus是一个基于时间序列数据的完整监控系统和趋势系统,包括内置和主动抓取、存储、查询、图表展示和报警功能。它懂得监控系统和趋势系统应该是什么样的(哪些目标机应该存在,哪些时间序列模型存在问题等等),并积极地试着找出故障

数据模型

Graphite和Prometheus一样,存储时间序列数值样本。但是Prometheus的元数据模型更加丰富:Graphite的度量指标名称是由”.”分隔符,隐式地编码多维度。而Prometheus度量指标是可以自定义名称的,并以key-value键值对的标签形式,成为度量指标的标签属性列表。并在此基础上,使用Prometheus查询语言可以轻松地进行过滤,分组和匹配操作。

进一步地,当Graphite与StatsD结合使用时,Graphite就只是对一个聚合数据的存储系统了,而不是把目标实例作为一个维度,并深入分析目标实例出现的各种问题。

例如:我们用Graphite/StatsD统计HTTP请求api-server服务的数量,前置条件:返回码是500,请求方法是POST,访问URL为/tracks , key如下所示:

stats.api-server.tracks.post.500 -> 93

但是在Prometheus中同样的数据存储可能像下面一样(假设有三个api-server):

api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample1>"} -> 34
api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample2>"} -> 28
api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample3>"} -> 31

由上可以看到,三个api-server各自的度量指标数据,Prometheus把api-server也作为了一个维度,便于分析api-server服务出现的各种问题

存储

Graphite存储以Whisper方式把时间序列数据存储到本地磁盘,这种数据存储格式是RRD格式数据库,它期望样本能够定期到达。 任何时间序列在一个单独的文件中存储,一段时间后新采集的样本会覆盖老数据

Prometheus也为每一个时间序列创建了一个本地文件,但是它允许时间序列以任意时间到达。新采集的样本被简单地追加到文件尾部,老数据可以任意长的时间保留。Prometheus对于短生命周期、且经常变化的时间序列集也可以表现得很好

总结

Prometheus提供了一个丰富的数据模型和查询语言,而且更加容易地运行和集成到你的环境中。如果你想要一个可以长期保留历史数据的集群解决方案,Graphite可能是一个更好的选择。

更新于 2019-07-23

查看Prometheus更多相关的文章或提一个关于Prometheus的问题,也可以与我们一起分享文章