Wagtlaýyn hatarlary saklamak
1) Näme üçin wagtlaýyn hatarlar üçin aýratyn arhitektura?
Wagt hatarlary (time series) - jübütleriň (timestamp, value) bellikli yzygiderliligi (labels), olar:- Ýazgylaryň ýokary tizligi (ingest) we ýygylygy.
- Wagt zolaklaryna görä okalýar (scan + agregatlar/penjire funksiýalary).
- Taglaryň utgaşmasy sebäpli partlaýjy kardinallyk.
- Retenşn (saklanyş möhletiniň çäkleri) we downsampling (wagt gysylmagy) zerurlygy.
- Şonuň üçin - ýörite saklamak modeli, gysyş formatlary we haýyşnamalaryň teswirnamalary.
2) Maglumatlaryň nusgasy we metrikleriň şertnamasy
2. 1 At we bellikler
metric_name: fil/at ýeke-täk ('http _ requests _ total', 'cpu _ usage _ seconds _ total').
labels: açar atributlary ('job', 'instance', 'dc', 'pod', 'status', 'method').
Invariantlar: adyň semantikasyny üýtgetmäň, gabat gelmeýän üýtgeşmeler ýüze çykan halatynda ('metric _ v2') wersiýalaryny goşuň.
2. 2 Hatar görnüşleri
Gauge (surat), Counter (jemi), Histogram/Summary (paýlanmalar/kwantiller), Event/Span (söwda nokatlary).
Maliýe/dykyzlyk üçin - ölçeg birliklerini we jemlenişini ýazga alyň (jemlenýär/ortaça).
2. 3 Retenşn we rollap syýasaty
Gyzgyn jikme-jiklik (sekunt/1-10 minut) → ýyly agregatlar (5m/1h) → sowuk (1d/1w).
Counter üçin - rate/deriv agregatlaryny saklamak.
3) Ýazuw ýoly: kabul etmek, buferlemek, kompakt
3. 1 Ingest-paypline
Scrape (pull, Prometheus) ýa-da push (OTLP/StatsD/Graphite), köplenç gateway/agent arkaly.
WAL-da bufer (write-ahead log), soňra segmentlere/bloklara kompaksiýa (LSM-meňzeş binagärlik).
Batching we wagt sortlamak gysyşy we tizligi ýokarlandyrýar.
3. 2 Out-of-order we dubllary gaýtadan işlemek
Rugsat penjiresi (lateness window, mysal üçin 5-15 min) + syýasat: 'drop | upsert | keep-last'.
"(series_id, timestamp)" wersiýasy bilen ýa-da "soňky ýazgy ýeňýär".
3. 3 Gysyş
Wagt bellikleri üçin Delta-of-delta, float üçin Gorilla/XOR, tutuşlygyna RLE we varint, bellikler üçin dictionary.
Blokyň iň amatly ululygy ("çanka") 1-8K nokatlar - IOPS bilen CPU arasynda ylalaşyk.
4) Saklamak shemalary: TSDB vs SQL/sütünler
4. 1 Ýöriteleşdirilen TSDB
Prometheus (lokal, gysga retenşn, PromQL, remote_write).
VictoriaMetrics/M3/InfluxDB - gorizontal masştab, uzyn retenşn, remote read.
Bloklaryň formatlary range scan + tending agregasiýalary üçin optimizirlenendir.
4. 2 Relýasiýa/sütün hereketlendirijileri
TimescaleDB (PostgreSQL): gipertablisler, wagt/giňişlik boýunça çankalar, continuous aggregates.
ClickHouse: MergeTree/TTL/materiallaşdyrylan pikirler, ajaýyp gysyş we wagt agregasiýalary.
Saýlamak - soraglaryň ekosistemasy (SQL vs PromQL), join/BI talaplary we toparyň iş ukyplary boýunça.
5) Shema we mysallar
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: saklamagy jemleýän
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) Kardinallyk: ammary nädip "partlatmaly" däl
6. 1 Düzgünler
Label cardinality belgisini çäklendiriň. 'user _ id', 'request _ id', 'trace _ id' -leri goşmaň.
"Köp sanly" bellikleri kadalaşdyryň (kategoriýalar → kodlar).
LowCardinality görnüşlerini (CH), sözlükleri/bellik agaçlaryny (TSDB) ulanyň.
6. 2 Gözegçilik we alertler
Metrikler: 'series _ count', 'label _ values {label}', "gymmat" hatlaryň top-N.
Kardinallyk çäginden ýokary bolan ýagdaýynda ýazmakdan ýüz öwürmek syýasaty per tenant/job.
6. 3 Hekaýalar/gistogrammalar
high-cardinality üçin agregatlary (histogram buckets) we pre-rollup saklamak has gowudyr; kwantilleri agregatlarda onlaýn hasaplamak.
7) Retenşn, downsampling we tiered-storage
7. 1 Syýasatlar
Hot: 3-30 gün sekuntda/minutda jikme-jiklik.
Warm: 90-365 gün 5m/1h agregatlar.
Cold: gündiz agregatlarynyň ýyllary, Parquet bilen obýektiň ammaryndaky (S3/Glacier) arhiw.
7. 2 Tehnikalar
Continuous aggregates (Timescale), materiallaşdyrylan pikirler (CH), retention + rollub tasks (Victoria/M3/Influx).
Tiered storage: "gyzgyn bloklar" lokal, "sowuk" lokal keshli obýektde.
8) Haýyşlar we diller
8. 1 PromQL (mysal)
promql rate(http_requests_total{job="api",status=~"5.."}[5m])
API boýunça 5xx ýalňyşlyk tizligini gözleýäris.
8. 2 Penjireler boýunça 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 Anomaliýalar (eskiz)
Z-score/ESD penjire statistikasy, STL-möwsümliligiň dekompozisiýasy; netijeleri aýratyn hatarda saklamak 'anomaly = 1/0'.
9) Integrasiýa we teswirnamalar
OTLP (OpenTelemetry): metrikler/treyslar/loglar, agentlerde eksportçylar (otel-collector) → TSDB/klikhaus/obýekt.
StatsD/Graphite: ýönekeý hasaplaýjylar/taýmerler; edge proxy, mundan beýläk - ýeke formata öwrülişik.
Kafka/NATS: ingest partlamalary üçin bufer, arka fil üçin replayer; konsumerler batçam bilen ýazýarlar.
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary
10) Elýeterlilik, HA we federasiýa
Replica/HA-jübütleri TSDB ýa-da Prometheus federasiýasy (sebit derejesi → global).
Uzak möhletli saklamak we merkezleşdirilen daşbordlar üçin Remote read/write.
Şard-by-label/time: ingest, locality po 'dc/tenant'.
11) Ammaryň özünde syn edilişi
11. 1 Metrikler
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`.
Kardinallyk: 'series _ count', top-labels.
11. 2 SLO
"QPS ≤ 500-de 1h ≤ 200 ms diapazony üçin p99 latency".
«Ingest-drop ≤ 0. 01% burst - X samples/sek".
«Compaction backlog < 10 min».
11. 3 Alertler
Ösüş 'series _ count'> %/sagatda.
Kompaksiýa nobaty/flush> bosagasy.
Доля out-of-order > N%, dedup/late-drops.
12) Howpsuzlyk we köp tenantlyk
"Tenant" boýunça izolýasiýa (açardaky bellik, aýry-aýry tablisalar/bazalar, kwotalar).
Bellikleri arassalamak (PII gadaganlygy), ölçeglere/gymmatlyklara gözegçilik etmek.
"Rahat" we ulagda şifrlemek, "duýgur" metriklere elýeterliligiň barlagy.
13) Ekspluatasiýa tejribesi
Gyzdyrmak we sowuk başlamak: "gyzgyn" bloklaryň pini, soňky N sagat prefetch.
Backfill: Pes ileri tutulýan aýry-aýry paýlaýjylar, onlaýn bilen garyşdyrylmaýar.
Shemanyň wersiýasy: paralel ýazgy (dual-write) we soňraky switch bilen göçmek.
Saklamak býudjeti: gözegçilik 'cost _ per _ TB _ month' + forecast kardinallygyň ösüşi.
14) Anti-patternler
Ýokary kardinally bellikler (user_id, uuid) → hatar partlamasy.
Retenşna → gözegçiliksiz ösüş bolmazdan "baky" hatarlar.
Batching/sortlamasyz ýazgy → erbet gysyş we IOPS tupany.
OLTP we uzyn skanerleri bir diskli howuzda garyşdyrmak.
Out-of-order syýasatynyň ýoklugy → dublikatlar we çişirmek.
Ýüzlerçe baketli gistogrammalar → bahasy × 10 peýdasyz.
15) Girizmegiň çek-sanawy
- Metrikleri, olaryň görnüşlerini we birliklerini kesgitläň; at/bellik şertnamasyny belläň.
- Hereketlendirijini (TSDB vs SQL/sütün) we haýyş dilini (PromQL/SQL) saýlaň.
- Retrenşn/rollap (hot/warm/cold) we ILM daşlaryny düzüň.
- Ingest: WAL/batch/sortlamak, out-of-order penjirelerini sazlaň.
- Gysyşy açyň (delta-of-delta/XOR/RLE), iň amatly çeňňekler.
- Kardinallyga gözegçilik ediň: kwotalar, alertler, ret etmek syýasaty.
- NA/federasiýa we remote-write/okaň.
- SLO dashbordlary we ammar metrikleri (ingest/query/storage).
- Howpsuzlyk syýasaty/tenant izolýasiýasy we belliklerde PII ýoklugy.
- Yzygiderli "game day": arka fil, düwün ýitmegi, ingest.
16) FAQ
Q: infrastruktura gözegçilik etmek üçin näme saýlamaly: Prometheus ýa-da ClickHouse/Timescale?
A: Milli gözegçilik we PromQL üçin - Prometheus + uzyn storage (Victoria/M3). BI/ammar ssenarileri we SQL üçin - Timescale/ClickHouse.
Q: Kwantilleri agyr summary bolmazdan nädip saklamaly?
A: Arassa baketler bilen histogramma ulanyň we soralanda kwantilleri hasaplaň; ýa-da agregatlarda t-digest/CKMS.
Q: out-of-order bilen näme etmeli?
A: Kabul ediş penjiresini (5-15 minut) we kesgitlenen dedup syýasatyny giriziň; / edge mobil telemetriýa üçin - has giň penjire.
Q: Rollup haçan gerek?
A: Elmydama 30-90 günüň dowamynda: agregatlar 10-100 × azaldýar we analitikany çaltlaşdyrýar.
Q: Logleri we metrikleri garyşdyryp bolarmy?
A: Aýratyn saklaň (dürli formatlar/soraglar). Habarlaşmak üçin Exemplar/TraceID we dashbordlary ulanyň, ýöne hemme zady bir tablisada jemlemäň.
17) Netijeler
Wagtlaýyn hatarlary netijeli saklamak - metrik şertnama + bellikleriň düzgüni, sowatly ingest (WAL/kompaksiýa), gysyş we retenşna/rollaplaryň syýasaty. Kardinallyga, NA/federasiýa gözegçiligini we agyz beklemegiň syn edilişini goşuň - we çaklap boljak p95, aýlar-ýyllar üçin ýerlikli çykdajy we ýokarlanmalara garşylyk alarsyňyz.