GH GambleHub

시계열 저장

1) 시계열에 대한 별도의 아키텍처 인 이유

시계열은 다음을 특징으로하는 태그 (레이블) 와 쌍 (타임 스탬프, 값) 의 시퀀스입니다

높은 기록 속도 (가장 빠른) 및 주파수.
시간 범위별로 읽습니다 (스캔 + 집계/창 함수).
태그 조합으로 인한 폭발성 카디널리티.
보존 (유효 수명 제한) 및 다운 샘플링 (시간 압축) 이 필요합니다.
따라서 특수 스토리지 모델, 압축 형식 및 요청 프로토콜입니다.

2) 데이터 모델 및 계약 지표

2. 명명 및 태그 1 개

(PHP 3 = 3.0.6, PHP 4)

레이블: 속성 키 ('작업', '인스턴스', 'dc', '포드', '상태', '메소드').
불변량: 이름의 의미를 변경하지 않고 호환되지 않는 변경 사항이있는 버전 ('metric _ v2') 을 추가하십시오.

2. 행의 2 가지 유형

게이지, 카운터, 히스토그램/요약, 이벤트/스팬.
재무/밀도의 경우-수정 단위 및 집계성 (합산/평균).

2. 3 유지 및 롤업 정책

핫 디테일 (초/1-10 분) → 따뜻한 단위 (5m/1h) → 차가움 (1d/1w).
카운터-저장 속도/deriv 집계.

3) 녹음 경로: 수신, 버퍼링, 컴팩트

3. 1 소화 파이프 라인

게이트웨이/에이전트를 통해 스크랩 (풀, 프로 메테우스) 또는 푸시 (OTLP/StatsD/Graphite).
WAL에서 버퍼링 (미리 쓰기 로그) 한 다음 세그먼트/블록 (LSM과 같은 아키텍처) 으로 압축합니다.
배칭 및 시간 정렬은 압축 및 속도를 증가시킵니다.

3. 2 고장난 취급 및 취급

관용 창 (예를 들어, 5-15 분) + 정책: 'drop | upsert | keep-last'.

버전 지정 또는 "마지막 레코드 승리" 로 '(series _ id, 타임 스탬프)' 로 중복 제거

3. 3 압축

타임 스탬프의 델타 델타, 플로트의 경우 Gorilla/XOR, RLE 및 정수의 경우 바린트, 태그의 경우 사전.
1-8K 포인트의 최적 블록 크기 ("청크") 는 IOPS와 CPU 간의 절충안입니다.

4) 스토리지 체계: TSDB vs SQL/컬럼

4. 1 전용 TSDB

Prometheus (로컬, 짧은 보존, PromQL, 원격 _ 쓰기).
VictoriaMetrics/M3/InfluxDB-수평 스케일링, 긴 보존, 원격 읽기.
블록 형식은 범위 스캔 + 입찰 집계에 최적화되어 있습니다.

4. 2 개의 관계/열 엔진

TimescaleDB (PostgreSQL): 하이퍼 테이블, 시간/공간 별 덩어리, 연속 집계.
ClickHouse: MergeTree/TTL/구체화 된 뷰, 우수한 압축 및 시간 집계.
선택 - 쿼리 생태계 (SQL vs PromQL), 가입/BI 요구 사항 및 팀 운영 기술.

5) 계획 및 예

5. 1 TimescaleDB: 과도한 + 연속 집계

sql
CREATE TABLE metrics_cpu(
ts timestamptz NOT NULL,
host text NOT NULL,
dc text NOT NULL,
usage double precision NOT NULL,
PRIMARY KEY (ts, host, dc)
);
SELECT create_hypertable('metrics_cpu', by_range('ts'), chunk_time_interval => interval '1 day');

-- Continuous unit (5 minutes)
CREATE MATERIALIZED VIEW cpu_5m
WITH (timescaledb. continuous) AS
SELECT time_bucket('5 minutes', ts) AS ts5m, host, dc, avg(usage) AS avg_usage
FROM metrics_cpu GROUP BY 1,2,3;

-- Politicians
SELECT add_retention_policy('metrics_cpu', INTERVAL '14 days');
SELECT add_retention_policy('cpu_5m',   INTERVAL '180 days');

5. 2 ClickHouse: 저장 공간 집계

sql
CREATE TABLE metrics_cpu (
ts DateTime,
host LowCardinality(String),
dc LowCardinality(String),
usage Float32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
TTL ts + INTERVAL 14 DAY
SETTINGS index_granularity = 8192;

-- Rollup in hourly detail
CREATE MATERIALIZED VIEW cpu_1h
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
POPULATE AS
SELECT toStartOfHour(ts) AS ts, host, dc, avg(usage) AS usage
FROM metrics_cpu GROUP BY ts, host, dc;

5. 3 Prometheus/VictoriaMetrics: 원격 _ 쓰기

yaml global:
scrape_interval: 15s remote_write:
- url: http://vminsert:8480/insert/0/prometheus/api/v1/write

6) 카디널리티: 스토리지를 "폭발" 하지 않는 방법

6. 1 규칙

라벨 카디널리티 제한 (고유 값 수). 'user _ id', '요청 _ id', 'trace _ id' 를 포함하지 마십시오.
"다중 값" 태그 (범주 → 코드) 를 정규화하십시오.
LowCardinality 유형 (CH), 사전/레이블 트리 (TSDB) 를 사용하십시오.

6. 2 개의 제어 및 경고

측정 항목: 'series _ count', 'lab _ beals {label}', 톱 N "cly" 행.
임차인/작업당 카디널리티 제한을 초과하면 실패 정책을 작성하십시오.

6. 3 역사/히스토그램

카디널리티가 높은 경우 골재 (히스토그램 버킷) 및 사전 롤업을 저장하는 것이 좋습니다. 집계에서 온라인으로 계산하는 양입니다.

7) 유지, 다운 샘플링 및 계층 형 스토리지

7. 1 정책

핫: 3-30 일의 초/분 디테일.
따뜻함: 90- 365 일의 5m/1h 집계.
추위: 수년간의 집계, Parquet가있는 객체 저장 장치 (S3/Glacier) 의 보관.

7. 기술자 2 명

연속 골재 (Timescale), 구체화 된보기 (CH), 보존 + 롤업 작업 (Victoria/M3/Influence).
계층 형 스토리지: 로컬 캐시가있는 개체의 "핫 블록", 로컬 "콜드".

8) 쿼리 및 언어

8. 1 PromQL (예)

promql rate(http_requests_total{job="api",status=~"5.."}[5m])

5xx API 오류율을 찾고 있습니다.

8. 창에 의하여 2 개의 SQL 집계

sql
SELECT time_bucket('1h', ts) AS hour,
dc, avg(usage) AS avg, max(usage) AS pmax
FROM metrics_cpu
WHERE ts >= now() - interval '24 hours'
GROUP BY 1,2 ORDER BY 1;

8. 3 Anomalies (스케치)

창 통계에 의한 Z- 스코어/ESD, 계절성의 STL 분해; 결과를 별도의 행 '이상 = 1/0' 으로 저장하십시오.

9) 통합 및 프로토콜

OTLP (OpenTelemetry): 메트릭/트레일/로그, 에이전트 수출 업체 (otel-collector) → TSDB/clickhouse/천체.
StatsD/Graphite: 간단한 카운터/타이머; 가장자리로 프록시 한 다음 단일 형식으로 변환하십시오.
Kafka/NATS: 섭취 버스트를위한 버퍼, 백필을위한 리플레이어; 소비자는 batchami를 씁니다.

Kafka → ClickHouse의 예 (의사):
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary

10) 접근성, HA 및 연맹

Replica/TSDB HA 쌍 또는 Prometheus 연합 (지역 → 글로벌 수준).
장기 스토리지 및 중앙 집중식 대시 보드를위한 원격 읽기/쓰기.
샤드 별/시간: 섭취량의 균일 한 분포, 'dc/테넌트' 별 지역.

11) 스토리지 자체의 관찰 가능성

11. 1 메트릭

Ingest: 'sample/sec', 'post _ latency', 'wal _ fsync _ ms'.
"블록 _ 카운트 '," 압축 _ 큐 _ len', "청크 _ 압축 _ ratio '.
'query _ qps', 'scan _ bytes', 'p95/p99 _ latency', 'alloc _ bytes'.
카디널리티: 'series _ count', 상위 레이블.

11. 2 SLO

"1 시간 범위의 p99 대기 시간은 QPS 계정 500에서 200ms입니다".

"Ingest-drop X 샘플/초 전에 버스트시 01%. "

"압축 백 로그 <10 분".

11. 3 경고

성장 'series _ count'> Y %/hour.
압축 큐/플러시> 임계 값.
차수 이외의> N%, dedup/late-drops.

12) 안전 및 다중 임대

'테넌트' (키, 개별 테이블/데이터베이스, 할당량 레이블) 별 격리.
라벨 소독 (PII 금지), 크기/가치 제어.
"휴식 중" 및 전송 중 암호화, "민감한" 메트릭에 대한 액세스 감사.

13) 운영 관행

워밍업 및 콜드 스타트: 캐시에서 "핫" 블록 핀, 마지막 N 시간의 프리 페치.
백필: 우선 순위가 낮은 개별 파이프 라인은 온라인과 혼합되지 않습니다.
스키마 버전 지정: 병렬 쓰기 (이중 쓰기) 및 후속 스위치가있는 마이그레이션.
저장 예산: 'cost _ per _ TB _ month' 제어 + 카디널리티 성장 예측.

14) 반 패턴

카디널리티가 높은 태그 (user _ id, u겠습니다) → 행의 폭발.
보존이없는 "영원한" 행 → 통제되지 않은 성장.
비 정렬/정렬 기록 → 압축 및 IOPS 폭풍 불량.
동일한 디스크 풀에서 OLTP와 긴 스캔을 혼합하십시오.
주문 외 정책 부족 → 중복 및 팽창.
수백 개의 버킷이있는 히스토그램 → 비용은 × 10입니다.

15) 구현 점검표

  • 지표, 유형 및 단위를 정의합니다. 이름/라벨 계약을 수정합니다.
  • 엔진 선택 (TSDB vs SQL/열) 및 쿼리 언어 (PromQL/SQL).
  • 보존/롤업 (뜨거운/따뜻한/차가운) 및 ILM을 설계하십시오.
  • 수집 설정: WAL/배치/정렬, 순서가 맞지 않는 창.
  • 압축 켜기 (델타 오브 델타/XOR/RLE), 최적의 덩어리.
  • 카디널리티 제어: 할당량, 경고, 옵트 아웃 정책.
  • HA/페더레이션 및 원격 쓰기/읽기 설정.
  • SLO 대시 보드 및 스토리지 메트릭 (가장 많이/쿼리/스토리지).
  • 보안/테넌트 격리 정책 및 라벨에 PII 부족.
  • 정기적 인 "게임 데이": 백필, 노드 손실, 섭취 급증.

16) FAQ

Q: 인프라 모니터링을 위해 무엇을 선택해야합니까: Prometheus 또는 ClickHouse/Timescale?
A: 기본 모니터링 및 PromQL-Prometheus + 장기 스토리지 (Victoria/M3). BI/창고 시나리오 및 SQL-Timescale/ClickHouse.

Q: 무거운 요약없이 양자를 저장하는 방법?
A: 깔끔한 양동이가있는 히스토그램을 사용하고 요청시 양을 계산하십시오. 또는 골재에서 t- 다이제스트/CKMS.

Q: 고장난 상태를 처리하는 방법?
A: 허용 오차 창 (5-15 분) 및 결정 론적 결정 정책을 입력하십시오. 모바일/에지에서 원격 측정을 위해-창이 더 넓습니다.

Q: 롤업은 언제 필요합니까?
A: 항상> 30-90 일: 골재는 크기 × 10-100을 줄이고 분석을 가속화합니다.

Q: 로그와 메트릭을 혼합 할 수 있습니까?
A: 별도로 저장하십시오 (형식/쿼리는 다릅니다). 상관 관계를 위해 Exemplar/TraceID 및 대시 보드를 사용하지만 모든 것을 하나의 테이블에 추가하지는 않습니다.

17) 총계

유효한 시계열 스토리지는 메트릭 계약 + 태그 분야, 유능한 섭취 (WAL/압축), 압축 및 유지/롤업 정책입니다. 카디널리티 제어, NA/페더레이션 및 매장 자체의 관찰 성을 추가하면 몇 개월에서 몇 년 동안 예측 가능한 p95, 합리적인 비용 및 서지 저항력을 얻을 수 있습니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.