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.