Ich habe Graphite über Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) mit nginx und PostgresSQL installiert . Wenn ich Daten manuell sende, wird die Metrik erstellt, aber alle Datenpunkte sind "Keine" (auch bekannt als null). Dies passiert auch, wenn ich die mit Graphite gelieferte example-client.py ausführe.
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
Und:
$ 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
Dies sind laut ngrep die Daten, die [von einem späteren Versuch] am Port ankommen (Zeile 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Dies ist der relevante Teil von /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Irgendeine Idee was falsch ist? Die eigenen Metriken und Daten von Carbon werden in der Benutzeroberfläche angezeigt. Vielen Dank!
Umgebung: Ubuntu 13.10 Saucy, Graphit 0.9.12 (via Pip).
PS: Ich habe hier über meine Fehlerbehebungsversuche geschrieben - Graphit zeigt Metriken an, aber keine Daten - Fehlerbehebung
UPDATE :
- Datenpunkte in Flüsterdateien werden nur alle 1 Minute wiederhergestellt, selbst wenn die Aufbewahrungsrichtlinie eine höhere Genauigkeit wie "1s" oder "10s" angibt.
- Problemumgehung für ignorierte Daten: Verwenden Sie entweder ein Aggregationsschema mit
xFilesFactor = 0.1
(anstelle von 0,5) oder setzen Sie die niedrigste Genauigkeit auf 1 m anstelle von <Zahl zwischen 1-49> s. - Siehe die Kommentare unter der akzeptierten Antwort oder die Frage zu Graphite Answers. In den Dokumenten heißt es : " SolltexFilesFactor
eine Gleitkommazahl zwischen 0 und 1 sein und gibt an, welcher Bruchteil der Slots der vorherigen Aufbewahrungsstufe Nicht-Null-Werte haben muss, um zu einem Nicht-Null-Wert zu aggregieren. Der Standardwert ist 0,5. " Es scheint also, dass die Daten ohne Berücksichtigung einer festgelegten Genauigkeit von 1s zu 1 Minute aggregiert werden und am Ende "Keine" sind, da weniger als 50% der Werte im Minutenzeitraum "Keine" sind.
LÖSUNG
Also führte mich @jlawrie zur Lösung. Es stellt sich heraus, dass die Daten tatsächlich vorhanden sind, aber zu nichts aggregiert werden. Der Grund ist doppelt:
- Sowohl die Benutzeroberfläche als auch der Flüsterabruf zeigen Daten an, die mit höchster Genauigkeit aggregiert wurden und sich über den gesamten Abfragezeitraum erstrecken, der standardmäßig 24 Stunden beträgt. Dh alles mit einer Aufbewahrung <1d wird niemals in der Benutzeroberfläche angezeigt oder abgerufen, es sei denn, Sie wählen einen kürzeren Zeitraum. Da meine Aufbewahrungsdauer für 1s 30 Minuten betrug, musste ich einen Zeitraum von <= letzten 30 Minuten auswählen, um die Rohdaten tatsächlich mit der höchsten Genauigkeit zu sehen, die erfasst wird.
- Beim Aggregieren von Daten (in meinem Fall von 1s bis 1min) benötigt Graphite standardmäßig, dass 50% (xFilesFactor = 0,5) der Datenpunkte im Zeitraum einen Wert haben. Wenn nicht, werden die vorhandenen Werte ignoriert und zu Keine zusammengefasst. In meinem Fall müsste ich also mindestens 30 Mal innerhalb einer Minute Daten senden (30 ist 50% von 60s = 1min), damit sie im aggregierten 1-Minuten-Wert angezeigt werden. Meine App sendet jedoch nur alle 10 Sekunden Daten, sodass ich nur 6 der möglichen 60 Werte habe.
=> Die Lösung besteht darin, die erste Genauigkeit von 1s auf 10s zu ändern und einen kürzeren Zeitraum auszuwählen, in dem die Rohdaten angezeigt werden sollen (oder die Aufbewahrung auf 24 Stunden zu erweitern, um sie standardmäßig anzuzeigen).