GH GambleHub

Убактылуу катарды сактоо

1) Эмне үчүн убактылуу катар үчүн өзүнчө архитектура

Убакыт катар (time series) - бул тегдер (labels) менен жубайлардын (timestamp, value) ырааттуулугу:
  • Жогорку ылдамдык (ingest) жана мезгилдүүлүк.
  • Убакыт диапазондору боюнча окуулар (scan + агрегаттар/терезе функциялары).
  • Тегтердин айкалышынан улам жарылуучу кардиналдуулук.
  • retenshna зарылдыгы (сактоо мөөнөтү боюнча чектөөлөр) жана downsampling (убакыт кысуу).
  • Бул жерде - атайын сактоо модели, кысуу форматтары жана суроо протоколдору.

2) Маалыматтар модели жана контракт метриктер

2. 1 аталышы жана теги

metric_name: жалгыз фигура/зат ('http _ requests _ total', 'cpu _ usage _ seconds _ total').
labels: ачкыч атрибуттары ('job', 'instance', 'dc', 'pod', 'status', 'method').
Инварианттар: аты-жөнүнүн семантикасын өзгөртпөө, туура келбеген өзгөрүүлөрдө ('metric _ v2') версияларын кошуу.

2. 2 Катар түрлөрү

Gauge (Сүрөт), Counter (өсүү натыйжасы), Histogram/Summary (бөлүштүрүү/quantiles), Event/Span (соода чекиттери).
Финансы/тыгыздыктар үчүн - өлчөө бирдиктерин жана агрегаттуулугун белгилөө (жалпыланган/орточо алынган).

2. 3 Retenshn жана Rollap саясаты

ысык деталдаштыруу (секунд/1-10 мин) → жылуу агрегаттар (5m/1h) → муздак (1d/1w).
counter үчүн - rate/deriv агрегаттарды сактоо.

3) Жазуу жолу: кабыл алуу, буферизация, компакт

3. 1 Ингест-Пайплайн

Scrape (pull, Prometheus) же push (OTLP/StatsD/Graphite), көбүнчө gateway/agent аркылуу.
WAL (write-ahead log) буферизациялоо, андан кийин сегменттерге/блокторго (LSM-окшош архитектура) топтоо.
Batching жана убакыт сорттоо кысуу жана ылдамдыгын жогорулатуу.

3. 2 Out-of-order жана дубль иштетүү

уруксат терезе (мисалы, 5-15 мин) + саясат: 'drop | upsert | keep-last'.
'(series_id, timestamp)' чыгаруу же "акыркы жазуу утуп".

3. 3 кысуу

Delta-Delta убакыт белгилери үчүн, Gorilla/XOR үчүн float, RLE жана varint үчүн бүтүн, тегтер үчүн dictionary.
оптималдуу блок көлөмү ("Чанк") 1-8К чекиттер - IOPS жана CPU ортосундагы компромисс.

4) сактоо схемалар: TSDB vs SQL/мамычалар

4. 1 Адистештирилген TSDB

Prometheus (жергиликтүү, кыска retenshn, PromQL, remote_write).
VictoriaMetrics/M3/InfluxDB - горизонталдык масштабдоо, узак retenshn, remote read.
Блоктордун форматтары range scan + тендердик агрегациялар үчүн оптималдаштырылган.

4. 2 Реляциялык/колонка кыймылдаткычтары

TimescaleDB (PostgreSQL): hypertablitz, убакыт/мейкиндик, continuous aggregates.
ClickHouse: MergeTree/TTL/материалдык көрүнүшү, мыкты кысуу жана убакыт топтоо.
Тандоо - суроо экосистемасы (SQL vs PromQL), join/BI талаптары жана команданын иштөө көндүмдөрү боюнча.

5) Схема жана мисалдар

5. 1 TimescaleDB: гипертония + continuous aggregate

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: remote_write

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

6) кардиналдуулук: кантип "жардыруу" сактоо

6. 1 Эрежелер

label cardinality (уникалдуу маанилердин саны) чектөө. 'user _ id', 'request _ id', 'trace _ id' дегендерди киргизбеңиз.
нормалдаштыруу "көп маанилүү" теги (категориялар → коддору).
LowCardinality түрлөрүн колдонуу (CH), сөздүктөр/дарактар (TSDB).

6. 2 Контролдоо жана Алерт

Метрика: 'series _ count', 'label _ values {label}', top-N "кымбат" катар.
per tenant/job.

6. 3 Окуялар/гистограммалар

жогорку-cardinality жакшы агрегаттарды сактоо үчүн (histogram buckets) жана pre-rollup; quantiles агрегаттар боюнча онлайн эсептөө.

7) Retenshn, downsampling жана tiered-storage

7. 1 Саясат

Hot: 3-30 күн секунд/мүнөт деталдаштыруу.
Warm: 90-365 күн 5m/1h бирдиги.
Cold: күндүзгү агрегаттар жыл, объект сактоо боюнча архив (S3/Glacier) менен Parquet.

7. 2 Техника

Continuous aggregates (Timescale), материалдык көрүнүшү (CH), retention + rollub tasks (Victoria/M3/Influx).
Tiered storage: "ысык блоктор" жергиликтүү, "муздак" жергиликтүү кэш менен объект.

8) суроолор жана тилдер

8. 1 PromQL (мисал)

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

Биз API боюнча 5xx ката ылдамдыгын издеп жатабыз.

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 Аномалиялар (эскиз)

Z-score/ESD терезе статистикасы боюнча, STL-сезондук декомпозиция; натыйжаларды өзүнчө 'anomaly = 1/0' катарында сактоо.

9) Интеграция жана протоколдор

OTLP (OpenTelemetry): метриктер/соодагерлер/Логи, агент экспорттоочулар (hotel-collector) → TSDB/кликхаус/объект.
StatsD/Graphite: жөнөкөй эсептегичтер/таймерлер; edge боюнча прокси, андан ары - бирдиктүү форматка конверсия.
Kafka/NATS: ingest буфери, backfill үчүн replayer; консумерлер батчалар менен жазышат.

Мисал Kafka → ClickHouse (псевдо):
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary

10) Жеткиликтүүлүк, HA жана Киргизия

Replica/HA-жуп TSDB же Prometheus Киргизия (аймак → дүйнөлүк деңгээл).
Узак мөөнөттүү сактоо жана борборлоштурулган дашборддор үчүн Remote read/write.
Shard-by-label/time: бирдей бөлүштүрүү ingest, locality боюнча 'dc/tenant'.

11) сактоо өзү байкоо

11. 1 Метрика

Ingest: `samples/sec`, `append_latency`, `wal_fsync_ms`.
Хранение: `blocks_count`, `compaction_queue_len`, `chunk_compression_ratio`.
Запросы: `query_qps`, `scan_bytes`, `p95/p99_latency`, `alloc_bytes`.
кардиналдуулугу: 'series _ count', top-labels.

11. 2 SLO

"QPS ≤ 500 боюнча 1h ≤ 200ms диапазону үчүн p99 latency".
«Ingest-drop ≤ 0. 01% бурст X samples/сек".
«Compaction backlog < 10 min».

11. 3 Алерталар

Өсүү 'series _ count'> %/саат.
Компакция кезеги/flush> босого.
Доля out-of-order > N%, dedup/late-drops.

12) Коопсуздук жана көп тенанттуулук

Изоляция 'tenant' (ачкычтардагы белги, өзүнчө таблицалар/базалар, квоталар).
этикеткаларды санитария (PII тыюу), өлчөмдөрүн/баалуулуктарын контролдоо.
"Тынч" шифрлөө жана транспорт, "сезгич" метриктерге жетүү аудити.

13) Эксплуатациялык практикалар

Жылытуу жана муздак баштоо: pin "ысык" кэш блоктору, акыркы N саат prefetch.
Backfill: төмөн артыкчылыгы менен өзүнчө бөлүштүрүү, онлайн менен аралаштырып жок.
Схеманын версиясы: параллелдүү жазуу (dual-write) жана андан кийинки түрмөк менен көчүрүү.
Сактоо бюджети: контролдоо 'cost _ per _ TB _ month' + кардиналдык өсүш forecast.

14) Анти-үлгүлөрү

Жогорку кардиналдык теги (user_id, uuid) → катар жарылуу.
Ретеншнасыз "түбөлүк" катарлар → көзөмөлсүз өсүү.
Батчинг/сорттоо жок жазуу → начар кысуу жана IOPS бороон.
АЛТП жана узун сканерлерди бир дисктердин пулуна аралаштыруу.
Жок out-of-order → дубликат саясаты жана көбүртүп.
жүздөгөн бакет менен гистограммалар → баасы × 10 пайдасыз.

15) Киргизүү чек-тизмеси

  • Метрикаларды, алардын түрлөрүн жана бирдиктерин аныктоо; аты/лейблдер келишимин бекитиңиз.
  • кыймылдаткыч тандоо (TSDB vs SQL/колонка) жана суроо тили (PromQL/SQL).
  • Retenshn/Rollap (hot/warm/cold) жана ILM-таштарды долбоорлоо.
  • Installate ingest: WAL/батчи/сорттоо, терезелер-of-order.
  • кысуу (delta-delta/XOR/RLE), оптималдуу чанктар кирет.
  • Контролдоо кардиналдуулугу: квота, тобокелдик, баш тартуу саясаты.
  • ON/Киргизия жана remote-write/окуу.
  • Dashbord SLO жана сактоо метрика (ingest/query/storage).
  • Коопсуздук саясаты/Тенант-обочолонуу жана этикеткаларда PII жоктугу.
  • Үзгүлтүксүз "оюн күнү": арткы, түйүн жоготуу, ingest.

16) FAQ

Q: Эмне объектилерди мониторинг үчүн тандоо: Prometheus же ClickHouse/Timescale?
A: Native мониторинг жана PromQL үчүн - Prometheus + узак сактоо (Victoria/M3). BI/кампа жагдайлар жана SQL үчүн - Timescale/ClickHouse.

Q: оор summary жок quantiles сактоо үчүн кантип?
A: кылдат бакет менен histogram колдонуу жана суроо-талап боюнча квантилин эсептөө; же агрегаттарда t-digest/CKMS.

Q: out-of-order менен эмне кылуу керек?
A: кирүү терезени (5-15 мин) жана dedup аныктоо саясатын киргизүү; мобилдик телеметрия үчүн/edge - кененирээк терезе.

Q: Rollup керек качан?
A: Дайыма retenshne> 30-90 күн: агрегаттар 10-100 × өлчөмүн азайтуу жана талдоо тездетүү.

Q: Логи жана метрика аралаштырууга болобу?
A: өзүнчө сактоо (ар кандай форматтар/суроолор). Корреляция үчүн Exemplar/TraceID жана дашборддорду колдонуңуз, бирок баарын бир таблицага салбаңыз.

17) Натыйжалары

Эффективдүү убакыт катарларын сактоо - бул метрика келишими + тегдердин дисциплинасы, компетенттүү ingest (WAL/компакция), компрессия жана ретеншн/роллап саясаты. Кардиналдуулукту көзөмөлдөөнү кошуу, NA/Федерация жана жүз байкоо - жана сиз алдын ала p95, ай-жыл үчүн акылга сыярлык наркын жана жарылууга туруктуулугун аласыз.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.