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).
fonte
Respostas:
Encontrei o mesmo problema usando o mesmo módulo fantoche. Não sei exatamente por que, mas a alteração da política de retenção padrão parece corrigi-la, por exemplo,
fonte
'1m:1d,5m:2y
funciona (dados recuperados),10s:30m,1m:1d,5m:2y
não. Na verdade, a partir do arquivo .wsp, parece que a granularidade <1m é ignorada desde os carimbos de data / hora para os 10s: ... a configuração ainda está em intervalos de 1 minuto - "08:17:00, 08:18:00 etc."xFilesFactor
, o (padrão) que se aplica aqui é médio exFilesFactor=0.5
(consulte/opt/graphite/conf/storage-aggregation.conf
). Quando mudo parasum
e0.1
alterando o nome, os dados são armazenados (embora os pontos ainda estejam com 1m de freq):echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
xFilesFactor = 0.1
, o agg. O método não importa (pelo menos todo o trabalho médio, último, soma).Há muitas maneiras pelas quais o Graphite perde dados, e é por isso que realmente tento evitar usá-los. Deixe-me começar com um simples - tente conectar seu aplicativo, aguarde um segundo (literalmente um segundo) e depois envie os dados com registro de data e hora. Descobri em muitas circunstâncias que isso resolverá o problema exato. Outra coisa que você deve tentar é enviar dados em uma frequência muito superior à frequência na qual a grafite registra dados. Vou falar um pouco mais sobre isso. Outro erro frequente é usar o utilitário whisper-resize.py, que realmente não funcionou para mim. Se seus dados ainda não forem importantes, basta excluir os arquivos de sussurro e permitir que sejam criados com as novas configurações de retenção.
Os arquivos de armazenamento do Graphite, os arquivos whisper, em vez de armazenar os dados como um ponto com um valor e uma hora (como você forneceu o programa), na verdade, os armazenam como tendo uma série de slots nos quais o valor é armazenado. O programa tenta descobrir qual slot corresponde a um período usando o arquivo de dados de retenção. Se obtiver dados que não se encaixam exatamente em um slot, achoo que acontece é que ele usa uma média, um mínimo ou um máximo, dependendo de outro arquivo no mesmo diretório que o arquivo de retenção. Descobri que a melhor maneira de impedir que isso estragasse tudo era enviar dados em uma frequência muito superior à frequência na qual a grafite estava armazenando dados. Honestamente, fica super complicado - não apenas existem períodos de retenção para grafite e algoritmos de média que preenchem pontos (acho), mas esses valores também são aplicados aos arquivos whisper. Coisas muito estranhas acontecerão quando elas não corresponderem; portanto, até que sua configuração esteja funcionando, sugiro que você exclua seus arquivos sussurros repetidamente e deixe que a grafite os recrie.
Esse programa realmente me pareceu um buggy, portanto, se você encontrar algo assim, não pense que a culpa é sua.
fonte