GH GambleHub

Vaqtinchalik qatorlarni saqlash

1) Nega vaqtinchalik qatorlar uchun alohida arxitektura

Vaqt qatorlari (time series) - bu juftliklar ketma-ketligi (timestamp, value) va taglar (labels) bilan tavsiflanadi:
  • Yozuvlarning yuqori tezligi (ingest) va davriyligi.
  • Vaqt diapazoni boʻyicha oʻqishlar (scan + agregatlar/deraza funksiyalari).
  • Yorliqlar kombinatsiyasi tufayli portlovchi kardinallik.
  • Retenshn (saqlash muddati bo’yicha cheklovlar) va downsampling (vaqt bo’yicha siqilish) zarurati.
  • Shu yerdan - maxsus saqlash modeli, kompresssiya formatlari va so’rovnomalar protokollari.

2) Ma’lumotlar modeli va kontrakt metriklari

2. 1 Nomi va teglari

metric_name: feʼl/ot (’http _ requests _ total’,’cpu _ usage _ seconds _ total’).
labels: kalit-atributlar (’job’,’instance’,’dc’,’pod’,’status’,’method’).
Invariantlar: Nomning semantikasini oʻzgartirmaslik, mos kelmaydigan oʻzgarishlarda (’metric _ v2’) versiyasini qoʻshish.

2. 2 Qator turlari

Gauge (rasm), Counter (ortib boruvchi yakun), Histogram/Summary (taqsimot/kvantili), Event/Span (treys-nuqtalar).
Moliya/zichliklar uchun - o’lchov birliklari va agregatsiyalanuvchanlikni qayd qiling (jamlanadi/o’rtacha).

2. 3 Retenshn va rollaplar siyosati

Issiq detalizatsiya (soniya/1-10 min) → issiq agregatlar (5m/1h) → sovuq (1d/1w).
Counter uchun - rate/deriv agregatlarini saqlash.

3) Yozish yo’li: qabul qilish, buferlash, kompakt

3. 1 Ingest-paypline

Scrape (pull, Prometheus) yoki push (OTLP/StatsD/Graphite), koʻpincha gateway/agent orqali.
WAL (write-ahead log) da buferlash, so’ngra segmentlarga/bloklarga kompaksiya (LSM-ga o’xshash arxitektura).
Batching va vaqt boʻyicha saralash siqilish va tezlikni oshiradi.

3. 2 Out-of-order va dubllarni qayta ishlash

Ruxsat oynasi (lateness window, masalan, 5-15 min) +’drop | upsert | keep-last’siyosati.
’(series_id, timestamp)’ ning versiyaligi yoki «oxirgi yozuv g’alaba qozonadi».

3. 3 Siqish

Vaqt belgilari uchun Delta-of-delta, float uchun Gorilla/XOR, butun uchun RLE va varint, teglar uchun dictionary.
Blokning maqbul o’lchami («chanka») 1-8K nuqtalar - IOPS va CPU o’rtasidagi murosadir.

4) Saqlash sxemalari: TSDB vs SQL/kolonochniki

4. 1 Ixtisoslashtirilgan TSDB

Prometheus (lokal, qisqa retenshn, PromQL, remote_write).
VictoriaMetrics/M3/InfluxDB - gorizontal kattalashtirish, uzoq retenshn, remote read.
Bloklarning formatlari range scan + tending agregatsiyalari uchun optimallashtirildi.

4. 2 Relyasion/kolonochnыe dvigatelki

TimescaleDB (PostgreSQL): gipertablitslar, vaqt/boʻshliq boʻyicha chankalar, continuous aggregates.
ClickHouse: MergeTree/TTL/materiallashtirilgan tasavvurlar, ajoyib siqish va vaqt bo’yicha agregatsiyalar.
Tanlash - so’rovlar ekotizimi (SQL vs PromQL), join/BI talablari va jamoaning operatsion ko’nikmalari bo’yicha.

5) Sxema va misollar

5. 1 TimescaleDB: gipertablits + 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: saqlash

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) Kardinallik: qanday qilib omborxonani «portlatmaslik»

6. 1 Qoidalar

Label cardinality (noyob qiymatlar soni) ni cheklang. ’user _ id’,’request _ id’,’trace _ id’qoʻshilmaydi.
«Koʻp maʼnoli» teglarni (kategoriyalar → kodlar) normallashtiring.
LowCardinality turlaridan (CH), lugʻat/daraxtlardan (TSDB) foydalaning.

6. 2 Nazorat va alertlar

Metriklar:’series _ count’,’label _ values {label}’, top-N «qimmat» qatorlar.
per tenant/job.

6. 3 Hikoyalar/gistogrammalar

high-cardinality uchun agregatlar (histogram buckets) va pre-rolrupni saqlash yaxshiroqdir; kvantillarni agregatlarda onlayn hisoblash.

7) Retenshn, downsampling va tiered-storage

7. 1 Siyosat

Hot: 3-30 kunlik/daqiqalik tafsilotlar.
Warm: 90-365 kun 5m/1h agregatlar.
Cold: kunduzgi agregatlar yillari, Parquet bilan obyekt saqlovidagi arxiv (S3/Glacier).

7. 2 Texnika

Continuous aggregates (Timescale), materiallashtirilgan tushunchalar (CH), retention + rollub tasks (Victoria/M3/Influx).
Tiered storage: «issiq bloklar» lokal, «sovuq bloklar» lokal keshli obʼektda.

8) So’rovlar va tillar

8. 1 PromQL (misol)

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

API bilan 5xx xato tezligini qidirmoqdamiz.

8. 2 SQL-agregatlar

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 Anomaliyalar (eskiz)

deraza statistikasi bo’yicha Z-score/ESD, mavsumiylik STL-dekompozitsiyasi; natijalarni alohida’anomaly = 1/0’qatorida saqlash.

9) Integratsiya va bayonnomalar

OTLP (OpenTelemetry): metriklar/treyslar/loglar, eksport qiluvchi agentlar (otel-collector) → TSDB/klikxaus/obyekt.
StatsD/Graphite: oddiy hisoblagichlar/taymerlar; edge proksi, keyingi o’rinlarda yagona formatga konvertatsiya qilinadi.
Kafka/NATS: ingest portlashlari uchun bufer, bekfill uchun replayer; konsumerlar batch bilan yozadilar.

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

10) Foydalanish imkoniyati, HA va federatsiya

Replica/HA-juftliklar TSDB yoki Prometheus federatsiyasi (mintaqa darajasi → global).
Uzoq muddatli saqlash va markazlashtirilgan dashbordlar uchun Remote read/write.
Shard-by-label/time: ingest, locality’dc/tenant’bo’yicha bir tekis taqsimlanishi.

11) Omborning o’zi kuzatilishi

11. 1 Metrika

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`.
Kardinalligi:’series _ count’, top-labels.

11. 2 SLO

«QPS ≤ 500 da 1h ≤ 200 ms diapazoni uchun p99 latency».
«Ingest-drop ≤ 0. 01% da burst to X samples/sek".
«Compaction backlog < 10 min».

11. 3 Alertlar

’series _ count’> %/soat.
Kompaksiya/flush> chegarasi.
Доля out-of-order > N%, dedup/late-drops.

12) Xavfsizlik va ko’p tenantlik

Izolyatsiya bo’yicha’tenant’(kalitlardagi leybl, alohida jadvallar/bazalar, kvotalar).
Belgilarni sanitarlashtirish (PII taqiqlash), o’lchamlarini/qiymatlarini nazorat qilish.
«Tinch» va transportda shifrlash, «sezgir» metriklardan foydalanish auditi.

13) Ekspluatatsiya amaliyotlari

Isitish va sovuq boshlash: keshdagi «issiq» bloklarning pin, oxirgi N soat prefetch.
Backfill: Past ustuvorlikdagi alohida payplaynlarni onlayn bilan aralashtirmaslik.
Sxemani versionlash: parallel yozuv (dual-write) va keyingi svitch bilan migratsiya.
Saqlash budjeti: nazorat’cost _ per _ TB _ month’+ forecast o’sish kardinalligi.

14) Anti-patternlar

Yuqori kardinallikka ega teglar (user_id, uuid) → qator portlashi.
Retenshnasiz «abadiy» qatorlar → nazoratsiz o’sish.
Batching/saralashsiz yozish → yomon siqish va IOPS bo’roni.
OLTP va uzun skanerlarni bitta disk hovuzida aralashtirish.
Out-of-order siyosatining yo’qligi → dublikatlar va shishirish.
Gistogrammalar yuzlab baketalar bilan → qiymati × 10 foydasiz.

15) Joriy etish chek-varaqasi

  • Metriklarni, ularning turlari va birliklarini aniqlang; nomlar/yorliqlar shartnomasini tuzing.
  • Dvigatel (TSDB vs SQL/ustuncha) va soʻrov tilini (PromQL/SQL) tanlang.
  • Retenshn/rollap (hot/warm/cold) va ILM tasmalarini loyihalashtiring.
  • Ingest: WAL/batchi/saralash, out-of-order oynalarini moslash.
  • Siqishni yoqing (delta-of-delta/XOR/RLE), optimal changlar.
  • Kardinallikni nazorat qiling: kvotalar, alertlar, rad etish siyosati.
  • NA/federatsiya va remote-write/ni sozlang.
  • SLO dashbordlari va saqlash metrikasi (ingest/query/storage).
  • Xavfsizlik/tenant-izolyatsiya siyosati va yorliqlarda PII yo’qligi.
  • Muntazam «game day»: backfill, tugun yoʻqolishi, ingest koʻtarilishi.

16) FAQ

Q: Infratuzilmani kuzatish uchun nimani tanlash kerak: Prometheus yoki ClickHouse/Timescale?
A: Milliy monitoring va PromQL uchun - Prometheus + uzoq storage (Victoria/M3). BI/ombor stsenariylari va SQL uchun - Timescale/ClickHouse.

Q: Kvantillarni og’ir summarisiz qanday saqlash kerak?
A: histogrammadan toza baketalar bilan foydalaning va so’ralganda kvantillarni hisoblab chiqing; yoki agregatlarda t-digest/CKMS.

Q: out-of-order bilan nima qilish kerak?
A: Kirish oynasini (5-15 daqiqa) va determinatsiyalangan dedup siyosatini kiriting; mobil/edge telemetriya uchun - kengroq oyna.

Q: Rollup qachon kerak?
A: Har doim retenshn bilan> 30-90 kun: agregatlar 10-100 × hajmini kamaytiradi va tahlilni tezlashtiradi.

Q: Loglar va metriklarni aralashtirish mumkinmi?
A: Alohida saqlang (turli formatlar/so’rovlar). Korrelyatsiya uchun Exemplar/TraceID va dashbordlardan foydalaning, lekin hamma narsani bitta jadvalga qoʻshmang.

17) Yakunlar

Vaqtinchalik qatorlarning samarali ombori - bu metrik kontrakt + teglar intizomi, malakali ingest (WAL/kompaksiya), siqish va retenshna/rollaplar siyosati. Kardinallik nazorati, NA/federatsiya va storning o’zi kuzatilishini qo’shing - va siz oldindan aytib bo’ladigan p95, oylar-yillar uchun oqilona qiymat va ko’tarilishlarga chidamlilik olasiz.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.