Graphite mostra “None” para todos os pontos de dados, mesmo que eu os envie dados

8

Eu instalei o Graphite via Puppet ( link ) com nginx e PostgresSQL. Quando eu envio os dados manualmente, ele cria a métrica, mas todos os seus pontos de dados são "Nenhum" (a.k.a. null). Isso também acontece se eu executar o exemplo-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

Isto é, 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 ideia do que está errado? As métricas e dados do próprio Carbon são exibidos na interface do usuário. Obrigada!

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 sem dados - Solução de problemas

UPDATE :

  1. Os pontos de dados em arquivos sussurrados são recados somente a cada 1 minuto, mesmo que a política de retenção especifique uma precisão maior, como "1s" ou "10s".
  2. Solução alternativa para dados ignorados: use um esquema de agregação com xFilesFactor = 0.1 (em vez de 0,5) ou defina a menor precisão como 1m em vez de < number entre 1 e 49 > s. - veja os comentários abaixo da resposta aceita ou da pergunta Graphite Answers. De acordo com os documentos : " 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. "Parece que sem considerar a precisão especificada de 1s, os dados são agregados em 1 minuto e acabam sendo Nenhum porque menos de 50% dos valores no período de minuto são não-Nenhum.

SOLUÇÃO

Então @jlawrie me conduza à solução. Acontece que os dados estão realmente lá, mas são agregados a nada, a razão é dupla:

  1. A interface do usuário e a busca sussurrada mostram dados agregados com a mais alta precisão que abrange todo o período da consulta, cujo padrão é 24 horas. Ou seja qualquer coisa com retenção < O 1d nunca será exibido na interface do usuário ou buscar, a menos que você selecione um período mais curto. Como meu período de retenção para 1s era 30min, eu precisaria selecionar um período de < = últimos 30 min para realmente ver os dados brutos com a maior precisão sendo coletada.
  2. 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 irá ignorar os valores existentes e agregá-los a Nenhum. Então, 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 min. Mas meu aplicativo envia dados apenas a cada 10 segundos, então só tenho 6 dos 60 valores possíveis.

= > A 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á-los por padrão).

    
por Jakub Holý 05.05.2014 / 14:47

2 respostas

8

Encontrei o mesmo problema usando o mesmo módulo de fantoches. Não sei exatamente por quê, mas a alteração da política de retenção padrão parece corrigi-la, por exemplo,

class { 'graphite':
  gr_storage_schemas => [
    {
      name       => 'carbon',
      pattern    => '^carbon\.',
      retentions => '1m:90d'
    },
    {
      name       => 'default',
      pattern    => '.*',
      retentions => '1m:14d'
    }
  ],
}
    
por 06.05.2014 / 23:27
1

Existem muitas maneiras de o Graphite perder dados, e é por isso que eu realmente tento evitar usá-lo. Deixe-me começar com um simples - tente conectar seu aplicativo, espere um segundo (literalmente um segundo) e, em seguida, imprima os dados com registro de data e hora. Eu encontrei em muitas circunstâncias isso vai corrigir esse problema exato. Outra coisa que você deve tentar é enviar dados com uma frequência muito maior do que a frequência com que os dados de registros de grafite. Eu vou entrar nisso um pouco mais. Outro erro frequente é usar o utilitário whisper-resize.py, que realmente não funcionou para mim. Se seus dados ainda não são importantes, basta excluir os arquivos sussurrados e permitir que eles sejam criados com as novas configurações de retenção.

Os arquivos de armazenamento do Graphite, os arquivos sussurrados, em vez de armazenar os dados como um ponto com um valor e um tempo (como você forneceu o programa) o armazenam como uma série de slots nos quais o valor é armazenado. em seguida, tenta descobrir qual slot corresponde a um período de tempo usando o arquivo de dados de retenção. Se obtiver um dado que não se encaixa exatamente em um slot, acho que o que acontece é que ele usa uma média, min ou max 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 com uma frequência muito maior do que a frequência com que o grafite armazenava dados. Ele honestamente fica super complicado - não só há períodos de retenção para grafite, e algoritmos de média que preenchem pontos (eu acho), mas esses valores também são aplicados aos arquivos sussurrados. Coisas muito estranhas acontecerão quando elas não combinarem, então, até que sua configuração esteja funcionando, eu sugiro que você exclua seus arquivos sussurrantes repetidamente, e deixe o grafite recriá-los.

Este programa realmente me pareceu bastante problemático, por isso, se você encontrar algo assim, não assuma que a culpa é sua.

    
por 07.05.2014 / 00:25