J'ai installé Graphite via Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) avec nginx et PostgresSQL. Lorsque je lui envoie des données manuellement, il crée la métrique mais tous ses points de données sont "Aucun" (alias null). Cela se produit également si j'exécute le example-client.py fourni avec 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
Et:
$ 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
Il s'agit, selon ngrep, des données qui arrivent sur le port [d'une tentative ultérieure] (ligne 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
C'est la partie pertinente de /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Une idée de ce qui ne va pas? Les propres mesures et données de Carbon sont affichées dans l'interface utilisateur. Je vous remercie!
Environnement: Ubuntu 13.10 Saucy, graphite 0.9.12 (via pip).
PS: J'ai écrit sur mes tentatives de dépannage ici - Le graphite affiche des mesures mais pas de données - Dépannage
MISE À JOUR :
- Les points de données dans les fichiers chuchotés ne sont enregistrés que toutes les 1 min, même si la stratégie de rétention spécifie une précision plus élevée telle que «1s» ou «10s».
- Solution de contournement pour les données ignorées: utilisez un schéma d'agrégation avec
xFilesFactor = 0.1
(au lieu de 0,5) ou définissez la précision la plus faible sur 1 m au lieu de <nombre entre 1 à 49> s. - voir les commentaires sous la réponse acceptée ou la question Graphite Answers. Selon les documents : "xFilesFactor
devrait être un nombre à virgule flottante compris entre 0 et 1, et spécifie quelle fraction des emplacements du niveau de rétention précédent doit avoir des valeurs non nulles pour agréger à une valeur non nulle. La valeur par défaut est 0,5. " Il semble donc que sans tenir compte de la précision spécifiée de 1, les données sont agrégées à 1 minute et finissent par être Aucune car moins de 50% des valeurs de la période minute sont non nulles.
SOLUTION
@Jlawrie m'a donc conduit à la solution. Il s'avère que les données sont réellement là mais sont agrégées à rien, la raison est double:
- L'interface utilisateur et l'extraction par chuchotement affichent des données agrégées avec la plus haute précision qui s'étend sur toute la période de requête, par défaut à 24h. C'est-à-dire que tout ce qui a une rétention <1d ne s'affichera jamais dans l'interface utilisateur ou ne sera récupéré que si vous sélectionnez une période plus courte. Étant donné que ma période de rétention pendant 1 s était de 30 minutes, je devrais sélectionner une période de <= 30 dernières minutes pour voir réellement les données brutes avec la plus haute précision collectées.
- Lors de l'agrégation de données (de 1 s à 1 min dans mon cas), Graphite requiert par défaut que 50% (xFilesFactor = 0,5) des points de données de la période ont une valeur. Sinon, il ignorera les valeurs existantes et les agrégera à Aucun. Donc, dans mon cas, j'aurais besoin d'envoyer des données au moins 30 fois en une minute (30 correspond à 50% des 60 = 1 min) pour qu'elles apparaissent dans la valeur agrégée de 1 min. Mais mon application n'envoie des données que toutes les 10 secondes, je n'ai donc que 6 des 60 valeurs possibles.
=> la solution consiste à changer la première précision de 1s à 10s et n'oubliez pas de sélectionner une période plus courte lorsque je veux voir les données brutes (ou étendre leur rétention à 24h pour les afficher par défaut).