Ho installato Graphite tramite Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) con nginx e PostgresSQL. Quando invio i dati manualmente, crea la metrica ma tutti i suoi punti dati sono "Nessuno" (aka null). Questo succede anche se eseguo example-client.py fornito con Graphite.
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
E:
$ 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
Questo è, secondo ngrep, i dati che arrivano alla porta [da un tentativo successivo] (linea 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Questa è la parte rilevante di /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Qualche idea su cosa sia sbagliato? Le metriche e i dati di Carbon sono visualizzati nell'interfaccia utente. Grazie!
Ambiente: Ubuntu 13.10 Saucy, grafite 0.9.12 (tramite pip).
PS: Ho scritto dei miei tentativi di risoluzione dei problemi qui - La grafite mostra metriche ma nessun dato - Risoluzione dei problemi
AGGIORNAMENTO :
- I punti dati nei file di sussurro vengono registrati solo ogni 1 m min anche se i criteri di conservazione specificano una precisione più elevata come "1s" o "10s".
- Soluzione alternativa per i dati ignorati: utilizzare uno schema di aggregazione con
xFilesFactor = 0.1
(anziché 0,5) o impostare la precisione più bassa su 1 m anziché <numero tra 1-49> s. - vedere i commenti sotto la risposta accettata o la domanda di risposta in grafite. Secondo i documenti : "xFilesFactor
dovrebbe essere un numero in virgola mobile compreso tra 0 e 1 e specifica quale frazione degli slot del livello di conservazione precedente deve avere valori non nulli per aggregare a un valore non nullo. Il valore predefinito è 0,5 " . Quindi, a prescindere dall'aver specificato la precisione di 1s, i dati vengono aggregati a 1 minuto e finiscono per essere Nessuno perché meno del 50% dei valori nel periodo dei minuti sono diversi da Nessuno.
SOLUZIONE
Quindi @jlawrie mi ha portato alla soluzione. Si scopre che i dati sono effettivamente lì ma sono aggregati a nulla, il motivo è doppio:
- Sia l'interfaccia utente che il whisper-fetch mostrano i dati aggregati con la massima precisione che copre l'intero periodo di query, il cui valore predefinito è 24 ore. Vale a dire qualsiasi cosa con conservazione <1d non verrà mai mostrata nell'interfaccia utente o nel recupero a meno che non selezioni un periodo più breve. Poiché il mio periodo di conservazione per 1 secondo era di 30 minuti, avrei bisogno di selezionare un periodo di <= ultimi 30 minuti per vedere effettivamente i dati grezzi con la massima precisione raccolti.
- Quando si aggregano i dati (da 1s a 1min nel mio caso), Graphite richiede per impostazione predefinita che il 50% (xFilesFactor = 0,5) dei punti dati nel periodo abbia valore. In caso contrario, ignorerà i valori esistenti e li aggregherà a Nessuno. Quindi, nel mio caso, dovrei inviare i dati almeno 30 volte in un minuto (30 è il 50% di 60s = 1min) affinché vengano visualizzati nel valore aggregato di 1 minuto. Ma la mia app invia dati ogni 10 secondi, quindi ho solo 6 dei 60 valori possibili.
=> soluzione è cambiare la prima precisione da 1s a 10s e ricordare di selezionare un periodo più breve quando voglio vedere i dati grezzi (o estendere la sua conservazione a 24 ore per mostrarlo per impostazione predefinita).