Graphite는 데이터를 보내더라도 모든 데이터 포인트에 대해 “없음”을 표시합니다. None $ whisper-fetch.py –pretty /opt/graphite/storage/whisper/jakub/test.wsp |

nginx 및 PostgresSQL과 함께 Puppet ( https://forge.puppetlabs.com/dwerder/graphite )을 통해 Graphite를 설치했습니다 . 데이터를 수동으로 보내면 메트릭이 생성되지만 모든 데이터 포인트는 “없음”(일명 null)입니다. Graphite와 함께 제공된 example-client.py를 실행하는 경우에도 발생합니다.

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

과:

$ 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

이것은 ngrep에 따르면 [나중에 시도하여] 포트 3에 도착하는 데이터입니다.

####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
  jakub.test  45 1399362193.
####^Cexit
23 received, 0 dropped

이것은 다음의 관련 부분입니다 /opt/graphite/conf/storage-schemas.conf.

[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y

어떤 생각이 잘못 되었습니까? 카본 자체의 메트릭과 데이터가 UI에 표시됩니다. 감사합니다!

환경 : Ubuntu 13.10 Saucy, 흑연 0.9.12 (pip를 통해).

추신 : 여기에 문제 해결 시도에 대해 썼습니다 -Graphite는 메트릭을 보여 주지만 데이터는 없습니다 – 문제 해결

업데이트 :

  1. 보존 정책이 “1s”또는 “10s”와 같이 더 높은 정밀도를 지정하더라도 속삭임 파일의 데이터 포인트는 1 분마다 만 채점됩니다.
  2. 무시되는 데이터에 대한 해결 방법 : xFilesFactor = 0.1(0.5 대신)를 사용하여 집계 스키마를 사용 하거나 <1-49> 사이의 숫자 대신 가장 낮은 정밀도를 1m로 설정하십시오. -허용 된 답변 또는 흑연 답변 질문 아래의 의견을 참조하십시오. 문서에 따르면 : ” xFilesFactor0과 1 사이의 부동 소수점 숫자 여야하며 null이 아닌 값으로 집계하기 위해 이전 보유 레벨의 슬롯에서 널이 아닌 값을 가져야하는 비율을 지정합니다. 기본값은 0.5입니다. ” 따라서 1의 지정된 정밀도를 고려하지 않고 데이터는 1 분으로 집계되고 분 기간의 값의 50 % 미만이 없음이 아니므로 없음으로 끝납니다.

해결책

그래서 @jlawrie가 나를 해결책으로 인도했습니다. 실제로 데이터가 있지만 아무것도 집계되지 않은 것으로 나타났습니다. 이유는 두 배입니다.

  1. UI와 Whisper-fetch 는 전체 쿼리 기간에 걸쳐 최대 24 시간으로 고정밀 도로 집계 된 데이터를 표시합니다 . 즉, 보존 기간이 1d 미만인 항목은 더 짧은 기간을 선택하지 않으면 UI에 표시되거나 가져 오지 않습니다. 1 초 동안의 보존 기간은 30 분이므로 수집 된 최고 정밀도에서 원시 데이터를 실제로 보려면 <= 지난 30 분의 기간을 선택해야합니다.
  2. 데이터를 집계 할 때 (필자의 경우 1 초에서 1 분까지) Graphite는 기본적으로 기간의 데이터 포인트 중 50 % (xFilesFactor = 0.5)에 값이 있어야합니다. 그렇지 않으면 기존 값을 무시하고 없음으로 집계합니다. 따라서 필자의 경우 집계 된 1 분 값으로 표시되도록 1 분 내에 30 번 이상 데이터를 보내야합니다 (30은 60s의 50 % = 1 분). 그러나 내 응용 프로그램은 10 초마다 데이터를 보내므로 가능한 60 개 값 중 6 개만 있습니다.

=> 솔루션은 첫 번째 정밀도를 1에서 10으로 변경하고 원시 데이터를보고 싶을 때 더 짧은 기간을 선택하는 것을 잊지 마십시오 (또는 기본적으로 유지 시간을 24 시간으로 연장).



답변

동일한 퍼펫 모듈을 사용하여 동일한 문제가 발생했습니다. 이유를 정확히 모르겠지만 기본 보존 정책을 변경하면 문제가 해결됩니다 (예 :

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


답변

Graphite가 데이터를 잃어 버리는 방법에는 여러 가지가 있기 때문에 실제로 사용하지 않는 것이 좋습니다. 간단한 것으로 시작하겠습니다-응용 프로그램을 연결하고 1 초 (문자 그대로 1 초) 기다린 다음 타임 스탬프 된 데이터를 출력하십시오. 많은 상황에서 이것이 정확한 문제를 해결한다는 것을 알았습니다. 시도해야 할 또 다른 사항은 흑연이 데이터를 기록하는 빈도보다 훨씬 높은 빈도로 데이터를 제출하는 것입니다. 조금 더 들어가겠습니다. 또 다른 빈번한 실수는 whisper-resize.py 유틸리티를 사용하는 것입니다. 데이터가 아직 중요하지 않은 경우 속삭임 파일을 삭제하고 새로운 보존 설정으로 파일을 생성하십시오.

Graphite의 저장 파일 인 Whisper 파일은 데이터를 값과 시간이있는 포인트 (프로그램을 제공 한 것처럼)로 저장하는 대신 실제로 값이 저장되는 일련의 슬롯을 갖는 것으로 저장합니다. 보존 데이터 파일을 사용하여 어떤 슬롯이 특정 시간대에 해당하는지 파악하십시오. 이 데이터를 얻을 수 있다면 그것은 정확히 내가, 슬롯에 맞지 않는 생각결과는 보유 파일과 동일한 디렉토리에있는 다른 파일에 따라 평균, 최소 또는 최대를 사용하는 것입니다. 모든 것을 엉망으로 만드는 것을 막는 가장 좋은 방법은 흑연이 데이터를 저장하는 빈도보다 훨씬 높은 빈도로 데이터를 제출하는 것입니다. 솔직히 말하면 흑연의 보존 기간과 포인트를 채우는 평균 알고리즘이있을뿐만 아니라 위스퍼 파일에도 이러한 값이 적용됩니다. 일치하지 않으면 매우 이상한 일이 발생하므로 구성이 작동 할 때까지 속삭임 파일을 반복적으로 삭제하고 흑연을 다시 만들도록 제안하십시오.

이 프로그램은 정말 상당히 버그가 많은 행동을하게되므로이 같은 일이 발생하면 그것이 당신의 잘못이라고 생각하지 마십시오.


답변