Post

[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 DURATIONShard Group Duration
< 2 days1 hour
>= 2 days and <= 6 months1 day
> 6 months7 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가지 방식이 있다.
    1. conf 파일을 수정한 뒤 influxd를 실행할 때 마다 conf 파일 위치를 인자로 주어 프로세스가 구성 파일을 가리키도록 설정하는 방식
      1
      
       influxd -config /etc/influxdb/influxdb.conf
      
    2. 환경 변수를 설정하여 구성 파일의 경로를 설정하여 influxd가 적용되어 실행하도록 하는 방식
      1
      2
      3
      4
      
       echo $INFLUXDB_CONFIG_PATH
       /etc/influxdb/influxdb.conf
      
       influxd
      

Influx.config 설정 가능한 옵션

  • InfluxDB는 구성 파일(influxdb.conf)과 환경 변수를 사용하여 구성
  • 구성 옵션의 주석 처리를 해제하지 않으면 시스템은 기본 설정을 사용
OptionDescription
[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.