He instalado Graphite a través de Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) con nginx y PostgresSQL. Cuando le envío datos manualmente, crea la métrica pero todos sus puntos de datos son "Ninguno" (también conocido como nulo). Esto sucede también si ejecuto el ejemplo-client.py enviado 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
Y:
$ 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
Estos son, según ngrep, los datos que llegan al puerto [desde un intento posterior] (línea 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Esta es la parte relevante de /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
¿Alguna idea de lo que está mal? Las propias métricas y datos de Carbon se muestran en la interfaz de usuario. ¡Gracias!
Entorno: Ubuntu 13.10 Saucy, grafito 0.9.12 (a través de pip).
PD: He escrito sobre mis intentos de solución de problemas aquí: Graphite muestra métricas pero no hay datos - Solución de problemas
ACTUALIZACIÓN :
- Los puntos de datos en los archivos de susurro solo se recuperan cada 1m min incluso si la política de retención especifica una precisión más alta como "1s" o "10s".
- Solución alternativa para los datos que se ignoran: utilice un esquema de agregación con
xFilesFactor = 0.1
(en lugar de 0.5) o establezca la precisión más baja en 1 m en lugar de <número entre 1-49> s. - vea los comentarios debajo de la respuesta aceptada o la pregunta de Respuestas de grafito. Según los documentos : "xFilesFactor
debe ser un número de coma flotante entre 0 y 1, y especifica qué fracción de las ranuras del nivel de retención anterior debe tener valores no nulos para agregar a un valor no nulo. El valor predeterminado es 0.5 " . Por lo tanto, parece que sin tener en cuenta la precisión especificada de 1s, los datos se agregan a 1 minuto y terminan siendo Ninguno porque menos del 50% de los valores en el período de minutos no son Ninguno.
SOLUCIÓN
Entonces @jlawrie me llevó a la solución. Resulta que los datos están realmente allí, pero están agregados a nada, la razón es doble:
- Tanto la interfaz de usuario como la búsqueda de susurro muestran datos agregados con la máxima precisión que abarca todo el período de consulta, que por defecto es de 24 h. Es decir, cualquier cosa con retención <1d nunca se mostrará en la interfaz de usuario o buscará a menos que seleccione un período más corto. Dado que mi período de retención de 1s fue de 30 minutos, tendría que seleccionar un período de <= últimos 30 minutos para ver realmente los datos sin procesar con la mayor precisión que se recopila.
- Al agregar datos (de 1s a 1min en mi caso), Graphite requiere por defecto que el 50% (xFilesFactor = 0.5) de los puntos de datos en el período tengan valor. Si no, ignorará los valores existentes y los agregará a Ninguno. Entonces, en mi caso, necesitaría enviar datos al menos 30 veces en un minuto (30 es el 50% de 60s = 1 minuto) para que se muestren en el valor agregado de 1 minuto. Pero mi aplicación solo envía datos cada 10 segundos, por lo que solo tengo 6 de los 60 valores posibles.
=> la solución es cambiar la primera precisión de 1s a 10s y recordar seleccionar un período más corto cuando quiera ver los datos sin procesar (o extender su retención a 24h para mostrarlos por defecto).
fuente
Respuestas:
Encontré el mismo problema al usar ese mismo módulo de marionetas. No estoy exactamente seguro de por qué, pero cambiar la política de retención predeterminada parece solucionarlo, por ejemplo
fuente
'1m:1d,5m:2y
funciona (datos recuperados),10s:30m,1m:1d,5m:2y
no. En realidad, desde el archivo .wsp parece que se ignora la granularidad <1m ya que las marcas de tiempo para los 10s: ... config todavía están en intervalos de 1 min - "08:17:00, 08:18:00, etc."xFilesFactor
, el (valor predeterminado) que se aplica aquí es promedio yxFilesFactor=0.5
(ver/opt/graphite/conf/storage-aggregation.conf
). Cuando cambio asum
y0.1
al cambiar el nombre, los datos se almacenan (aunque los puntos todavía están a 1m de frecuencia):echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
xFilesFactor = 0.1
, el agg. el método no importa (al menos todo el promedio, último, suma de trabajo).Graphite perderá datos de muchas maneras, por eso realmente trato de evitar usarlo. Permítanme comenzar con uno simple: intente que su aplicación se conecte, espere un segundo (literalmente un segundo) y luego envíe los datos con marca de tiempo. He encontrado en muchas circunstancias que esto solucionará ese problema exacto. Otra cosa que debe intentar es enviar datos a una frecuencia mucho mayor que la frecuencia con la que el grafito registra datos. Entraré en eso un poco más. Otro error frecuente es usar la utilidad whisper-resize.py, que realmente no funcionó para mí. Si sus datos aún no son importantes, simplemente elimine los archivos de susurro y deje que se creen con la nueva configuración de retención.
Los archivos de almacenamiento de grafito, los archivos de susurro, en lugar de almacenar los datos como un punto con un valor y un tiempo (como proporcionó el programa) en realidad lo almacenan como una serie de ranuras en las que se almacena el valor. El programa luego intenta averiguar qué ranura corresponde a un período de tiempo utilizando el archivo de datos de retención. Si obtiene datos que no encajan exactamente en una ranura, creolo que sucede es que usa un promedio, mínimo o máximo dependiendo de otro archivo en el mismo directorio que el archivo de retención. Encontré que la mejor manera de evitar que eso arruinara todo era enviar datos a una frecuencia mucho mayor que la frecuencia con la que el grafito almacenaba datos. Honestamente, se vuelve súper complicado: no solo hay períodos de retención para el grafito y algoritmos de promedio que llenan los puntos (creo), sino que estos valores también se aplican a los archivos de susurro. Sucederán cosas muy extrañas cuando no coincidan, por lo que hasta que su configuración esté funcionando, sugeriría eliminar sus archivos de susurro repetidamente y dejar que el grafito los vuelva a crear.
Este programa realmente me pareció que actuaba con errores, así que si encuentras algo como esto, no asumas que es tu culpa.
fuente