시계열 데이터베이스는 기본적으로 다량의 데이터 포인트를 수집하여 보관하고, 시각화 도구를 이용하여 필요한 메트릭을 만드는 과정을 거치게 됩니다. 하지만 데이터 포인트가 지속적으로 쌓이게 되면 데이터를 조회하는 속도가 느려질 뿐만 아니라 스토리지의 공간 문제도 발생할 수 밖에 없습니다.
이 때 사용하는 것이 대용량의 데이터 포인트를 일정한 주기로 다시 요약하여 가공된 데이터로 만드는 것인데요, 롤업 혹은 리텐션이라는 용어로 많이 부릅니다. 처음 사회 생활을 시작했을 때는 RDBMS 에 쿼리를 만들어 배치 작업으로 주단위, 월단위 등의 리텐션 작업을 했던 기억이 새록새록 납니다 (아재 인증...)
InfluxDB 는 패키지를 이용하여 기본 값으로 제품을 설치했을 때, 리텐션 주기에 대한 설정이 켜져 있지 않습니다. 이 상태에서 데이터베이스를 생성하면 리텐션 주기에 맞추어 데이터를 롤업, 리텐션 하지 않고 라인 프로토콜을 통해 입력된 그대로 쌓아두게 됩니다. 시간이 흐름에 따라 데이터의 조회 속도가 느려지고 스토리지 문제의 영향이 생길 수 밖에 없겠죠?
InfluxDB 의 리텐션 자동 활성화 옵션 켜기
리텐션을 활성화 하고 리텐션 주기를 설정하기 위해서는 아래의 단계로 작업을 해야 합니다. 이미 데이터베이스를 생성해서 사용하고 있는 경우와 처음 생성하는 경우로 나뉘어 질텐데요, InfluxDB 설정 파일의 변경 이전에 만든 DB 인가, 이후에 만든 DB 인가로 설정 값이 적용되게 됩니다.
InfluxDB 의 설정 파일은 CentOS 기준으로 /etc/influxdb/influxdb.conf 로 저장되어 있습니다. 이 파일을 열어서 초반부를 살펴보면 `retention-autocreate=true` 라는 옵션이 주석 처리 되어 있는걸 볼 수 있습니다. 데이터 베이스 생성시 자동으로 리텐션을 사용하도록 하기 위해서 주석문을 풀어야겠죠?
// CentOS 기준
$ vim /etc/influxdb/influxdb.conf
###
### [meta]
###
### Controls the parameters for the Raft consensus group that stores metadata
### about the InfluxDB cluster.
###
[meta]
# Where the metadata/raft database is stored
dir = "/var/lib/influxdb/meta"
# Automatically create a default retention policy when creating a database.
# retention-autocreate = true
# If log messages are printed for the meta service
# logging-enabled = true
리텐션 작업이 필요한지 확인하는 설정 항목은 조금 더 아랫쪽에 있습니다. vim 을 쓰고 있다면 슬래시를 눌러 키워드를 검색하여 위치를 빠르게 찾아가도록 하겠습니다. 주석처리 되어 있는 두가지 옵션을 활성화 해야 합니다. `enabled=true` 는 주기적인 점검시 정의된 리텐션 정책을 적용의 On, Off 역할이고, `check-internal` 은 점검을 수행하는 간격을 지정하는 값입니다.
(vim 에서 /[retention] 을 입력하면 빠르게 찾을 수 있습니닷!)
###
### [retention]
###
### Controls the enforcement of retention policies for evicting old data.
###
[retention]
# Determines whether retention policy enforcement enabled.
# enabled = true
# The interval of time when retention policy enforcement checks run.
# check-interval = "30m"
리텐션 자동 활성화 확인하기
위의 옵션들의 주석 처리를 해제한 후 InfluxDB 를 재기동 했습니다. 재기동을 했으니 새로운 변경 사항이 반영되었겠죠? InfluxDB CLI 에 접근하여 새로운 DB 를 생성하여 설정 변경전에 생성한 DB 와 리텐션 정책이 어떻게 차이가 나는지 확인해 보도록 하겠습니다.
// InfluxDB 재기동 (CentOS 7.x 이후 기준)
$ systemctl restart influxdb.service
// 리텐션 자동 생성 활성화 전에 만든 DB 의 정보
$ influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
> use encreport
Using database encreport
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
// 리텐션 자동 생성 활성화후 DB 생성 및 정보 확인
>
> create database test
> use test
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
어랏..? 생각과는 좀 다릅니다. 리텐션 자동 활성화를 선택 하건 하지 않건 변화가 보이지 않습니다. 자동 생성 되었음을 알려주는 이름인 `autogen` 을 가진 정책이 각 데이터베이스에 이미 존재합니다. 도대체 무슨일이 일어나는지 알수가 없어서 가장 처음에 나온 설정인 `retention-autocreate=false` 로 명시적으로 끈 뒤에 데이터베이스를 생성해 보겠습니다. 당연히 리로딩도 해주셔야 합니다!
> create database test2
> use test2
Using database test2
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
아하... 이런 것이었습니다. 설정의 주석을 풀던 풀지 않던 일단 기본 값은 `autogen` 정책을 만드는 것이었습니다. 어렵게 주석을 묶고 풀고 할 이유가 없었던 것 같은 느낌적 느낌입니다. 여튼, 기본 정책은 자동으로 잘 생성되니 다음 포스팅에서는 실제 정책을 만들어서 데이터베이스에 적용하는 방법을 살펴보도록 하겠습니다!
오늘의 교훈 : 기본 문서를 잘 읽자