GH GambleHub

Prometheus 'հավաքելով մետրը

(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)

Live ռեզյումե

Prometheus-ը ժամանակային մետրի արդյունաբերական բաղադրիչ է, այն պտտվում է HTTP-ով, պահպանում է TSDB-ի շարքը, կարծում է, որ PromQL-ում ագրեգատները և Alertmanager-ի միջոցով ալտերտերը։ IGaming-ի համար սա SLO մոտեցման հիմքն է (RED/USE, վճարումների բիզնես մետրերը), p95/p99 արագ ախտորոշումը և ավտոմատ լուծումները (freeze/rollback)։

1) Տվյալների և կարդինալության մոդել

Մետրիկա ՝ «name + label1 =» v1 «, label2 =» v2 «+ value @ timestamp»։

Կարդինալությունը = պիտակների բոլոր յուրահատուկ հավաքածուների կարողությունների արտադրություն; արժեքի հիմնական գործոնը։

Պիտակների պրակտիկան

базовые: `service`, `env`, `region`, `instance`, `pod`, `container`, `version`;

հիբրիդային '«room», «pox», «tenault» (զգուշորեն), «game _ provider»։

Դուք չեք կարող կլանել «user _ id», «session _ id», պատահական/բարձր cardinal արժեքներ։

2) Մեթրիկի տեսակները

Counter-ը միայն աճում է (օրինակ ՝ «htttp _ reques.ru _ total»)։

Gauge-ը ակնթարթային արժեքներ են (օրինակ ՝ «queue _ depth»)։

Histogram/Summary-ը լատենտության բաշխումն է։ Վաճառքում 'Histogram («histogram _ quantile ()» և exemplars)։

Native Histograms-ը ռուսական բաքեր է, բարձրացնում են ճշգրտությունը և խնայում չափսը (միացրեք այնտեղ, որտեղ հասանելի է)։

Օրինակ (Go)

go var httpLatency = prometheus. NewHistogramVec(
prometheus. HistogramOpts{
Name:  "http_request_duration_seconds",
Help:  "HTTP latency",
Buckets: prometheus. DefBuckets ,//or custom
},
[]string{"route","method"},
)

3) բաժնետերԵրը և ինչ չափել

Ծառայություններ: Ձեր կոդը (MSK համար Go/Java/Node/Python), RED-մետրիխներ API, բիզնես մետրիկներ (վճարման փոխարկումներ)։

Մոսկվա: node _ exporter, cAdvisor/kubelet։

Մյուսները ՝ BD/kashi (mysqld _ exporter, postgres _ exporter, redis _ exporter), NGINX/HAProxy, Kafka/RabbitMQ։

OTel-metriks: OpenTelemetry Collector-ի միջոցով Prometheus Remote Write-ը կամ Prometheus-receiver-ը տեղադրվում են ընդհանուր հոսքի մեջ։

4) Scrape և relabel 'ինչպես միացնել targets

Հիմնական 'prometheus. yml`

yaml global:
scrape_interval: 15s evaluation_interval: 15s external_labels:
env: "prod"
region: "eu-west"

scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['10. 0. 1. 10:9100','10. 0. 1. 11:9100']

- job_name: 'payments-api'
metrics_path: /metrics scheme: https tls_config:
ca_file: /etc/ssl/ca. crt cert_file: /etc/ssl/tls. crt key_file: /etc/ssl/tls. key relabel_configs:
- source_labels: [__address__]
regex: '(.):\d+'
target_label: instance replacement: '$1'

Kubernetes через Prometheus Operator

Օգտագործեք Monitor/PodMonitor-ը ձեռքով «scrape _ digs» -ի փոխարեն։

yaml apiVersion: monitoring. coreos. com/v1 kind: ServiceMonitor metadata: { name: payments-api }
spec:
selector: { matchLabels: { app: payments-api } }
namespaceSelector: { matchNames: [ "prod" ] }
endpoints:
- port: metrics interval: 15s scheme: http relabelings:
- action: replace targetLabel: service replacement: "payments-api"

K8s (առանց Oper.ru, պարզեցված)

yaml metadata:
annotations:
prometheus. io/scrape: "true"
prometheus. io/port: "9102"
prometheus. io/path: "/metrics"

5) Պահեստավորում ՝ TSDB, WAL և rentenshn

WAL-ը (Write-Ahead Log) արագ վերականգնում է վերականգնումից հետո։

Compaction: բլոկների սեղմում, սկավառակի խնայողություն/CPU։

Retenshn 'պահեք 7-30 օրվա տաք տվյալները։ Երկարաժամկետ 'դիմեք (տե՛ ս «Մեծացումը»)։

Թյունինգը

`--storage. tsdb. retention. time=15d`

`--storage. tsdb. max-block-chunk-segment-size`

Սկավառակը 'արագ SSD/NVMe; խուսափել ցանցային հատորներից առանց կարիքների։

6) PromQL 'հիմքեր և հաճախակի արտոնագրեր

Rate/irate

promql rate(http_requests_total{route="/deposit"}[5m])

Սխալները և հաջողության մասնաբաժինը

promql sum(rate(http_requests_total{status=~"2..    3.."}[5m]))
/ sum(rate(http_requests_total[5m]))

p95 լատենտ

promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)

Հերթեր/հագեցվածություն

promql max(queue_depth{queue="withdrawals"}) by (region)

7) Recording rules-ը և արտադրողականությունը

Համարեք լուրջ արտահայտություններ նախօրոք և պահեք որպես շարք։

yaml groups:
- name: api. rules interval: 30s rules:
- record: job:http:request_duration_seconds:p95 expr:
histogram_quantile(0. 95,
sum by (le, job) (rate(http_request_duration_seconds_bucket[5m])))
- record: job:http:success_ratio expr:
sum(rate(http_requests_total{status=~"2..    3.."}[5m]))
/ sum(rate(http_requests_total[5m]))

Գումարած 'արագ դաշնամուրներ, ավելի քիչ CPU Prometheus-ում։

8) Alerting и SLO (burn rate)

Burn-rate alerta (multi-71, multi-burn)

yaml groups:
- name: slo. payments rules:
- alert: PaymentsSLOFastBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 14 for: 5m labels: { severity: "page" }
annotations:
summary: "SLO fast burn"
runbook: "https://runbooks/payments/slo"
- alert: PaymentsSLOSlowBurn expr: (1 - job:http:success_ratio{job="payments-api"}) > (1 - 0. 999) 6 for: 1h labels: { severity: "ticket" }

Alertmanager: Ծառայությունների/տարածաշրջանների միկրոակտիվացում, կրկնօրինակների ճնշում, ChatOps։

9) Հարաբերակցություն ուղիների և լոգարանների հետ

Միացրեք exemplars: կլիկաբելային «trace _ id» -ը հիստոգրամների բակտերիաներում։

Տեղադրեք պիտակները «ww.d.», «version», «region» համար «rele.ru compare» -ի համար։

Դաշբորդների վրա ածխաջրածինների (Git SHA/տարբերակը)։

10) Լայնացում և երկարաժամկետ պահեստ

Ֆեդեգրաֆիա 'վերևի Prometheus-ը համախմբում է ներքևի (job/label ֆիլտրերից)։

Remote Write: շարքերի ուղարկումը երկար պահեստավորման/կլաստերների (Thanos/Wintex/Mimir)։

Պլյուսներ ՝ անվերջ ռետենշն, հորիզոնական մեծացումը, global-ը։

Մինուսները 'ավելի բարդ է վիրահատությունը, արժեքը։

Շարդինգը ֆունկցիաներով 'առանձին ինստանսներ ռուսական մետրի, բիզնեսի, ապահով համար։

11) Անվտանգություն

TMS/mTSA-ի միջև Prometheus-ի/Alertmanager/remote _ write-ի միջև։

Express/tocen-վավերացում/targets և API-ի համար (նավարկող դարպասի առջև)։

RBAC 'Սահմանափակեք UI/սերիաների հասանելիությունը դերերով։ թաքցրեք մասնավոր պիտակները։

PII-հիգիենան 'մի գրեք PII մետրերում։ օգտագործեք հեշեր/կեղծանուններ։

12) Kubernetes-ի պրակտիկան

Prometheus Operator: CRD (ServiceMonitor, PodMonitor, Alertmanager, Prometheus).

kube-state-metr.ru + cAdvisor-ը նկարում է ամբողջական պատկեր։

Թեյնինգները և ռեսուրսները 'ընտրված նոդները մոնիտորինգի համար։ CPU/RAM-ի սահմանները։

Աղմուկի նվազումը 'լեյբլ-սելեկտորները նյարդային ցանցերի համար, scrape _ interval, որտեղ դուք կարող եք։

13) Բիզնես մետրերը և ապրանքը

Платежи: `payments_success_total{psp, currency}`, `payment_conversion_ratio`, `ttw_seconds_histogram`.

Խաղային ակտիվություն 'տոկոսադրույքներ/րոպե, նստաշրջաններ պահելը որպես gauge, doft-փլեյ սխալների ժամանակ։

Ռիսկ/ֆրոդ 'արագության/գեոյի անոմալիաներ։ տրամաբանությունը առանձին է, մետրերը ագրեգատներ են։

14) Արժեքը և արտադրողականությունը (FinOps)

Վերահսկեք կարդինալությունը (teg-reve մինչև նոր պիտակի ավելացումը)։

Sampling histogram/հազվագյուտ Express www.scrape _ interval '2019-ի համար ոչ կրիտիկական թարգետների համար։

Downsampling-ը երկար պահպանման բեքենդերում։

Dashbords-ի քեշինգը և լայն աջակցությունը recording rules-ում։

15) Արագ մեկնարկի օրինակները

Aleksander RED-ում (Python)

python from prometheus_client import Counter, Histogram, start_http_server reqs = Counter('http_requests_total','', ['route','method','status'])
lat = Histogram('http_request_duration_seconds','', ['route','method'])
start_http_server(8000)

def handle(req):
with lat. labels(req. route, req. method). time():
status = app(req)
reqs. labels(req. route, req. method, str(status)). inc()
return status

Շեմի ալերտները p95

promql alert: HighLatencyP95 expr: histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))) > 0. 25 for: 10m labels: { severity: "page", service: "api" }

16)

1. Նշված է հիմնական մետր (RED/USE) և հիբրիդային ցուցանիշների մի շարք։

2. Ներդաշնակ եղեք պիտակներին և կարդինալությանը։

3. Scrape/You Monitor, TSA/mTSA, relabel։

4. Միացրեք հիստոգրամները հիմնական ճանապարհների և exemplars-ի համար։

5. Ստեղծեք recording rules p95, success ratio, բիզնես ագրեգատների համար։

6. Մուտքագրեք SLO-ալերտները (burn rate) և Alertmanager-ի ռուտինգը։

7. Բարձրացրեք dashbords: wwww.map, rele.ru compare, վճարումներ։

8. Որոշեք ֆեդեգրաֆիայի/remote _ write և retenshn մասին։

9. Սահմանափակեք հասանելիությունը (RBAC), որը համապատասխանում է PII-ի բացակայությանը։

10. Միացրեք runbooks և game-day ստուգումները։

17) Anti-patterna

Պիտակները բարձր կարդինալությամբ (user/session/request _ id)։

Summary փոխարեն Histogram-ի փոխարեն հիմնական SLO-ի համար չկա «histogram _ quantile»։

Scrape-ը «պարզապես անընդմեջ» առանց ֆիլտրման/ռոտացիայի բացատրում է ծախսերի և աղմուկի աճը։

Ալերտները հում մետրիներով առանց SLO www.alert-feitg-ի։

Recording rules-ի բացակայությունը բացատրում է «ծանր» dashbords։

Առանց TFC/mTRK-ի վստահությունը բացատրում է փոխարինման/արտահոսքի ռիսկը։

Արդյունքները

Prometheus-ը տալիս է iGaming-պլատֆորմը, որը կապված է նպատակների հետ 'ճշգրիտ գիստոգրամներ, կայուն ագրեգատներ, հստակ SLO-alerts և մեծացնել շատ-ռեգիոնային քարտեզներ։ Պիտակների կարգապահությունը, ճիշտ recording rules-ը, ուղիների/լոգարանների հետ կապերը և մտածված պահեստավորման ճարտարապետությունը ապահովում են արագ ալգորիթմներ և կանխատեսելի p99 նույնիսկ գագաթնակետին պահերին։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։