InfluxDB의 운영 관리, 백업/복구, 성능 튜닝, 자주 발생하는 문제 해결을 정리합니다.
보안 및 인증
토큰 관리
# 토큰 목록
influx auth list
# 읽기 전용 토큰 생성
influx auth create \
--org myorg \
--read-bucket mybucket \
--description "Grafana read-only"
# 읽기/쓰기 토큰 생성
influx auth create \
--org myorg \
--read-bucket mybucket \
--write-bucket mybucket \
--description "Telegraf write"
# 토큰 비활성화
influx auth inactive --id <token-id>
# 토큰 삭제
influx auth delete --id <token-id>
사용자 관리
# 사용자 생성
influx user create --name devuser --org myorg
# 비밀번호 설정
influx user password --name devuser
# 사용자 목록
influx user list
# 사용자 삭제
influx user delete --name devuser
백업과 복구
백업
# 전체 백업
influx backup /backup/influxdb/full_$(date +%Y%m%d)
# 특정 버킷만
influx backup /backup/influxdb/mybucket --bucket mybucket
# 압축 백업
influx backup /backup/influxdb/backup_$(date +%Y%m%d) --compression gzip
복구
# 전체 복구
influx restore /backup/influxdb/full_20260505
# 특정 버킷 복구
influx restore /backup/influxdb/mybucket --bucket mybucket
# 다른 이름으로 복구
influx restore /backup/influxdb/mybucket --bucket mybucket --new-bucket mybucket_restored
성능 튜닝
시리즈 카디널리티 관리
시리즈 카디널리티는 InfluxDB 성능의 가장 중요한 지표입니다.
# 시리즈 카디널리티 확인
influx query 'import "influxdata/influxdb"
influxdb.cardinality(bucket: "mybucket", start: -30d)'
// 측정별 시리즈 수 확인
import "influxdata/influxdb"
influxdb.cardinality(bucket: "mybucket", start: -30d)
|> group(columns: ["_measurement"])
|> count()
카디널리티 줄이기
| 방법 |
설명 |
| 높은 카디널리티 Tag 제거 |
user_id, request_id 등을 Field로 변경 |
| Tag 값 정규화 |
URL 경로를 패턴으로 그룹핑 |
| 불필요한 Tag 제거 |
사용하지 않는 Tag 삭제 |
| 버킷 분리 |
용도별 버킷 분리 |
스토리지 설정 (config.toml)
[storage]
# TSM 엔진 캐시 크기
cache-max-memory-size = "1g"
# 캐시 스냅샷 크기
cache-snapshot-memory-size = "25m"
# 컴팩션 처리량
compact-throughput = "48m"
compact-throughput-burst = "48m"
쿼리 최적화
// ❌ 넓은 시간 범위 + 필터 없음
from(bucket: "mybucket")
|> range(start: -30d)
// ✅ 좁은 시간 범위 + 구체적 필터
from(bucket: "mybucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r.host == "server01")
|> filter(fn: (r) => r._field == "usage_user")
// ❌ 불필요한 데이터 로드 후 제거
from(bucket: "mybucket")
|> range(start: -1h)
|> last()
// ✅ pushdown 최적화 (filter를 먼저)
from(bucket: "mybucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> last()
모니터링
내부 메트릭 확인
# /metrics 엔드포인트 (Prometheus 형식)
curl http://localhost:8086/metrics
# 주요 지표
# influxdb_organizations_total
# influxdb_buckets_total
# influxdb_series_total (시리즈 카디널리티)
# go_memstats_alloc_bytes (메모리 사용량)
# http_api_requests_total (API 요청 수)
디스크 사용량 확인
# 데이터 디렉토리 크기
du -sh /var/lib/influxdb2/engine/
# 버킷별 크기
du -sh /var/lib/influxdb2/engine/data/*
자주 발생하는 문제
1. 높은 시리즈 카디널리티로 인한 성능 저하
증상: 메모리 사용량 급증, 쿼리 느려짐, OOM
// 카디널리티 확인
import "influxdata/influxdb"
influxdb.cardinality(bucket: "mybucket", start: -7d)
| 해결 |
설명 |
| 높은 카디널리티 Tag → Field 변경 |
스키마 재설계 |
| 불필요한 시리즈 삭제 |
influx delete |
| 버킷 보존 기간 단축 |
오래된 데이터 자동 삭제 |
2. 디스크 용량 부족
# 데이터 삭제 (시간 범위)
influx delete \
--bucket mybucket \
--start 2025-01-01T00:00:00Z \
--stop 2025-06-01T00:00:00Z
# 특정 measurement 삭제
influx delete \
--bucket mybucket \
--start 1970-01-01T00:00:00Z \
--stop $(date -u +"%Y-%m-%dT%H:%M:%SZ") \
--predicate '_measurement="old_metric"'
3. 쓰기 실패 (Write Timeout)
| 원인 |
해결 |
| 배치 크기 과대 |
배치 크기 줄이기 (5000 포인트 이하) |
| 디스크 I/O 병목 |
SSD 사용, I/O 스케줄러 확인 |
| 카디널리티 폭발 |
Tag 설계 검토 |
4. 쿼리 타임아웃
# 쿼리 타임아웃 설정 (config.toml)
# query-timeout = "30s"
| 해결 |
설명 |
| 시간 범위 축소 |
조회 기간 줄이기 |
| 다운샘플링 활용 |
장기 조회는 요약 버킷 사용 |
| 필터 추가 |
measurement, tag 필터 구체화 |
| aggregateWindow 사용 |
원본 대신 집계 데이터 조회 |
5. Telegraf 데이터 미수신
| 확인 항목 |
방법 |
| Telegraf 실행 상태 |
systemctl status telegraf |
| 설정 파일 오류 |
telegraf --config telegraf.conf --test |
| 토큰 권한 |
쓰기 권한 있는 토큰인지 확인 |
| 네트워크 |
InfluxDB 포트 접근 가능 여부 |
| 로그 확인 |
journalctl -u telegraf -f |
운영 체크리스트
| 항목 |
확인 방법 |
권장 |
| 시리즈 카디널리티 |
influxdb.cardinality() |
100만 이하 (OSS) |
| 디스크 사용량 |
du -sh |
여유 공간 20% 이상 |
| 메모리 사용량 |
/metrics |
물리 메모리의 80% 이하 |
| 보존 정책 |
버킷 설정 확인 |
용도에 맞게 설정 |
| 다운샘플링 |
Task 실행 상태 |
장기 데이터 요약 |
| 백업 |
정기 백업 스크립트 |
일 1회 이상 |
| 토큰 관리 |
최소 권한 원칙 |
읽기/쓰기 분리 |
| Telegraf 상태 |
로그 확인 |
에러 없는지 확인 |
DB 선택 가이드 (최종 비교)
| 요구사항 |
추천 DB |
| 시계열 메트릭 (모니터링, IoT) |
InfluxDB |
| 범용 관계형 데이터 |
PostgreSQL, MySQL |
| 문서형 유연한 스키마 |
MongoDB |
| 캐시, 세션, 실시간 |
Redis |
| 로그 검색, 전문 검색 |
Elasticsearch |
| 대규모 분석 (OLAP) |
ClickHouse, TimescaleDB |
관련된 글 (influxdb > lecture-influxdb)