본문으로 건너뛰기
김신건의 로그

[AWS] Timestream: 시계열 DB (LiveAnalytics + InfluxDB)

· 수정 · 📖 약 3분 · 1,118자/단어 #aws #cloud #timestream #timeseries #database #iot #monitoring
Amazon Timestream, AWS Timestream, Timestream, Timestream for LiveAnalytics, Timestream for InfluxDB, TSDB on AWS, 시계열 데이터베이스

정의

Amazon Timestream 은 AWS 의 관리형 시계열 데이터베이스 (Time-Series Database). 2024년부터 두 가지 별도 제품:

  • Timestream for LiveAnalytics - 서버리스, SQL, 초기 Timestream 원류
  • Timestream for InfluxDB - 관리형 InfluxDB v2.x (Flux/InfluxQL)

시계열 데이터의 특성:

  • Append-only (수정 거의 없음)
  • 시간 순 조회 (최근 데이터 조회 빈도 압도적)
  • 대량 인제스션 (초당 수백만 포인트)
  • Aggregation / rollup 이 표준 쿼리
  • 오래된 데이터는 저해상도로 압축 (downsampling)

일반 Postgres / DynamoDB 로도 가능하지만, 시계열 전용 저장/쿼리 최적화가 없어 규모가 커지면 비쌈/느림.

두 제품 비교

Timestream for LiveAnalyticsTimestream for InfluxDB
아키텍처서버리스, memory + magnetic 티어관리형 InfluxDB v2 인스턴스
쿼리 언어SQL (Timestream 방언)Flux, InfluxQL
인스턴스없음 (서버리스)db.influx.medium ~ db.influx.24xlarge
오픈소스 호환X (AWS 전용)O (InfluxDB v2 호환)
write 성능자동 확장인스턴스 크기
쿼리 지연수백 ms한 자릿수 ms
최대 저장사실상 무제한 (magnetic)최대 16 TiB / instance
Multi-AZ자동옵션
과금write / query / storage 단위인스턴스 시간 + 스토리지
적합IoT 대규모, DevOps 모니터링, AWS 네이티브기존 InfluxDB 사용자, 저지연 필요

Timestream for LiveAnalytics (원류, 서버리스)

스토리지 티어

두 계층 자동 이동.

티어위치지연보존
Memory Store인메모리매우 낮음시간 - 일 (설정)
Magnetic Store자기 저장낮음일 - 년 (설정, 최대 200년)
  • 새 데이터 -> Memory Store 로
  • Memory 보존 기간 지나면 자동으로 Magnetic 으로 티어링
  • 쿼리는 두 티어를 투명하게 조회

데이터 모델

Database
└── Table
    └── Record
        ├── Dimensions (메타) : device_id, region, ...
        ├── Measure (측정)    : temperature=25.3
        └── Timestamp

Write 예제

import boto3
client = boto3.client('timestream-write')

client.write_records(
    DatabaseName='iot',
    TableName='sensor_readings',
    Records=[{
        'Dimensions': [
            {'Name': 'device_id', 'Value': 'sensor-42'},
            {'Name': 'region', 'Value': 'seoul'},
        ],
        'MeasureName': 'temperature',
        'MeasureValue': '25.3',
        'MeasureValueType': 'DOUBLE',
        'Time': str(int(time.time() * 1000)),
        'TimeUnit': 'MILLISECONDS',
    }]
)

멀티 측정 (Multi-measure): 한 레코드에 여러 측정값을 담아 쓰기.

Query 예제

-- 최근 1시간 device 별 평균 온도
SELECT
  device_id,
  BIN(time, 5m) AS bin,
  AVG(measure_value::double) AS avg_temp
FROM iot.sensor_readings
WHERE measure_name = 'temperature'
  AND time > ago(1h)
GROUP BY device_id, BIN(time, 5m)
ORDER BY bin DESC;

-- Interpolation (누락 보간)
SELECT INTERPOLATE_LINEAR(
  CREATE_TIME_SERIES(time, measure_value::double),
  SEQUENCE(ago(1h), now(), 1m)
)
FROM iot.sensor_readings
WHERE device_id = 'sensor-42' AND measure_name = 'temperature';

-- 이동 평균
SELECT time, measure_value::double,
       AVG(measure_value::double) OVER (
         PARTITION BY device_id
         ORDER BY time ROWS BETWEEN 10 PRECEDING AND CURRENT ROW
       ) AS moving_avg
FROM iot.sensor_readings
WHERE device_id = 'sensor-42' AND time > ago(1d);

시계열 특화 함수:

  • BIN(time, INTERVAL) - 시간 버킷
  • INTERPOLATE_LINEAR / CUBIC / LOCF - 보간
  • CREATE_TIME_SERIES - 배열로 변환
  • PARTIAL_APPROX_DISTINCT - 근사 distinct

요금 (LiveAnalytics)

항목요금 (us-east-1, 2026)
Write~$0.50 / 1M writes (1 KB)
Memory Store~$0.036 / GB-시간 (매우 비쌈)
Magnetic Store~$0.03 / GB-월
Query~$0.01 / GB scanned (10 MB 최소)

최적화:

  • Memory store 보존을 최소로 (실시간 쿼리 필요 만큼만)
  • Magnetic 으로 빨리 티어링
  • Multi-measure 쓰기 (write 수 절감)
  • 쿼리 결과 캐싱

Timestream for InfluxDB (2024+)

관리형 InfluxDB v2. 오픈소스 InfluxDB 를 AWS 가 완전 관리.

특징

  • InfluxDB v2.7 (2026 기준)
  • Flux + InfluxQL 지원
  • Line Protocol 로 write (InfluxDB 표준)
  • Organizations + Buckets 모델 (InfluxDB 네이티브)
  • 관리형: 백업, SW 업데이트, Multi-AZ
  • 인스턴스: db.influx.medium ~ db.influx.24xlarge
  • 스토리지: 3K / 12K / 16K IOPS 티어, 최대 16 TiB

Write (Line Protocol)

sensor,device=sensor-42,region=seoul temperature=25.3,humidity=60 1706600000000000000
from influxdb_client import InfluxDBClient, Point

client = InfluxDBClient(url="https://ts-influx-xxx.timestream-influxdb.amazonaws.com:8086",
                        token=TOKEN, org="my-org")

point = Point("sensor") \
    .tag("device", "sensor-42") \
    .tag("region", "seoul") \
    .field("temperature", 25.3) \
    .field("humidity", 60)

client.write_api().write(bucket="iot", record=point)

Query (Flux)

from(bucket: "iot")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "sensor" and r._field == "temperature")
  |> group(columns: ["device"])
  |> aggregateWindow(every: 5m, fn: mean)

요금 (InfluxDB)

  • 인스턴스 시간 (db.influx.medium: ~5.6/hr)
  • 스토리지 GB-월
  • 데이터 전송 표준

vs LiveAnalytics 비용 감각:

  • 인스턴스 기반 = 사용량 무관 고정
  • LiveAnalytics 는 write/query 볼륨 기반
  • 워크로드 예측 후 선택

언제 무엇을 쓰나

시나리오선택
AWS 네이티브 + IoT 대규모 writeLiveAnalytics
DevOps/APM 모니터링 대시보드InfluxDB (Grafana 통합 우수)
기존 InfluxDB 마이그레이션InfluxDB
서버리스, 트래픽 예측 불가LiveAnalytics
저지연 (< 10 ms) 쿼리InfluxDB
200년 보존이 필요한 규제LiveAnalytics (magnetic)
Flux / InfluxQL 코드 재사용InfluxDB
Timestream SQL 로 Athena 스타일 쿼리LiveAnalytics

대안 시계열 저장

옵션특징
Timestream (both)관리형
Postgres + TimescaleDB오픈소스 확장, SQL
ClickHouse컬럼형 OLAP, 매우 빠름, 셀프 호스팅
Prometheus모니터링 표준 (단기 저장)
VictoriaMetricsPrometheus 호환, 장기 저장
OpenSearch (Metrics)로그와 통합
S3 + Parquet + Athena대규모 저비용, 배치

결정 기준: 실시간성 / 규모 / 예산 / 팀 익숙도.

데이터 인제스션 패턴

flowchart LR
    IoT["IoT 디바이스<br/>수만 개"] --> Kinesis["Kinesis Data Streams"]
    Kinesis --> Flink["Managed Flink<br/>(집계/필터)"]
    Flink --> TS["Timestream<br/>LiveAnalytics"]

    Grafana --> TS
    QS[QuickSight] --> TS
    Custom[커스텀 앱] --> TS

    TS --> SM["SageMaker<br/>(이상 감지 학습)"]

통합

서비스통합
AWS IoT Core규칙으로 직접 write
KinesisFirehose / Managed Flink 통해
Grafana데이터 소스 플러그인
QuickSight데이터 소스
TelegrafInfluxDB / LiveAnalytics 둘 다
SageMaker이상 감지 학습 데이터
CloudWatch시스템 메트릭 -> Timestream
JDBCBI 도구 (LiveAnalytics)

함정

WARNING

Memory Store 는 매우 비쌈. 필요한 최소 기간만 유지 (기본 6시간, 필요에 따라 조정). 오래 두면 요금 폭탄.

CAUTION

한 번 magnetic 으로 티어링된 데이터는 다시 memory 로 못 옮김. 최근 데이터 쿼리가 잦으면 memory 보존 늘리기.

WARNING

Timestream SQL 은 표준 ANSI SQL 아님. 방언이 있어 Postgres / Athena SQL 그대로 안 됨.

IMPORTANT

write 최대 크기: 1 MB / record, 100 records / batch. IoT 게이트웨이가 배치를 잘 구성해야 함.

CAUTION

InfluxDB 인스턴스는 유휴 시에도 시간당 청구. 트래픽 없어도 비용 발생. Serverless 원하면 LiveAnalytics.

WARNING

cardinality explosion: dimension 조합이 수백만 개 넘어가면 (예: user_id × device_id × session_id) 저장/쿼리 성능 급락. Dimension 설계 신중.

IMPORTANT

BI 대시보드 백엔드로 잦은 쿼리 = 쿼리 요금 폭탄. 결과 캐싱 (QuickSight SPICE) 또는 미리 계산.

관련 위키

이 글의 용어 (8개)
[AWS] Amazon RDS (Relational Database Service)cloud
정의 Amazon RDS (Relational Database Service) 는 AWS 가 관리하는 관계형 데이터베이스 서비스 입니다. 6개 엔진 (MySQL, PostgreS…
[AWS] Athena: 서버리스 SQL on S3cloud
정의 Amazon Athena 는 S3 에 있는 데이터를 서버 없이 SQL 로 쿼리 하는 서비스. 클러스터 프로비저닝, 스키마 로딩, 인덱스 생성 없이 데이터 파일 (Parque…
[AWS] CloudWatch: 메트릭, 로그, 알람cloud
정의 CloudWatch = AWS 의 모니터링 + 로그 + 알람 통합 서비스. 메트릭 수집, 로그 집계, 대시보드, 알람, 이상 감지를 하나의 서비스에서 제공. 사용 상황 | …
[AWS] Kinesis Data Streams: 실시간 스트리밍 수집cloud
정의 Amazon Kinesis Data Streams (KDS) 는 실시간 스트리밍 데이터를 대규모로 수집/저장하고, 여러 소비자가 각자 실시간 처리/재처리 할 수 있는 관리형…
[AWS] Managed Service for Apache Flink (구 Kinesis Data Analytics)cloud
정의 Amazon Managed Service for Apache Flink (구 Amazon Kinesis Data Analytics) 는 스트리밍 데이터를 실시간으로 처리 (…
[DB] DynamoDB: PK + SK, single-table design, GSI / LSIdatabase-internals
정의 DynamoDB 는 AWS 의 fully managed key-value + document NoSQL. low-latency, infinite scale, schemale…
[DB] PostgreSQL: 프로세스 모델, MVCC, WAL, 확장성database-internals
정의 PostgreSQL 은 오픈소스 ORDBMS. 1986 UC Berkeley POSTGRES 의 후예. MVCC, 확장 가능 타입, JSONB, full-text searc…
ETL / ELTdata-engineering
정의 ETL = Extract (추출) + Transform (변환) + Load (적재). 여러 소스에서 데이터를 뽑아 정제한 뒤 데이터 웨어하우스 에 저장하는 파이프라인. E…

이 개념을 다룬 위키 페이지 (1)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기