如何最少可能依靠石墨图

时间:2013-10-11 12:43:13

标签: ruby graphite statsd

require 'statsd'

statsd = Statsd.new('localhost', 8125).tap{|sd| sd.namespace = 'account'}

1.times do
  statsd.increment 'hitcount4'
end

sleep 5

5.times do
  statsd.increment 'hitcount4'
end

sleep 10

10.times do
  statsd.increment 'hitcount4'
end

我正在使用ruby gem statsd-ruby

我运行上面的脚本它成功执行,图表出现但我只能看到x轴上的一条线而没有(没有y轴的值),如何获取上面脚本的图形? / p>

我想记录每个增量调用。

/opt/graphite/statsd/local.js的内容

{
  graphitePort: 2003
, graphiteHost: "127.0.0.1"
, port: 8125
, backends: [ "./backends/graphite", "./backends/repeater", "./backends/console" ]
, repeater: [ { host: '10.1.2.15', port: 8125 } ]
, graphite: { legacyNamespace: false, globalPrefix: "rtpg.testing_server_2" }
, flushInterval: 10
}

/opt/graphite/conf/storage-schemas.conf

的内容
[carbon]
pattern = ^carbon\.
retentions = 60:90d

[stats]
pattern = ^stats.*
retentions = 1s:6h,10min:10d,10min:5y

[rtpg]
pattern = ^rtpg.*
retentions = 1s:7d,10s:21d,60s:5y

/opt/graphite/conf/storage-aggregation.conf

的内容
[rtpg]
pattern = .*
xFilesFactor = 0
aggregationMethod = sum


[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum

用,

  

本地主机:8090 /渲染目标= rtpg.testing_server_2.counters.account.hitcount4.count&安培;格式=原始

     浏览器上的

输出=>

     

.......... 0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0

  

//本地主机:8090 /渲染目标= rtpg.testing_server_2.counters.account.hitcount4.count&安培;格式= JSON

     

output =>

     

.................... [0.0,1381608024],[0.0,1381608025],[0.0,   1381608026],[0.0,1381608027],[0.0,1381608028],[0.0,1381608029],   [0.0,1381608030],[0.0,1381608031],[0.0,1381608032],[0.0,   1381608033],[0.0,1381608034],[0.0,1381608035],[0.0,1381608036],   [0.0,1381608037],[0.0,1381608038],[0.0,1381608039],[0.0,   1381608040],[0.0,1381608041],[0.0,1381608042],[0.0,1381608043],   [0.0,1381608044],[0.0,1381608045],[0.0,1381608046],[0.0,   1381608047],[0.0,1381808048],[0.0,1381608049],[0.0,1381608050],   [0.0,1381608051],[0.0,1381608052],[0.0,1381608053],[0.0,   1381608054],[0.0,1381608055],[0.0,1381608056]]}]

我将flush intervel(statsd)更新为6000,并更新了

/opt/graphite/conf/storage-schemas.conf

[carbon]
pattern = ^carbon\.
retentions = 60:90d

[rtpg]
pattern = ^rtpg.*
retentions = 1m:6h,1m:7d,10m:5y

并在我的脚本中运行了whisper-resize.py并将计数器名称更新为'hitcount6'并再次运行脚本,创建了一个新图形,问题仍然存在,实际上我想要的是石墨显示精确计数,如第一次增量,然后睡眠5分钟,然后5个增量,依此类推,我不想平均我的数据,最后我将创建一个xml报告,调用增量方法的次数。 $ whisper-info.py /opt/graphite/storage/whisper/rtpg/testing_server_2/counters/account/hitcount6/count.wsp

maxRetention: 604800
xFilesFactor: 0.0
aggregationMethod: sum
fileSize: 120988

Archive 0
retention: 604800
secondsPerPoint: 60
points: 10080
size: 120960
offset: 28

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:5)

长话短说:使用Graphite作为后端时,不能以低于1秒的间隔刷新Statsd

因为你已经指定了10毫秒的flushInterval,StatsD将每隔10毫秒刷新一次聚合数据点,其中Graphite将从100个中删除99个(除了10毫秒之外的其中一个刷新)。

首先,将其设置为低,会破坏Statsd的一些目的,因为它旨在充当可以减少石墨负载的聚合器。 ,将其设置为低于1秒的任何值将导致度量标准数据丢失。这是因为您可以在Graphite中存储的最精确度是1秒。因此,您每秒会向石墨发送100个数据点,而Graphite只会存储1个。您必须非常幸运地看到任何数据(因为它将采用最后一个指标(覆盖其他指标)。

您必须将StatsD中的刷新间隔与Graphite中最精确的模式设置(在存储架构配置中)相匹配。您可以使用的最低值为1秒,但建议使用10秒,以便StatsD可以代表您执行一些重要的聚合工作。

我建议你将最好的(第一个)精度更改为10秒,即保留10s:6h10s:7d(以及Statsd flushInterval到10000毫秒)这样Statsd和Graphite排好了。

下一步,进行上述更改,然后调整耳语文件的大小以确保已进行设置。也许您在存储指标后更改了石墨架构或聚合设置(在whisper = graphite的存储中),您仍然需要删除指标的.wsp文件(graphite会重新创建它们)或运行whisper-resize.py。耳语文件位于/graphite/storage/whisper/

最后验证设置。您可以通过在.wsp文件上运行whisper-info.py来验证某些私语数据的设置。在/ graphite / storage / whisper /中找到您的某个指标的.wsp文件 运行:whisper-info.py my_metric_data.wsp。 whisper-info.py输出应该告诉您有关存储设置如何工作的更多信息。