[InfluxDB] InfluxDB
[InfluxDB] InfluxDB
InfluxDB란?
- Influx DB란 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go 언어로 개발된 오픈소스 Time Series Database(시계열 데이터베이스)로써 Tick Stack(Telegraf + InfluxDB + Chronograf + Kapacitor)의 필수 컴포넌트 중 하나이다.
- Influx DB는 많은 TSDB들(Prometheus, TimescaleDB, Graphite, 등) 중에서 가장 유명하고, 많이 사용되는 데이터베이스이다.
Influx DB는 Distributed, Scale horizontally하게 설계되어 새로운 노드만 추가하면 손쉽게 scale-out할 수 있으며, Restful API를 제공하고 있어 API 통신이 가능하다.
- TICK Stack이란 InfluxData에서 나온 4가지 오픈소스 컴포넌트들을 기반으로 구축한 시스템이다.
- 4가지 컴포넌트들은 조합되어 모니터링할 데이터를 수집하여 저장하고, 알림을 보낸다.
- Telegraf : Metrics와 Events를 수집하고 리포팅하는 모듈
- InfluxDB : Time Series DB(시계열 데이터베이스)
- Kapacitor : Real-time 스트리밍 데이터 전송 엔진
- Chronograf : 시각화 도구
Key Concepts 참고
- InfluxDB v1 : https://docs.influxdata.com/influxdb/v1/concepts/key_concepts/
- InfluxDB v2 : https://docs.influxdata.com/influxdb/v2/reference/key-concepts/
Glossary 참고
- InfluxDB v1 : https://docs.influxdata.com/influxdb/v1/concepts/glossary/
- InfluxDB v2 : https://docs.influxdata.com/influxdb/v2/reference/glossary/
InfluxDB는 2가지 핵심 기능
- Continuous Query(Task) : 일정 주기마다 데이터를 처리하여 새롭게 저장하는 기능
- InfluxDB의 핵심 목적은 시간에 따른 데이터(시계열 데이터)의 처리이다.
- InfluxDB는 데이터를 처리하여 새롭게 저장하는 Down Sampling(다운 샘플링)을 일정 주기마다 실행되도록 하는 Continous Query(연속적인 쿼리)를 제공하고 있다.
- InfluxDB2에서는 Continous Query를 대체하는 Task를 제공하고 있다.
- Retention Policy(Retention Period) : 일정 주기마다 데이터를 자동으로 삭제하는 기능
- Influx DB의 핵심 목적은 시간에 따른 데이터의 삽입과 조회이므로 직접 Delete를 이용하는 경우는 거의 없다.
- 하지만 데이터가 계속해서 쌓이면 저장 공간 및 처리 속도 등에 문제가 생기므로 데이터를 자동으로 삭제해주는 Retention Policy(보존 정책)를 지원하고 있다.
- Retention Policy란 오래된 데이터를 자동으로 삭제해주는 정책으로써 데이터베이스 단위로 정의되며 일반적으로 1개의 데이터베이스는 여러 개의 보존 정책을 가지고 있다.
- 만약 별도의 설정을 하지 않았다면 autogen이라는 기본 정책으로 적용된다.
- autogen은 보존 기간이 무제한이므로, 별도의 설정을 해주지 않으면 데이터가 계속해서 쌓이고 문제를 일으키게 된다.
- 그러므로 별도의 설정을 해줌으로써 오래된 데이터들을 관리하는 작업이 필요하다.
- InfluxDB2에서는 Retention Policy를 대체하는 Retention Period를 제공하고 있다.
RETENTION POLICY
- RETENTION POLICY 생성
- 데이터베이스를 만들 때 InfluxDB는 무제한 보유 권한을 갖는 autogen이라는 보존 정책을 자동으로 생성한다.
- 보존 정책의 이름을 바꾸거나 구성 파일에서 자동 생성을 비활성화 할 수 있다.
보존 정책을 작성, 변경 및 삭제하는 방법
1
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
DURATION
- DURATION 절은 InfluxDB가 데이터를 보관하는 기간을 결정한다.
- Duration은 기간 리터럴 또는 INF (무제한)이다.
- 기간 리터럴로 설정하며 Max : INF , Min : 1시간
- 보존 정책의 최소 기간은 1 시간이고 최대 기간은 무제한이다.
REPLICATION
- REPLICATION절은 클러스터에 저장된 각 POINT의 독립 사본 수를 결정한다.
- 여기서 n은 데이터 노드 수이다.
SHARD DURATION
- SHARD DURATION 절은 SHARD 그룹이 적용되는 시간 범위를 결정한다.
(선택사항)
Duration은 지속 시간 리터럴이며 INF (무한) 기간을 지원하지 않는다.- 기본적으로 SHARD 그룹 기간은 RETENTION POLICY의 DURATION에 의해 결정된다.
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< 2 days | 1 hour |
>= 2 days and <= 6 months | 1 day |
> 6 months | 7 days |
- 허용 가능한 최소 SHARD GROUP DURATION은 1시간이다.
- CREATE RETENTION POLICY 쿼리가 SHARD GROUP DURATION을 1시간 미만으로, 0보다 큰 값으로 설정하려고 시도하면 InfluxDB는 자동으로 SHARD GROUP DURATION을 1h로 설정한다.
- CREATE RETENTION POLICY 쿼리가 SHARD GROUP DURATION을 0으로 설정하려고 시도하면 InfluxDB는 위에 나열된 기본 설정에 따라 SHARD GROUP DURATION을 자동으로 설정한다.
DEFAULT
(선택사항)
새로운 retention policy을 데이터베이스의 기본 retention policy로 설정한다.
EXAMPLE
- Ex1. retention policy 생성
1
CREATE RETENTION POLICY "one_day_only" ON "TEST_water_database" DURATION 1d REPLICATION 1
- 이 쿼리는 데이터베이스 TEST_water_database에 대해 one_day_only라는 retention policy을 생성한다.
- retention policy은 1일의 DURATION과 1개의 REPLICATION 인수를 가진다.
- Ex2. DEFAULT retention policy 생성
1
CREATE RETENTION POLICY "one_day_only" ON "TEST_water_database" DURATION 23h60m REPLICATION 1 DEFAULT
- 쿼리는 위의 예와 동일한 보존 정책을 만들고 데이터베이스의 기본 보존 정책으로 설정한다.
- CREATE RETENTION POLICY 쿼리가 성공하면 빈 응답이 반환된다.
- 이미 존재하는 것과 동일한 retention policy을 생성하려고 시도하면 InfluxDB가 에러를 리턴하지 않는다.
- 기존 retention policy과 이름은 같지만 속성이 다른 retention policy을 만들려고 하면 InfluxDB에서 에러를 반환한다.
CREATE DATABASE 조회에서 새로운 RETENTION POLICY를 지정할 수도 있다.
RETENTION POLICY 수정
- ALTER RETENTION POLICY 쿼리는 DURATION, REPLICATION, SHARD DURATION 또는 DEFAULT 중 적어도 하나의 RETENTION POLICY 속성을 선언해야 한다.
1
ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
- 먼저 DURATION이 2일인 RETENTION POLICY what_is_time을 생성한다.
1
CREATE RETENTION POLICY "what_is_time" ON "TEST_water_database" DURATION 2d REPLICATION 1
- 3주 DURATION, 30분 SHARD 그룹 기간이 되도록 what_is_time을 수정하고 TEST_water_database 대한 DEFAULT RETENTION POLICY을 변경한다.
1
ALTER RETENTION POLICY "what_is_time" ON "TEST_water_database" DURATION 3w SHARD DURATION 30m DEFAULT
- what_is_time은 원래 REPLICATION 인수 1을 유지한다.
성공적인 ALTER RETENTION POLICY 쿼리는 빈 결과를 반환한다.
RETENTION POLICY 삭제
1
DROP RETENTION POLICY <retention_policy_name> ON <database_name>
- TEST_water_database 데이터베이스에서 RETENTION POLICY인 what_is_time을 삭제한다.
1
DROP RETENTION POLICY "what_is_time" ON "TEST_water_database"
- 성공적인 DROP RETENTION POLICY 쿼리는 빈 결과를 반환한다.
- 존재하지 않는 RETENTION POLICY을 삭제하려고 하면 InfluxDB에서 에러를 반환하지는 않는다.
InfluxDB Config file 설정
- InfluxDB 상에서 기본 설정들을 바꿔주기 위해서는 Influxdb.config 파일을 수정해야 한다.
- 파일을 수정한 뒤 InfluxDB의 시스템 상에서 수정된 설정을 적용하기 위해서는 2가지 방식이 있다.
- conf 파일을 수정한 뒤 influxd를 실행할 때 마다 conf 파일 위치를 인자로 주어 프로세스가 구성 파일을 가리키도록 설정하는 방식
1
influxd -config /etc/influxdb/influxdb.conf
- 환경 변수를 설정하여 구성 파일의 경로를 설정하여 influxd가 적용되어 실행하도록 하는 방식
1 2 3 4
echo $INFLUXDB_CONFIG_PATH /etc/influxdb/influxdb.conf influxd
- conf 파일을 수정한 뒤 influxd를 실행할 때 마다 conf 파일 위치를 인자로 주어 프로세스가 구성 파일을 가리키도록 설정하는 방식
Influx.config 설정 가능한 옵션
- InfluxDB는 구성 파일(influxdb.conf)과 환경 변수를 사용하여 구성
- 구성 옵션의 주석 처리를 해제하지 않으면 시스템은 기본 설정을 사용
Option | Description |
---|---|
[meta] | 사용자, 데이터베이스, 보존 정책, 샤드 및 연속 쿼리에 대한 정보를 저장하는 InfluxDB 메타스토어에 대한 매개변수를 제어 |
[data] | InfluxDB의 실제 샤드 데이터가 있는 위치와 WAL(Write-Ahead Log)에서 데이터를 플러시하는 방법을 제어 |
[coordinator] | 쿼리 관리를 위한 구성 설정이 포함 |
[retention] | 보존 정책 설정 |
[shard-precreation] | 샤드 생성 서비스 설정 |
[monitor] | influx 시스템 자체의 모니터링에 대한 설정 |
[http] | http관련 인증 및 엔드포인트 설정 |
[logging] | 로거가 로그를 출력으로 내보는 방식을 설정 |
[subscriber] | kapacitor( 데이터 처리 오픈소스 ) 가 데이터를 수신하는 방식을 제어 |
[[graphite]] | graphite 데이터에 대한 리스너 설정 |
[[collectd]] | 수집된 데이터에 대한 리스너 제어 |
[[opentsdb]] | OpenTSDB 데이터 수신기를 제어 |
[[udp]] | udp 설정 제어 |
[Continuous_queries] | 연속 쿼리(CQ)에 대한 방식을 제어 |
[tls] | 전송 계층 보안 설정 |
- Influx config에서 retenton policy 설정
1 2 3 4 5 6 7 8 9
[retention] [1] enabled = true/false InfluxDB가 보존 정책을 시행할지 안할지 결정 (환경 변수 : INFLUXDB_RETENTION_ENABLED) [2] check-interval = "30m0s" InfluxDB가 보존 정책을 실행할지 여부를 체크하는 시간 간격 (환경 변수:INFLUXDB_RETENTION_CHECK_INTERVAL)
This post is licensed under CC BY 4.0 by the author.