Whisper / Graphite의 디스크 용량 계획


14

누구나 데이터 포인트 당 흑연이 사용할 디스크 공간을 추정하는 데 도움이되는 수식이나 환경의 일부 샘플 데이터가 있습니까?


2
디스크 용량뿐만 아니라 디스크 I / O도 올바르게 계획하고 있는지 확인하십시오. rrdtool은 수년 동안 Graphite의 Whisper 데이터베이스 형식보다 쓰기 속도가 훨씬 빠릅니다 (2 배 빠름). 괜찮은 SSD에 모든 데이터를 보관할 계획이라면 대부분의 방법을 사용할 수 있지만 회전 디스크에 전체 Whisper DB를 유지할 계획은 없습니다. 규모면에서 그래파이트가 발생시키는 디스크 I / O 수준은 비용 효율적이지 않습니다.
jgoldschrafe

답변:


7

whisper-info.py 파일 크기를 포함하여 각 파일이 어떻게, 어떻게 집계되는지에 대한 많은 통찰력을 제공합니다.

그러나 기존 속삭임 파일에만 유용합니다.

스키마를 배치하기 전에 스키마의 예측 크기 조정을 보려면 https://gist.github.com/jjmaestro/5774063에 있는 것과 같은 Whisper Calculator를 사용해보십시오.

편집하다:

예를 물었을 때 ...

storage_schema :

{
    :catchall => {
      :priority   => "100",
      :pattern    => "^\.*",
      :retentions => "1m:31d,15m:1y,1h:5y"
    }
}

내 파일을 보면 applied-in-last-hour.wsp, ls -l수율

-rwxr-xr-x 1 root root 4415092 Sep 16 08:26 applied-in-last-hour.wsp

whisper-info.py ./applied-in-last-hour.wsp수율

maxRetention: 157680000
xFilesFactor: 0.300000011921
aggregationMethod: average
fileSize: 4415092

Archive 0
retention: 604800
secondsPerPoint: 10
points: 60480
size: 725760
offset: 52

Archive 1
retention: 2678400
secondsPerPoint: 60
points: 44640
size: 535680
offset: 725812

Archive 2
retention: 157680000
secondsPerPoint: 600
points: 262800
size: 3153600
offset: 1261492

따라서 기본적으로 통계 당 보존 기간 세그먼트 당 보존 기간 일치 호스트를이 시스템에 적용하려는 시스템 요소를 곱하여 추적하려는 새 통계 수를 고려하십시오. 그런 다음 저장 용량을 구매하고 적어도 두 배의 용량을 차지합니다 (스토리지를 구매하고 있기 때문에 사용할 것이므로 ...)


샘플 번호가있을 가능성이 있습니다 (보존 설정과 쌍을 이룹니다). 지금은 디스크 사용 측면에서 다른 시계열 데이터 저장소에 대해 생각하고 있습니다. 그래서 흑연을 라이브로 만드는 것은 약간의 일입니다.
Kyle Brandt

@KyleBrandt 답변이 업데이트되었습니다.
gWaldo

고마워 파일 크기의 경우 데이터를 수집 한 후 1 시간이 지나야합니까, 아니면 파일 크기가 거의 항상 무엇입니까? 따라서이 보존 기간의 5 년 분량의 데이터를 나타내는 4415092가 1 분의 1 분 데이터를 나타내는 것입니까? 또한 바이트 또는 비트입니까?
Kyle Brandt

이것은이 회사의 새로운 구현이며 이전 제품에 액세스 할 수 없습니다. 최상위 파일 크기 결과가 결과와 일치 ls -l하므로 바이트로 간주합니다. .wsp 파일 내에서 아카이브의 크기를 합하면 (로보고 됨 whisper-info.py) 전체 .wsp 파일 크기에 가깝습니다 (나머지는 메타 데이터라고 가정합니다. 모두의 파일 크기 여야 함). 시간이 지남에 따라 데이터가 더 낮은 데이터 해상도로 떨어지고 오래된 데이터 포인트가 삭제됩니다.
gWaldo

좋습니다.이 보존 설정을 사용하십시오. 대략ServerCount * MetricCount * 4.5MBytes
카일 브란트

2

statsd 문서 에서 데이터 보존 정책에 대한 예제공합니다 .

보유 10s:6h,1min:7d,10min:5y는 2160 + 10080 + 262800 = 275040 데이터 포인트 이며 아카이브 크기는 3.2 MiB 입니다.

선형 관계를 가정하면 데이터 포인트 당 약 12.2 바이트입니다 .


ops-school.readthedocs.org/en/latest/monitoring_201.html (타임 스탬프, 값) 쌍은 쌍당 12 바이트를 소비하는 long 및 double 값으로 저장됩니다. 아마도 파일 메타 데이터 정보 오버 헤드로 인해 0.2 diff일까요?!
user27465

1

Graphite에 대한 직접적인 경험은 없지만 Cacti에 사용 된 것과 동일한 논리 또는 RRD 또는 타임 롤오버 기반의 다른 적용이 적용될 것이라고 생각합니다 (Graphite는 더 이상 내부적으로 RRD를 사용하지 않지만 스토리지 논리는 비슷해 보입니다).

빠른 대답은 "아마도 필요한만큼의 공간이 아닐 것입니다."


긴 대답은 일부 사이트 별 수학과 관련이 있습니다. 모니터링 시스템 (InterMapper)의 경우, 보존 기간, 해상도 및 데이터 포인트 크기를 파악하고 곱셈을 수행하고 오버 헤드를 추가합니다.

예를 들어 디스크 공간을 사용하겠습니다. 30 일 동안 5 분 정밀도, 60 일 동안 15 분 정밀도, 추가 300 일 동안 시간별 정밀도로 그림을 저장하고 64를 사용합니다. -비트 (8 바이트) 정수로 저장합니다.

  • 총 21600 개 샘플 :
    • 30 일 5 분 정밀도를위한 8640 개의 샘플
    • 60 일 15 분 정밀도를위한 5760 개의 샘플
    • 300 일 1 시간 정밀도를위한 7200 개의 샘플

샘플 당 8 바이트에서 약 173KB이고 스토리지 인덱싱 등의 건전한 오버 헤드로 인해 하나의 파티션의 디스크 사용량 데이터에 대해 약 200KB가됩니다 (과대 평가 경향이있는 오류).

기본 메트릭에서 평균 "컴퓨터 당"크기 (10 개의 디스크 파티션, 스왑 공간, RAM,로드 평균, 네트워크 전송 및 기타 몇 가지)를 해결할 수 있습니다. 머신 당 약 5MB까지 작동합니다.

또한 최종 숫자 위에 10 %를 추가하고 반올림하므로 머신 당 6MB로 크기를 조정합니다.

그런 다음 차트 용 메트릭 데이터를 저장하기 위해 배치 한 1TB의 공간을보고 "그렇습니다. 우리가 많이 성장하지 않으면 평생 저장 공간이 부족하지 않을 것입니다!"라고 말합니다. :-)


1
프로덕션 유지 정책 (5 개월에 9 개월, 1 시간에 1 년, 매일 5 년) 및 ~ 20 개의 8 바이트 메트릭이있는 약 20 대의 컴퓨터와 경고 / 알람을 사용하여 실제 사례에서 숫자를 버림 5 년 동안 / critical / outage 이벤트 기록 1.5G의 디스크 공간을 사용하고 있습니다. InterMapper는 Postgres 데이터베이스에 모든 것을 삽입합니다. 다시 한번-빠른 대답은 "아마도 당신이 필요하다고 생각하는만큼 많은 공간이 아닙니다":-)
voretaq7

그래, 수학은 간단합니다. Graphite가 데이터를 저장하는 방법에 대해 더 많이 찾고 있습니다. 규모에 큰 차이를 만들 수 있습니다. 내가 찾은 유일한 것은 문서에 따르면 공간 효율적이지 않다는 것입니다 (아마도 공격적인 롤업을 고려하기 때문에).
Kyle Brandt

Whisper (스토리지 백엔드 Graphite가 사용하는) 에는 일부 공간 씹는 항목이 있습니다. "아카이브가 기간을 겹칩니다"에 대한 섹션은 아카이브가 위의 예보다 더 크다는 것을 의미하기 때문에 눈에 to니다 (60 일 아카이브는 실제로 90 일, 300 일 아카이브는 390 일). Whisper는 또한 추가해야 할 각 데이터 포인트와 함께 타임 스탬프 (4 또는 8 바이트)를 유지합니다. 까다로워 보이지는 않지만 그냥 부풀어 오른다 :)
voretaq7

0

많은 데이터를 생성하는 70 개의 노드가 있습니다. Carbon / Whisper를 사용하여 하나의 노드가 91k 파일 만 작성했습니다 (노드는 여러 개의 카운터 및 변수 필드가있는 여러 스키마를 생성합니다 (예 : (nodename). (schema). (counter). (subcounter)). )....등등).

이것은 내가 원하는 그래프를 그리는 데 필요한 세분성을 제공했습니다. 나머지 69 개 노드를 채우기 위해 스크립트를 실행 한 후 디스크에 1.3Tb의 데이터가있었습니다. 그리고 그것은 단지 6 시간 분량의 데이터 / 노드입니다. 6hrs의 데이터에 대한 실제 플랫 csv 파일은 약 230Mb / 노드입니다. 70 개 노드는 ~ 16Gb의 데이터입니다. 내 스토리지 스키마는 120 : 365d였습니다.

데이터베이스에 익숙하지 않아서 잘못된 일이있을 수 있지만 각 샘플의 오버 헤드 인 것 같습니다.

재미있는 실험 이었지만 저장하는 데이터 종류에 속삭임을 사용하는 것이 이치에 맞지 않다고 생각합니다. MongoDB는 더 나은 솔루션처럼 보이지만 Grafana의 백엔드로 사용하는 방법을 알아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.