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:私はここに私のトラブルシューティングの試みについて書いています- グラファイトはメトリックを表示しますがデータはありません–トラブルシューティング
更新:
- ウィスパーファイルのデータポイントは、保持ポリシーで「1s」や「10s」などのより高い精度が指定されている場合でも、1分ごとにのみ再コアされます。
- 無視されるデータの回避策:
xFilesFactor = 0.1
(0.5の代わりに)で集計スキーマを使用するか、最低精度を<1-49の間の数値>ではなく1mに設定します。-承認された回答またはグラファイト回答の質問の下のコメントを参照してください。ドキュメントによれば、「xFilesFactor
0から1までの浮動小数点数であり、非ヌル値に集約するために、前の保持レベルのスロットの非ヌル値が必要な部分を指定します。デフォルトは0.5です。」したがって、指定された精度1に関係なく、データは1分に集約され、分の期間の値の50%未満がNon-Noneであるため、Noneになります。
解決
したがって、@ jlawrieが私をソリューションに導きます。データは実際にはそこにありますが、何も集約されていません。理由は二重です。
- UIとウィスパーフェッチの両方で、クエリ期間全体にわたる最高精度で集計されたデータが表示されます。デフォルトは24時間です。つまり、保持期間が1日未満のものは、短い期間を選択しない限り、UIまたはフェッチに表示されません。1秒間の保持期間は30分だったので、収集されている最高の精度で生データを実際に表示するには、過去30分以下の期間を選択する必要があります。
- データ(私の場合は1秒から1分)を集計する場合、Graphiteはデフォルトで期間内のデータポイントの50%(xFilesFactor = 0.5)に値があることを要求します。そうでない場合は、既存の値を無視して、Noneに集計します。そのため、私の場合、1分以内にデータを少なくとも30回送信する必要があります(30は60秒の50%= 1分)。集約された1分値に表示されるようにします。しかし、私のアプリは10秒ごとにデータを送信するだけなので、可能な60の値のうち6つしかありません。
=>解決策は、最初の精度を1秒から10秒に変更し、生データを表示するときはより短い期間を選択することを忘れないでください(またはデフォルトで24時間に保持を延長して表示します)。