[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 참고
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] | 전송 계층 보안 설정 | 
Config 참고
- 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.