Graphite는 데이터를 보내더라도 모든 데이터 포인트에 대해 "없음"을 표시합니다.


8

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 시간으로 연장).


흑연 답변 질문 데이터 세트가 널로 채워져 있습니까? 이 맥락에서 흥미 롭습니다 (60 초마다 기본 null 추가, 지난 24 시간 만 해당). 문제 해결을 위해 ngrep 권장 사항을 b / c.
Jakub Holý

- 난 흑연 답변에 또한 도움을 요청했다 answers.launchpad.net/graphite/+question/248242
야쿱 성령에게

로그를 확인 했습니까? 수신 된 측정 항목에 문제가있는 경우 (\ n 없음 또는 대신 \ r \ n 사용) console.log 또는 creates.log에 무언가 표시됩니다. 기본 설치 경로를 사용한 경우이 로그는 / opt / graphite / storage / log / carbon-cache / carbon-cache-a /에 저장됩니다.
mattsn0w

예, 로그를 확인했습니다. 관심이 없었습니다. 콘솔 로그에는 기본적으로 "[..] ServerFactory 7002에서 시작 [..] 팩토리 <twisted.internet.protocol.ServerFactory 인스턴스 (0x1bc4248>에서 시작)"만 있고 예상되는 메트릭을 작성했지만 데이터에 대한 언급은 없습니다.-f. 전의. (다른 데이터가없는 메트릭의 경우) "[..] 데이터베이스 파일 작성 /opt/graphite/storage/whisper/ring/handling-time/POST/15MinuteRate.wsp (archive = [(1, 1800), (60, 1440) ), (300, 210240)] xff = 0.5 agg = average) "
Jakub Holý

@ JakubHolý 질문에 대한 답변이 포함되어 있으므로 jlawrie의 답변을 업데이트하거나 다른 답변을 게시 하시겠습니까?
030

답변:


8

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

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

고마워요! 이 신비한 변화가 정말 도움이되었습니다. 보존을 "1s : 30m, 1m : 1d, 5m : 2y"에서 "1m : 14d"로 변경하면 "고정"됩니다. 나는 그것으로 더 연주하려고합니다. 1s 세분성에 문제가있을 수 있습니까?
Jakub Holý

동안 - 참의 기간에 문제가 될 것으로 보인다 '1m:1d,5m:2y작업 (데이터 간격의 저장) 10s:30m,1m:1d,5m:2y하지 않습니다. 실제로 .wsp 파일에서 10 초의 타임 스탬프 때문에 세부 단위 <1m가 무시되는 것 같습니다 .... 구성은 여전히 ​​1 분 간격입니다.
Jakub Holý

문제는 집계 정책과 관련이 있으며 xFilesFactor여기에 적용되는 (기본값) 및 평균입니다 xFilesFactor=0.5(참조 /opt/graphite/conf/storage-aggregation.conf). I가 변경할 때 sum0.1이름을 변경합니다 (poinst가 1m 주파수에서 여전히하지만), 데이터가 저장됩니다 :echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
야쿱 거룩한

나는 diff와 함께 연주했습니다. 집계 스키마를 설정 하면 agg를 설정 하면 데이터가 (1m 간격으로) 기록 됩니다 xFilesFactor = 0.1. 방법은 중요하지 않습니다 (적어도 모든 평균, 마지막, 총 작업).
Jakub Holý

에 따르면 , 집계 스키마는 여러 보존 정책과 놀이로 온다. 10 초의 해상도 (데이터 전송 빈도)에서도 하나의 보존 정책이있는 경우 각 개별 데이터 포인트를 수집합니다. 여러 보존 정책을 사용하면 whisper-fetch.py의 기본값이 마지막 날인 쿼리의 시간 범위에 따라 하나를 선택하므로 1 분마다 데이터 포인트 만 보는 이유가 생각됩니다. 그래도 집계 된 값 대신에 왜 None을 표시했는지 확실하지 않습니다.
jlawrie

1

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

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

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


감사합니다. 데이터 검색 및 집계가 어떻게 작동하는지에 대해 더 많이 알아야한다고 생각합니다. 아마 실제로 문제의 원인 일 수 있습니다. 그러나 " 흑연이 데이터를 저장하는 빈도보다 훨씬 높은 빈도로 데이터 제출 "은 각 흑연주기에서 마지막으로 수신 된 데이터 포인트 만 기록되므로 차선책이라고 생각합니다. . statsD flush period는 Graphite period이어야합니다 .
Jakub Holý

1
BTW, Graphite / Carbon "losing"데이터는 MAX_UPDATES_PER_SECOND = 500, MAX_CREATES_PER_MINUTE = 50과 같은 카본 설정과 관련이있을 수 있습니다.
Jakub Holý

내가 잘못 이해 한 것 같습니다. 문서를 올바르게 해석하면 위의 설정은 디스크 액세스를 제한하지만 데이터 / 메트릭은 여전히 ​​메모리에 저장되어 있습니다 (실제로 이것을 먼저 확인하고 싶습니다).
Jakub Holý

그 중 일부는 해당 응용 프로그램의 문제점 중 일부를 분명히 설명 할 수 있습니다.
일부 리눅스 얼간이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.