データを送信しても、グラファイトですべてのデータポイントに「なし」と表示される


8

nginxとPostgresSQLを使用してPuppet(https://forge.puppetlabs.com/dwerder/graphite)からGraphiteをインストールしました。データを手動で送信すると、メトリックが作成されますが、そのデータポイントはすべて「なし」(別名null)です。これは、Graphiteに付属のexample-client.pyを実行した場合にも発生します。

echo "jakub.test 42 $(date +%s)" | nc 0.0.0.0 2003 # Carbon listens at 2003
# A minute or so later:
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | head -n1
Sun May  4 12:19:00 2014    None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | tail -n1
Mon May  5 12:09:00 2014    None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | grep -v None | wc -l
0

そして:

$ python /opt/graphite/examples/example-client.py 
# Wait until it sends two batches of data ...
$ whisper-fetch.py /opt/graphite/storage/whisper/system/loadavg_15min.wsp | grep -v None | wc -l
0

これは、ngrepによると、[後で試行して]ポートに到着するデータです(3行目):

####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
  jakub.test  45 1399362193. 
####^Cexit
23 received, 0 dropped

これはの関連部分です/opt/graphite/conf/storage-schemas.conf

[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y

何が間違っているのでしょうか?Carbon独自のメトリックとデータがUIに表示されます。ありがとうございました!

環境:Ubuntu 13.10 Saucy、グラファイト0.9.12(pip経由)。

PS:私はここに私のトラブルシューティングの試みについて書いています- グラファイトはメトリックを表示しますがデータはありません–トラブルシューティング

更新

  1. ウィスパーファイルのデータポイントは、保持ポリシーで「1s」や「10s」などのより高い精度が指定されている場合でも、1分ごとにのみ再コアされます。
  2. 無視されるデータの回避策:xFilesFactor = 0.1(0.5の代わりに)で集計スキーマを使用するか、最低精度を<1-49の間の数値>ではなく1mに設定します。-承認された回答またはグラファイト回答の質問の下のコメントを参照してください。ドキュメントによれば、xFilesFactor0から1までの浮動小数点数であり、非ヌル値に集約するために、前の保持レベルのスロットの非ヌル値が必要な部分を指定します。デフォルトは0.5です。」したがって、指定された精度1に関係なく、データは1分に集約され、分の期間の値の50%未満がNon-Noneであるため、Noneになります。

解決

したがって、@ jlawrieが私をソリューションに導きます。データは実際にはそこにありますが、何も集約されていません。理由は二重です。

  1. UIとウィスパーフェッチの両方で、クエリ期間全体にわたる最高精度で集計されたデータが表示されます。デフォルトは24時間です。つまり、保持期間が1日未満のものは、短い期間を選択しない限り、UIまたはフェッチに表示されません。1秒間の保持期間は30分だったので、収集されている最高の精度で生データを実際に表示するには、過去30分以下の期間を選択する必要があります。
  2. データ(私の場合は1秒から1分)を集計する場合、Graphiteはデフォルトで期間内のデータポイントの50%(xFilesFactor = 0.5)に値があることを要求します。そうでない場合は、既存の値を無視して、Noneに集計します。そのため、私の場合、1分以内にデータを少なくとも30回送信する必要があります(30は60秒の50%= 1分)。集約された1分値に表示されるようにします。しかし、私のアプリは10秒ごとにデータを送信するだけなので、可能な60の値のうち6つしかありません。

=>解決策は、最初の精度を1秒から10秒に変更し、生データを表示するときはより短い期間を選択することを忘れないでください(またはデフォルトで24時間に保持を延長して表示します)。


グラファイトは、nullで埋められた質問データセットに回答しますか?このコンテキスト(60秒ごとにnullがデフォルトで追加されること、最後の24時間のみが言及されている)、およびトラブルシューティングのためのngrepの推奨事項について興味深いです。
JakubHolý2014

-私は、グラファイトの回答でも助けを求めているanswers.launchpad.net/graphite/+question/248242
ヤクブ神聖に

ログを確認しましたか?受信したメトリックに問題がある場合(\ nがないか、代わりに\ r \ nを使用)、console.logまたはcreats.logに何かが表示されるはずです。デフォルトのインストールパスを使用した場合、これらのログは/ opt / graphite / storage / log / carbon-cache / carbon-cache-a /に保存されます。
mattsn0w 2014年

はい、ログを確認しました。何も興味がありませんでした。コンソールログには、基本的に「[..] 7002から始まるServerFactory [..]開始ファクトリ<twisted.internet.protocol.ServerFactory instance at 0x1bc4248>」のみがあり、予想されるメトリックの作成の記録がありましたが、データについての記述はありませんでした-f。例:(別のデータのない指標の場合) "[..]データベースファイルを作成しています/opt/graphite/storage/whisper/ring/handling-time/POST/15MinuteRate.wsp(archive = [(1、1800)、(60、1440 )、(300、210240)] xff = 0.5 agg = average) "
JakubHolý2014年

@JakubHolý質問に回答が含まれているため、jlawrieの回答を更新するか、別の回答を投稿してください
030

回答:


8

同じパペットモジュールを使用して同じ問題が発生しました。正確な理由はわかりませんが、デフォルトの保持ポリシーを変更すると修正されるようです。

class { 'graphite':
  gr_storage_schemas => [
    {
      name       => 'carbon',
      pattern    => '^carbon\.',
      retentions => '1m:90d'
    },
    {
      name       => 'default',
      pattern    => '.*',
      retentions => '1m:14d'
    }
  ],
}

どうもありがとう!この不可思議な変化は本当に助けになりました。興味深いことに、保持を「1s:30m、1m:1d、5m:2y」から「1m:14d」に変更すると、「修正」されます。もっと遊んでみます。1sの粒度に問題があるのでしょうか?
JakubHolý2014年

それは確かにsの期間に問題があるようです- '1m:1d,5m:2y動作している間(データの記録)、10s:30m,1m:1d,5m:2yそうではありません。実際、.wspファイルからは、10秒のタイムスタンプ:...構成がまだ1分間隔-"08:17:00、08:18:00など"であるため、1m未満の細分度は無視されるようです。
JakubHolý2014年

OK、問題は集約ポリシーとに関連してxFilesFactorいます。ここで適用される(デフォルト)は平均でありxFilesFactor=0.5(を参照/opt/graphite/conf/storage-aggregation.conf)。名前を変更して、名前を変更するsum0.1、データが保存されます(ポイントはまだ1m freqです):echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
JakubHolýMay

私はdiffで遊んだことがあります。集合。スキーマでは、agg を設定するとデータが(1m間隔で)記録されxFilesFactor = 0.1ます。メソッドは問題ではありません(少なくとも平均、最後、合計のすべて)。
JakubHolý2014年

よると、この、集約スキーマは、複数の保持ポリシーと遊びに来ます。保持ポリシーが1つしかない場合、10秒の解像度(データを送信する頻度)でも、個々のデータポイントを収集します。複数の保持ポリシーでは、クエリの時間範囲に基づいて1つが選択されます。whisper-fetch.py​​では、デフォルトで最終日になります。これが、1分ごとにしかデータポイントが表示されない理由だと思います。ただし、集計値ではなく、なぜNoneと表示されるのかはまだわかりません。
jlawrie 2014年

1

Graphiteがデータを失う方法はたくさんあります。そのため、私は実際にはデータの使用を避けようとしています。簡単なものから始めましょう。アプリケーションを接続して、1秒(文字通り1秒)待ってから、タイムスタンプ付きのデータを出力します。私は多くの状況でこれがその正確な問題を修正することを発見しました。あなたが試すべきもう一つのことは、グラファイトがデータを記録する頻度よりもはるかに高い頻度でデータを提出することです。もう少し詳しく説明します。もう1つのよくある間違いは、whisper-resize.pyユーティリティの使用ですが、これは実際には機能しませんでした。データがまだ重要ではない場合は、ウィスパーファイルを削除して、新しい保持設定で作成できるようにします。

グラファイトのストレージファイルであるウィスパーファイルは、値と時間を含むポイントとしてデータを保存するのではなく(プログラムを提供したように)、実際には、値が格納される一連のスロットを持つものとしてデータを格納します。次に、プログラムは保持データファイルを使用して、どのスロットが期間に対応するかを把握します。それはまさにスロットに収まらないデータを取得する場合、私は考えます保持ファイルと同じディレクトリにある別のファイルに応じて、平均、最小、または最大が使用されます。すべてを台無しにしないようにするための最良の方法は、グラファイトがデータを格納していた頻度よりもはるかに高い頻度でデータを送信することであることがわかりました。正直に言うと、非常に複雑になります。グラファイトの保持期間や、ポイントを埋める平均化アルゴリズムがあるだけでなく、これらの値はウィスパーファイルにも適用されます。これらが一致しない場合、非常に奇妙なことが起こります。そのため、設定が機能するまで、ウィスパーファイルを繰り返し削除し、グラファイトに再作成することをお勧めします。

このプログラムは、かなりバグのある行動をしているように感じました。このような問題が発生した場合は、それが自分の責任であるとは思わないでください。


ありがとう、データの取得と集計の仕組みについてもっと詳しく説明する必要があると思います。おそらくそれが問題の原因です。ただし、「グラファイトがデータを格納していた頻度よりもはるかに高い頻度でデータを送信する」は、各グラファイト期間に受信した最後のデータポイントのみが記録され、他は無視されるため、次善の策であると思います。そのためf.ex 。statsDフラッシュ期間は、グラファイト期間でなければなりません
JakubHolý2014年

1
ところで、グラファイト/カーボンの「失われた」データは、MAX_UPDATES_PER_SECOND = 500、MAX_CREATES_PER_MINUTE = 50などのカーボン設定に関連している可能性があります(データポイント/制限を超えたメトリックは削除されると思います)。
JakubHolý2014年

私が間違っていたようです、ドキュメント-私がそれを正しく解釈すると-上記の設定はディスクアクセスを制限しますが、データ/メトリックはまだメモリに保持されています(これを最初に確認したいのですが)。
JakubHolý2014年

それらのいくつかは、そのアプリケーションで発生した問題のいくつかを明確に説明できます。
一部のLinux Nerd 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.