InfluxDB의 기본 개념, 장단점, 적합한 사용 사례, 설치 방법을 알아봅니다.
InfluxDB란?
InfluxDB는 시계열(Time Series) 데이터에 특화된 오픈소스 데이터베이스입니다.
시간 순서로 기록되는 대량의 데이터를 빠르게 쓰고, 시간 범위 기반으로 효율적으로 조회할 수 있도록 설계되었습니다.
시계열 데이터란?
시계열 데이터는 시간에 따라 연속적으로 기록되는 데이터입니다.
| 예시 |
설명 |
| 서버 모니터링 |
CPU 사용률, 메모리, 디스크 I/O (매초) |
| IoT 센서 |
온도, 습도, 압력 (매초~매분) |
| 금융 데이터 |
주가, 환율, 거래량 (매초) |
| 애플리케이션 메트릭 |
응답 시간, 에러율, 요청 수 |
| 네트워크 트래픽 |
대역폭, 패킷 수, 지연 시간 |
| 스마트 팩토리 |
설비 가동률, 생산량, 불량률 |
왜 InfluxDB를 사용하는가?
RDBMS로 시계열 데이터를 처리할 때의 문제
| 문제 |
설명 |
| 쓰기 성능 |
초당 수만~수십만 건 삽입 시 RDBMS는 한계 |
| 저장 효율 |
시계열 데이터는 압축 가능하지만 RDBMS는 범용 저장 |
| 조회 패턴 |
시간 범위 + 집계 쿼리에 RDBMS 인덱스 비효율 |
| 데이터 보존 |
오래된 데이터 자동 삭제/다운샘플링 어려움 |
| 테이블 크기 |
수억~수십억 행이 빠르게 쌓여 관리 어려움 |
InfluxDB가 해결하는 것
| 기능 |
설명 |
| 고속 쓰기 |
초당 수십만 포인트 삽입 가능 |
| 시간 기반 압축 |
TSM(Time-Structured Merge Tree) 엔진 |
| 자동 다운샘플링 |
오래된 데이터를 요약본으로 변환 |
| 보존 정책 |
일정 기간 후 자동 삭제 (Retention Policy) |
| 시간 범위 쿼리 최적화 |
시간 인덱스 기본 내장 |
| 연속 쿼리 |
실시간 집계 자동 실행 |
InfluxDB 장단점
장점
| 장점 |
설명 |
| 시계열 최적화 |
시간 기반 쓰기/읽기에 최적화된 스토리지 엔진 |
| 고속 삽입 |
초당 수십만 포인트 쓰기 가능 |
| 자동 데이터 관리 |
Retention Policy로 오래된 데이터 자동 삭제 |
| 내장 함수 풍부 |
이동 평균, 미분, 적분, 예측 등 시계열 전용 함수 |
| 스키마리스 |
태그/필드를 자유롭게 추가 가능 |
| 에코시스템 |
Telegraf(수집), Chronograf(시각화), Kapacitor(알림) |
| Grafana 연동 |
대시보드 시각화 도구와 완벽 호환 |
| 압축 효율 |
시계열 데이터 특성을 활용한 높은 압축률 |
단점
| 단점 |
설명 |
| 범용 DB 아님 |
JOIN, 트랜잭션, 복잡한 관계 표현 불가 |
| 업데이트 비효율 |
기존 데이터 수정에 적합하지 않음 (Append-only 설계) |
| 삭제 비용 |
개별 포인트 삭제가 비효율적 |
| 높은 카디널리티 주의 |
태그 값 종류가 너무 많으면 성능 저하 |
| 클러스터링 제한 |
OSS 버전은 단일 노드 (Enterprise만 클러스터) |
| 학습 곡선 |
Flux 언어 (InfluxDB 2.x)가 독특함 |
| 메모리 사용 |
인덱스를 메모리에 유지하므로 RAM 필요 |
언제 InfluxDB를 사용해야 하는가?
적합한 경우 ✅
| 사용 사례 |
이유 |
| 서버/인프라 모니터링 |
대량 메트릭, 시간 범위 조회, 대시보드 |
| IoT 센서 데이터 |
초당 수만 건 삽입, 자동 보존 정책 |
| 애플리케이션 성능 모니터링 (APM) |
응답 시간, 에러율 추적 |
| 실시간 분석 대시보드 |
Grafana 연동, 실시간 집계 |
| 네트워크 모니터링 |
트래픽, 대역폭, 패킷 분석 |
| DevOps 메트릭 |
CI/CD 파이프라인, 배포 추적 |
| 금융 시계열 |
주가, 거래량 (단, 트랜잭션 불필요 시) |
| 스마트 팩토리 |
설비 데이터, 생산 메트릭 |
부적합한 경우 ❌
| 사용 사례 |
이유 |
대안 |
| 사용자 정보, 주문 관리 |
관계형 데이터, 트랜잭션 필요 |
PostgreSQL, MySQL |
| 문서 저장 (CMS) |
유연한 문서 구조 필요 |
MongoDB |
| 캐시, 세션 |
키-값 빠른 접근 |
Redis |
| 전문 검색 |
텍스트 검색 |
Elasticsearch |
| 데이터 수정이 빈번한 경우 |
Append-only 설계와 맞지 않음 |
RDBMS |
| 복잡한 JOIN이 필요한 경우 |
JOIN 미지원 |
RDBMS |
InfluxDB 버전 비교
| 항목 |
InfluxDB 1.x |
InfluxDB 2.x |
InfluxDB 3.x |
| 쿼리 언어 |
InfluxQL (SQL 유사) |
Flux (함수형) |
SQL + InfluxQL |
| UI |
별도 (Chronograf) |
내장 웹 UI |
내장 웹 UI |
| 인증 |
기본 인증 |
토큰 기반 |
토큰 기반 |
| 조직/버킷 |
Database/RP |
Organization/Bucket |
Database |
| 스토리지 |
TSM |
TSM |
Apache Arrow + Parquet |
| 라이선스 |
MIT |
MIT (OSS) |
Apache 2.0 (Core) |
이 강좌에서는 InfluxDB 2.x를 기준으로 설명합니다.
설치
Docker (권장)
docker run -d \
--name influxdb \
-p 8086:8086 \
-v influxdb-data:/var/lib/influxdb2 \
-e DOCKER_INFLUXDB_INIT_MODE=setup \
-e DOCKER_INFLUXDB_INIT_USERNAME=admin \
-e DOCKER_INFLUXDB_INIT_PASSWORD=InfluxPass123! \
-e DOCKER_INFLUXDB_INIT_ORG=myorg \
-e DOCKER_INFLUXDB_INIT_BUCKET=mybucket \
-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-token \
influxdb:2
# 웹 UI 접속
# http://localhost:8086
Linux (Ubuntu)
wget https://dl.influxdata.com/influxdb/releases/influxdb2_2.7.x_amd64.deb
sudo dpkg -i influxdb2_2.7.x_amd64.deb
sudo systemctl start influxdb
sudo systemctl enable influxdb
# 초기 설정
influx setup
Mac
brew install influxdb
brew services start influxdb
# 초기 설정
influx setup
Windows
- InfluxDB 다운로드 페이지에서 Windows 바이너리 다운로드
- 압축 해제 후
influxd.exe 실행
- 브라우저에서
http://localhost:8086 접속하여 초기 설정
설치 확인
influx version
influx ping
# 웹 UI: http://localhost:8086
접속 방법
influx CLI
# 토큰 인증
influx config create \
--config-name default \
--host-url http://localhost:8086 \
--org myorg \
--token my-super-secret-token \
--active
# 버킷 목록
influx bucket list
# 쿼리 실행
influx query 'from(bucket:"mybucket") |> range(start: -1h)'
HTTP API
# 데이터 쓰기
curl -X POST "http://localhost:8086/api/v2/write?org=myorg&bucket=mybucket" \
-H "Authorization: Token my-super-secret-token" \
-H "Content-Type: text/plain" \
--data-raw "cpu,host=server01 usage=45.2 1714900000000000000"
# 데이터 조회
curl -X POST "http://localhost:8086/api/v2/query?org=myorg" \
-H "Authorization: Token my-super-secret-token" \
-H "Content-Type: application/vnd.flux" \
--data 'from(bucket:"mybucket") |> range(start: -1h)'
TICK 스택 (InfluxDB 에코시스템)
| 구성 요소 |
역할 |
설명 |
| Telegraf |
수집 (Collector) |
200+ 플러그인으로 메트릭 수집 |
| InfluxDB |
저장 (Storage) |
시계열 데이터 저장/조회 |
| Chronograf |
시각화 (Visualization) |
대시보드, 관리 UI (2.x는 내장) |
| Kapacitor |
알림 (Alerting) |
실시간 스트림 처리, 알림 (2.x는 내장) |
InfluxDB 2.x에서는 Chronograf와 Kapacitor 기능이 내장되어 별도 설치가 불필요합니다.
시각화는 Grafana와 연동하는 것이 더 일반적입니다.
관련된 글 (influxdb > lecture-influxdb)