2013-07-04 8 views
15

etsy/statsdノードアプリケーションを実行しており、10秒ごとに統計情報をカーボン/ウィスパーにフラッシュします。あなたが最初の10秒で、100単位(カウント)を送信した場合、グラファイトは次のように、それらを適切に表示されます。正確なグラファイトの取得stats_counts

しかし、10秒後に
localhost:3000/render?from=-20min&target=stats_counts.test.count&format=json 

[{"target": "stats_counts.test.count", "datapoints": [ 
[0.0, 1372951380], [0.0, 1372951440], ... 
[0.0, 1372952460], [100.0, 1372952520]]}] 

、この数は、NULL、0まで低下し、または33.3。最終的には、最初のインクリメント数の1/6、この場合は16.6の値に落ち着きます。

/opt/graphite/conf/storage-schemas.confは次のとおりです。私は、正確なカウントを取得したいと思い

[sixty_secs_for_1_days_then_15m_for_a_month] 
pattern = .* 
retentions = 10s:10m,1m:1d,15m:30d 

、グラファイトは、60秒の窓を介してデータを平均するのではなく、おそらく、それを合計していますか?いくつかの時間が経過した後に、積分関数を使用して、明らかになります:

localhost:3000/render?from=-20min&target=integral(stats_counts.test.count)&format=json 

[{"target": "stats_counts.test.count", "datapoints": [ 
[0.0, 1372951380], [16.6, 1372951440], ... 
[16.6, 1372952460], [16.6, 1372952520]]}] 

答えて

27

Graphite data storage

グラファイトはストレージschemas.confストレージに保存された設定の組み合わせを使用してデータの保持を管理-aggregation.conf。あなたの保持ポリシー(あなたのstorage-schemas.confのスニペット)は、最高の解像度(例えば10s:10m)の1データポイントだけを保存するようにGraphiteに指示していて、データの経過とともにそれらのデータポイントの集計を管理する必要があります。 (低い解像度が定義された - 例えば1m:1d)より古い間隔に移動します。あなたの場合、データは10分で次の保持間隔に入り、10分後にstorage-aggregation.confの設定に従ってデータがロールアップされます。

Aggregation/Downsampling

凝集/ダウンサンプリングの場合、データの年齢を発生し、指定された低解像度の保持を有する時間間隔に該当します。あなたの場合、10秒間隔ごとに1データ点を保存していますが、そのデータが10分を超えると、グラファイトは1分間隔で1データ点としてデータを保存します。つまり、グラファイトにどのように10秒のデータポイント(そのうちの6分のデータポイント)を取得し、1分間に1データポイントに集計する必要があるかをグラファイトに伝える必要があります。それは平均か?それは合計する必要がありますか?データの種類(タイミング、カウンタなど)によっては、あなたのポストで示唆したように、これは大きな違いをもたらす可能性があります。

デフォルトでグラファイトは、より低い解像度のデータに集約するので、データを平均します。集計を実行するための平均値の使用は、タイマー(およびゲージ)データに適用すると意味があります。あなたはカウンターを扱っているので、の合計はになります。ストレージaggregation.conf、例えば

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

UI(生データ)凝集/ダウンサンプリング

集約/ダウンサンプリングデータが表現される方法を理解することも重要ですデータ保持スキーマのしきい値がグラフに直接影響を与えるため、グラフを表示したり、未加工(json)データをさまざまな期間表示したりするときに役立ちます。あなたの場合、あなたの10:10m境界を横切るrender?from=-20minを照会しています。

グラファイトは定義されている最低解像度の精度に従ってデータを表示し(リアルタイムのダウンサンプリングを行います)別の言い方をすれば、1つまたは複数の保存期間にまたがるデータをグラフ化すると、それに応じてロールアップが取得されることを意味します。例:retentions = 10s:10m、1m:1d、15m:30dの保持を前提とします。

最後の10分を超えないグラフのグラフは10秒の集計を表示します。 10分のしきい値を超えると、storage-aggregation.confのポリシー設定に従って1分分のカウントデータがロールアップされます。

概要/ tldr。

あなたはデータの価値は20分間の照会/グラフされているので(例えばrender?from=-20min)あなたは間違いなく(すなわち10秒:10メートル、1メートル:1D、15メートル:30D)を設定する精度の低いストレージに下落していることを意味しています集約は、集約ポリシーに従ってに発生しています。 storage-aggregation.confファイルの正しいパターンにsumを使用していることを確認する必要があります。さらに、グラフ/クエリの時間範囲を10分未満に短縮すると、動的なロールアップが回避されます。

+0

'render?from = -10min'を見て、それは期待どおりに動作するので、そこにスポットがあります。ありがとうございます。しかし、 'storage-aggregation.conf'には、' .count'メトリックを集計する行がありますので、グラファイト/カーボンによるダイナミック/パーマネント集約(永久ダウンサンプリングを行う人は誰ですか)がこれを無視しているようです。グラファイトのバグ(v0.9.10)、どのように/何が欠点であるかもしれないかについてのアドバイスは疑問だ。私はcarbon-cache.pyを停止して再起動しました。変更を有効にするためにグラファイトに同じ操作を行う必要がありますか? – AJP

+2

メトリックを保存した後で(スキン=グラファイトのストレージに)スキーマまたは集約設定を変更した場合は、メトリックの.wspファイルを削除するか(グラファイトで再作成するか)、whisper-resize.pyを実行する必要があります。 .wspファイルに対してwhisper-info.pyを実行することによって、いくつかの細かいデータを調べることで設定を確認することができます。/graphite/storage/whisper /にあるメトリックの1つの.wspファイルを探し、設定を検証します。 'whisper-info.py my_metric_data.wsp'を実行します。 whisper-info.pyの出力には、ストレージの設定がどのように機能しているかが表示されます。 –

+0

http://stackoverflow.com/questions/20433697/graphite-returning-incorrect-datapointで私を助けてください – GJain

関連する問題