InfluxDB 시계열 간단 분석¶
소프트웨어 소개¶
InfluxDB는 Go 언어로 작성된 오픈소스 분산 시계열 및 메트릭 데이터베이스입니다.
업계 위치¶
InfluxDB는 꾸준히 1위 자리를 유지하고 있습니다. 최신 시계열 데이터베이스 순위에서 InfluxDB는 2위인 Kdb+를 세 배 차이로 따돌렸습니다.
기본 개념¶
-
Database: 데이터베이스
-
Measurement: 데이터 테이블, MySQL의 table과 유사합니다.
- Field: InfluxDB에서 실제 데이터를 기록하는 키-값 쌍입니다(InfluxDB에서 필수이며 인덱싱되지 않습니다).
- Field Set: Field 키-값 쌍의 집합입니다.
- Field Key: Field 키-값 쌍의 키입니다.
- Field Value: Field 키-값 쌍의 값입니다(실제 데이터).
- Tag: Field를 설명하는 키-값 쌍입니다(InfluxDB에서 선택 사항이며 인덱싱됩니다).
- Tag Set: Tag 키-값 쌍의 집합입니다.
- Tag Key: Tag 키-값 쌍의 키입니다.
- Tag Value: Tag 키-값 쌍의 값입니다.
- TimeStamp: 데이터 포인트와 연결된 날짜 및 시간입니다.
고급 개념¶
-
Retention Policy: 데이터 저장 기간(기본값은 autogen, 영구 저장).
-
Series: 시계열은 Retention Policy, Measurement, Tag Set의 세 부분으로 구성됩니다.
| Series 번호 | Retention Policy | Measurement | Tag Set |
|---|---|---|---|
| 시계열 1 | autogen | 날씨 | 省份=浙江, 城市=温州 |
| 시계열 2 | autogen | 날씨 | 省份=浙江, 城市=绍兴 |
| 시계열 3 | autogen | 날씨 | 省份=江苏, 城市=常州 |
| 시계열 4 | autogen | 날씨 | 省份=江苏, 城市=无锡 |
- Point: 하나의 Series 내에서 동일한 TimeStamp를 가진 Field Set입니다. 테이블의 한 행 데이터로 이해할 수 있습니다.
| TimeStamp | Measurement | Tag Set | Field Set | |
|---|---|---|---|---|
| 2021-12-12T00:00:00Z | disk | host=a, path=/ | free = 40836976 | used = 20836976 |
- Line Protocol: InfluxDB에 데이터 포인트를 쓰기 위한 텍스트 형식입니다.
실습¶
1. 소프트웨어 설치¶
Influxdata의 yum 소스 추가
cat <<EOF | tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
2. 데이터 조회¶
로컬 설치이므로 influx 명령어를 사용하여 데이터베이스에 직접 접속합니다(자세한 매개변수는 influx -h 참조).
데이터 테이블 telegraf를 선택하고 select 명령어를 사용하여 데이터를 조회합니다(조회 언어는 InfluxQL).
그림에서 3개의 Point를 확인할 수 있으며, 각 Point는 4개의 부분(measurement, timeStamp, tag set, field set)으로 구성됩니다.
Measurement
- name = system
TimeStamp
- time = 1637744500000000000 (나노초)
Tag Set
- host = df-solution-ecs-018
Field Set
- load = 0, load15 = 0, load5 = 0.01, n_cpus = 4, n_users = 5, uptime = 1106990, uptime_format = 12days,19:29
3. 시계열 확인¶
show series 명령어를 사용하여 시계열을 확인합니다.
measurement가 cpu인 시계열이 5개(cpu-total, cpu0, cpu1, cpu2, cpu3, host는 모두 동일)임을 확인할 수 있습니다.
4. 시계열 테스트¶
4.1 inputs.tags (플러그인 태그) 추가¶
메인 설정 파일 /etc/telegraf/telegraf.conf에 inputs.cpu.tags를 추가합니다.
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[inputs.cpu.tags]
cloud = 'aliyun'
4.2 measurement 삭제¶
drop 명령어를 사용하여 measurement를 삭제합니다.
다시 show series 명령어를 사용하여 시계열을 확인합니다.
measurement가 cpu인 시계열이 5개(cpu-total, cpu0, cpu1, cpu2, cpu3, host/cloud는 모두 동일)로 변경된 것을 확인할 수 있습니다.
4.3 global_tags (전역 태그) 추가¶
메인 설정 파일 /etc/telegraf/telegraf.conf에 global_tags를 추가합니다.
telegraf 재시작
show series 명령어를 사용하여 시계열을 확인합니다.
measurement가 cpu인 시계열이 다시 5 => 10개로 증가한 것을 확인할 수 있습니다.
show series 명령어를 사용하여 다른 measurement의 시계열을 확인합니다.
measurement가 mem인 시계열이 1 => 2개로 증가한 것을 확인할 수 있습니다.
간단한 분석¶
- retention policy는 변경되지 않음
- 플러그인 태그를 사용하면 해당 measurement의 시계열이 두 배가 됩니다.
- 전역 태그를 사용하면 해당 database의 시계열이 두 배가 됩니다.
-
measurement도 변경되지 않는 경우, tag 조합이 많을수록 시계열이 더 많아집니다.
-
measurement
-
한 번 삭제되면 해당 measurement 아래의 모든 시계열이 정리됩니다.
-
tag
- 일반적으로 열거 가능해야 합니다(예: hostname, status).
- container id, source ip와 같이 난수이면 안 됩니다. 그렇지 않으면 과도한 시계열이 발생할 수 있습니다.






