Instalei o Graphite via Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) com o nginx e o PostgresSQL. Quando envio dados manualmente, ele cria a métrica, mas todos os seus pontos de dados são "Nenhum" (também conhecido como nulo). Isso acontece também se eu executar o example-client.py enviado com o 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
Estes são, de acordo com o ngrep, os dados que chegam à porta [de uma tentativa posterior] (linha 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Esta é a parte relevante de /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Alguma idéia do que está errado? As métricas e os dados do Carbon são exibidos na interface do usuário. Obrigado!
Ambiente: Ubuntu 13.10 Saucy, grafite 0.9.12 (via pip).
PS: Eu escrevi sobre minhas tentativas de solução de problemas aqui - Grafite mostra métricas, mas não há dados - Solução de problemas
ATUALIZAÇÃO :
- Os pontos de dados nos arquivos whisper são recuperados apenas a cada 1 minuto, mesmo que a política de retenção especifique uma precisão mais alta, como "1s" ou "10s".
- Solução alternativa para os dados que estão sendo ignorados: use um esquema de agregação com
xFilesFactor = 0.1
(em vez de 0,5) ou configure a menor precisão para 1m em vez de <número entre 1-49> s. - veja os comentários abaixo da resposta aceita ou a pergunta Respostas de grafite. De acordo com a documentação : "xFilesFactor
deve ser um número de ponto flutuante entre 0 e 1 e especifica qual fração dos slots do nível de retenção anterior deve ter valores não nulos para agregar a um valor não nulo. O padrão é 0,5 " . Portanto, parece que, sem considerar a precisão especificada de 1s, os dados são agregados a 1 minuto e acabam sendo Nenhum, porque menos de 50% dos valores no período de minutos são diferentes de Nenhum.
SOLUÇÃO
Então, @jlawrie me levou à solução. Acontece que os dados estão realmente lá, mas são agregados a nada, o motivo é o dobro:
- A interface do usuário e a busca por sussurro mostram dados agregados com a maior precisão possível, que abrange todo o período da consulta, cujo padrão é 24h. Ou seja, qualquer coisa com retenção <1d nunca será exibida na interface do usuário ou será buscada, a menos que você selecione um período mais curto. Como meu período de retenção de 1s foi de 30 minutos, eu precisaria selecionar um período de <= últimos 30 minutos para realmente ver os dados brutos com a mais alta precisão sendo coletada.
- Ao agregar dados (de 1s a 1min no meu caso), o Graphite exige, por padrão, que 50% (xFilesFactor = 0,5) dos pontos de dados no período tenham valor. Caso contrário, ele ignorará os valores existentes e o agregará a Nenhum. Portanto, no meu caso, eu precisaria enviar dados pelo menos 30 vezes em um minuto (30 é 50% de 60s = 1min) para que eles apareçam no valor agregado de 1 minuto. Mas meu aplicativo envia apenas dados a cada 10s, então eu tenho apenas 6 dos 60 valores possíveis.
=> solução é alterar a primeira precisão de 1s para 10s e lembre-se de selecionar um período mais curto quando eu quiser ver os dados brutos (ou estender sua retenção para 24h para mostrá-lo por padrão).