RRD 데이터베이스 소개 및 작업

18491 단어
RRD 데이터베이스 소개 및 작업
최근 회사에서는 샤오미가 개발한 모니터링 플랫폼인 오픈팔콘을 배치해 RRD(더 많은 RRDTool)를 알게 됐다.오랫동안 블로그를 하지 못했으니 오늘 여러분과 이 데이터베이스를 공유해 드리겠습니다.
RRD 소개
RRDtool refers to Round Robin Database tool .
Round robin is a technique that works with a fixed amount of data , and a pointer to the current element.
Think of a circle with some dots plotted on the edge. These dots are the places where data can be stored.
Draw an arrow from the center of the circle to one of the dots; this is the pointer.
When the current data is read or written, the pointer moves to the next element.
As we are on a circle there is neither a beginning nor an end , you can go on and on and on.
After a while, all the available places will be used and the process automatically reuses old locations .
This way, the dataset will not grow in size and therefore requires no maintenance.
RRDtool works with Round Robin Databases (RRDs). It stores and retrieves data from them.
이상은 RRDTool 홈페이지에서 발췌한 것이다.
RRD 데이터베이스는 고리 모양의 데이터베이스로 시계로 상상할 수 있다. 중심에 바늘이 있고 시간의 변화에 따라 바늘도 변한다. 바늘이 12시를 가리키면 이 기록이 지워지고 덮어쓸 때 크기가 고정된다.
요약하면 RRD의 키워드는 다음과 같습니다.
고리형, 크기 고정, 운반 필요, 그림 그리기
시퀀스 데이터베이스
RRD의 프로필, 특히 그것의 키워드를 보고 나는 이렇게 nb에 의지한다고 생각하지 않는다.데이터베이스는 기능과 종류에 따라 여러 가지로 나눌 수 있는데 각 술업은 전문적인 분야를 대상으로 데이터 저장을 한다.예를 들어 mysql의 장점은 바로 구조형 데이터를 저장하는 것이고nosql는 비구조형 데이터를 대상으로 하는 것이다.
운영 분야에서 서버, 교환기 등 지원 설비의 성능과 운행을 끊임없이 모니터링해야 한다. 이런 모니터링 데이터의 특징은 시간에 따라 가는 것이다. 그들의 지표는 시간의 변화에 따라 변화할 뿐 뒤돌아보는 수정과 관련이 없다.이것은 흔히 볼 수 있는 데이터베이스와 달리 역사 데이터를 끊임없이 수정하고 데이터에 대해 U(pdate) 조작을 한다.
그래서'시차 데이터베이스'라는 일련의 데이터베이스가 생겨났다.흔히 볼 수 있는 시퀀스 데이터베이스는 influxdb,opentsdb,rrd 등이 있다.
사실 mysql 엔진에 대해 충분히 알고 있다면, 흔히 볼 수 있는 innodb와 myisam을 제외하고, 또 하나의 엔진은 archive라고 하는데, 그 역할은 rrd와 차이가 많지 않고, 삽입과 조회 조작을 지원하며, 비교적 전문적이다.
RRD 설치
제 환경은centos6입니다.5 .
설치된 rrdtool 버전은 1.4.7이고 원본 코드가 설치되어 있습니다.
wgethttp://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.7.tar.gz
tarzxvfrrdtool-1.4.7.tar.gz
cdrrdtool-1.4.7
./configure --prefix=/usr/local
make
makeinstall
 

이로써 rrdtool의 설치가 완료되었습니다.독자가 의존하는 것이 부족하면 스스로 구글|||baidu에서 해결하세요.
RRD 작업
다음은 생성, 증가, 검색, 드로잉 등 RRD 데이터베이스 작업에 대해 설명합니다.
창설
명령:
rrdtoolcreatefilename \
              [--start|-b starttime] \
              [--step|-s step] \
              [DS:ds-name:DST:heartbeat:min:max] \
              [RRA:CF:xff:steps:rows] \
 
              [--template|-t template-file] \
              [--source|-r source-file] \
              [--no-overwrite|-O] \
              [--daemon|-d address] 
 

예:
rrdtoolcreatetest.rrd            \
            --start 1469341292      \
            DS:speed:COUNTER:600:U:U  \
            RRA:AVERAGE:0.5:1:24      \
            RRA:AVERAGE:0.5:6:10
 

설명:
명령에서 유용한 것은 기본적으로 앞의 다섯 줄, 한 줄씩 해석하는 것뿐이다.
rrdtoolcreatefilename
 

이것은 딱 봐도 rrdtool 명령을 통해 데이터베이스를 만드는 것입니다. 이름은 filename입니다.
예에서test라는 이름을 만들었습니다.rrd의 데이터베이스rrd는 rrd 데이터베이스의 접미사 이름입니다.
[--start|-b starttime] 
 

이 문장의 뜻은 이 데이터베이스의 시작 시간 스탬프를 가리키는 것이다. 예를 들어 예의 1469341292는 이 글을 쓴 unix timestamp이다.
너는 당연히 시작 시간을 가리켜야 한다. 왜냐하면 이것은 시차 데이터베이스이기 때문에 틀림없이 시작이 있어야 한다.
[--step|-s step]
 

이 step는'데이터베이스에 데이터를 얼마나 자주 보고합니까?'라는 뜻으로 초 단위로 한다.예를 들면, 아, 예에는 없어...알겠습니다. 기본적으로 300s에 보고하면 5분 안에 보고할 수 있습니다. 당신은 자신의 요구에 따라 보고할 수 있습니다.
[DS:ds-name:DST:heartbeat:min:max]
 

이것은 좀 복잡하니, 우리 뜯어 보자.
DS,DataSource, 데이터 원본, 뒤에 ds-name는 당신이 설명해야 합니다. 예를 들어, 제가 우리에게 준 데이터 원본에:speed라는 표시를 했습니다.내 데이터베이스에 기록된 것은 모두speed에 관한 데이터라는 뜻이다.
DST, DataSourceType, 데이터 원본 유형, DST는 당신이 명시해야 할 것입니다.몇 가지 선택이 있는데 그 중 네 가지가 자주 쓰인다. 말해 보자.
COUNTER,
GAUGE
DERIVE
ABSOLUTE
예를 들어 그들 사이의 차이를 설명한다.
나는 10시 30분과 10시 31분에 각각 두 개의 데이터를 삽입했다.
10:30 600
10:31 1200
하면, 만약, 만약...
COUNTER, (1200-600)/step = 600/300 = 2, 이 결과 2는 마지막으로 데이터베이스에 삽입할 데이터이며 10:31 시간의 수치입니다
GAUGE, 10:30의 값은 600, 10:31의 값은 1200입니다.모두 원값으로 저장되어 있는데, 이것이 가장 자주 사용하는 것이다
DERIVE, 그의 원리는 COUNTER와 마찬가지로 다른 것은 COUNTER는 점차적으로 증가할 수 있지만 DERIVE는 증가할 수도 있고 줄일 수도 있다.예를 들어 COUNTER에 대해 10:30은 600이고 10:31은 1200이면 10:32의 값은 1200보다 커야 한다.하지만 DERIVE의 10:32 값은 1200보다 작을 수 있습니다
ABSOLUTE, 이것은 직접 평균치입니다. 600/step = 1, 1200/step = 2이기 때문에 10:30의 값은 1, 10:31의 값은 2입니다
하트비트, 심장박동.심장박동이란 제가 실천과 문서를 통해 심장박동은 step와 협조하여 사용하는 것으로 정리했습니다.또는 예를 들면 다음과 같습니다.
예를 들면, 나의 step는 60s에 한 번 데이터를 보고한다.
만약에 제 하트비트가 60s라면 10:30 600, 10:31에 보고되지 않았고 10:32 1200입니다. 이때 이미지는 10:31에 기록되지 않았습니다. 즉, 이미지가 끊겼습니다.
만약 나의 하트비트가 120s라면 10:31에도 데이터가 있을 것이고 이미지는 끊기지 않을 것이다.그러나 어떤 값으로 채워질지는 조건이 있다. 뒤에 설명한다.
사실 말하자면, 이 하트비트는 용량 오류 시간이다. 만약 이 시간 간격 안에 데이터를 업로드하지 않았다면, 나는 너에게 그림을 그려줄 수 없다.
min, 받아들일 수 있는 최소치, 예를 들어 보고된 데이터가 500보다 작으면 안 됩니다. 그러면 여기를 설정하세요.
맥스
일반적으로 이 두 값은 모두 U로 무한함을 나타낸다.
[RRA:CF:xff:steps:rows]
 

이 뜻은 데이터 테이블을 만드는 것이다. 방금 만든 것은 데이터베이스인데 지금은 데이터 테이블을 만든다.
RRA:Round Robin Archive
CF:Consolidation Function, 작성 함수, 작성 방법.
rrd에서 제공하는 CF는 다음과 같습니다.
Average()
Max()
Min()
Last()
이 함수는 무엇을 합니까?우선 뒤의 매개 변수를 계속 보아라.
fff, 이것은 1보다 작은 비례값으로 정상값과 이상값의 비례값을 나타내며 데이터의 합격률에 해당한다. 이 비례보다 낮으면 이 데이터는 폐기된다.일반적으로 0.5로 설정됩니다.
steps, 이 매개 변수는 몇 개의 값이 CF 함수를 통해 하나의 값을 합성하여 데이터 테이블에 저장되는 것을 의미합니다.
rows, 이 고리형 데이터베이스에 몇 개의 칸이 있는지 표시합니다. 즉, 이 데이터 테이블에 얼마나 많은 데이터를 저장할 수 있는지 의미합니다.
자, 합쳐서 이 RRA의 명령 매개 변수를 설명해 봅시다.
예를 들자. 설명하기가 쉽지 않다. 예를 들자.
time PDP
10:30 1.4
10:31 2.8
10:32 3.7
10:33 4.2
10:34 5.1
10:35 6.6
RRA:CF :xff:steps:rows
RRA:AVERAGE:0.5:1 :24 — ①
RRA:AVERAGE:0.5:6 :10 — ②
①로 말하자면, 내 이 데이터 테이블에는 24개의 값이 저장되고 steps는 1이라는 뜻이다. 이것은 내가 신문에 올린 값마다 하나의 저장 값이 된다는 뜻이다.그러면 10시 30분부터 10시 35분까지 보고된 값에 따라 저장됩니다.
시간 에스컬레이션 스토리지
10:30 1.4 1.4
10:31 2.8 2.8
10:32 3.7 3.7
10:33 4.2 4.2
10:34 5.1 5.1
10:35 6.6 6.6
②로 말하자면, 이 데이터 테이블에 10개의 값을 저장할 수 있다는 뜻이고, steps는 6개의 값을 보고할 때마다 Average()를 구하여 결과를 데이터 테이블에 저장한다는 뜻이다.
시간 에스컬레이션 스토리지
10:30 1.4
10:31 2.8
10:32 3.7
10:33 4.2
10:34 5.1
10:35 6.6 (1.4+2.8+3.7+4.2+5.1+6.6)/6 = 3.96
왜 RRA가 여러 개 있는지, 샘플링을 하고 시간대별 샘플을 채취한 다음에 그림을 그릴 때 당신이 요구하는 시간대에 가장 적합한 데이터를 제공해 줍니다.
증가하다
명령:
rrdtool {update | updatev} filename [--template|-t ds-name[:ds-name]...] [--skip-past-updates|-s] [--daemon|-d address] [--] N:value[:value]... timestamp:value[:value]... at-timestamp@value[:value]...
 

예:
rrdtoolupdatetest.rrd \
          1469341292:12420 \
          1469341352:12422 \
          1469341412:12423
 
rrdtoolupdatevtest.rrd \
          1469341292:12420 \
          1469341352:12422 \
          1469341412:12423
 

업데이트와 업데이트 v의 차이는 v가 하나 더 있다는 것이다.
그래, 그렇게 간단해.
조사하다
명령:
rrdtoolfetchfilenameCF [--resolution|-r resolution] [--start|-s start] [--end|-e end] [--align-start|-a] [--daemon|-d address]
 

예:
rrdtoolfetchtest.rrdAVERAGE --start 1469341292
 

데이터베이스 구조를 보는 명령:
rrdtoolinfofilename [--daemon|-d address [--noflush|-F]]
 

예:
rrdtoolinfotest.rrd
 

드로잉
rrd의 주요 기능은 두 블록으로 나뉘는데 하나는 데이터를 저장하는 것이고 하나는 데이터에 따라 그림을 그리는 것이다.
명령:
rrdtoolgraph|graphvfilename [option ...] [datadefinition ...] [datacalculation ...] [variabledefinition ...] [graphelement ...] [printelement ...]
 

예:
rrdtoolgraphtest.png  \
        --start 1469341292 --end 1469341412 \
        DEF:myspeed=test.rrd:speed:AVERAGE \
        LINE2:myspeed#FF0000
 

DEF:
DEF:myspeed=test.rrd:speed:AVERAGE
myspeed의 그림을 정의했습니다. 그 내용은test에서 나온 것입니다.rrd, DS 이름은 speed이고 CF는 AVERAGE입니다.
python 작업
pip를 통해 rrdtool 모듈을 설치하면 이 모듈은python을 통해 RRD 데이터베이스 생성, 그림 그리기 등을 할 수 있다.
pipinstallrrdtool
 

모든 작업 코드:
importrrdtool
 
rrdtool.create('test.rrd', '--start', '1469341292',
'--step','60','RRA:AVERAGE:0.5:1:3', 'DS:test:GAUGE:120:U:U')
 
rrdtool.update('test.rrd','1469341292:300')
rrdtool.update('test.rrd','1469341352:600')
rrdtool.update('test.rrd','1469341412:900')
rrdtool.update('test.rrd','1469341472:1200')
 
rrdtool.graph('test.png','--start','1469341292', '--end','1469341472','DEF:myspeed=test.rrd:test:AVERAGE','LINE2:myspeed#FF0000' )
 

더 지나친 그림 그리기 방법은 여기를 참고할 수 있다
총결산
RRD는 아주 쓰기 좋다.별로 신경 쓰지 않아도 돼, 일로영일의 데이터베이스에 속한다.이해하기 힘든 것은 만들 때의 DS 부분과 RRA의 매개 변수 블록입니다.많이 손을 써서 실천하면서 본문을 보면 효과가 더욱 좋다.

좋은 웹페이지 즐겨찾기