
Tha an stòr-dĂ ta sreath Ăšine (TSDB) ann am Prometheus 2 na dheagh eisimpleir de fhuasgladh innleadaireachd a tha aâ tabhann leasachaidhean mòra thairis air stòradh v2 ann am Prometheus 1 a thaobh astar cruinneachadh dĂ ta, coileanadh ceist, agus èifeachdas ghoireasan. Bha sinn aâ cur an gnĂŹomh Prometheus 2 ann an SgrĂšdadh is Riaghladh Percona (PMM) agus bha cothrom agam coileanadh Prometheus 2 TSDB a thuigsinn. San artaigil seo bruidhnidh mi mu thoraidhean nan beachdan sin.
Prometheus eallach obrach cuibheasach
Dhaibhsan a tha cleachdte ri bhith aâ dèiligeadh ri stòran-dĂ ta adhbhar coitcheann, tha eallach obrach Ă bhaisteach Prometheus gu math inntinneach. Tha an ĂŹre de chruinneachadh dĂ ta buailteach a bhith seasmhach: mar as trice bidh na seirbheisean air am bi thu aâ cumail sĂšil aâ cur timcheall air an aon Ă ireamh de mheatairean, agus bidh am bun-structar ag atharrachadh gu ĂŹre mhath slaodach.
Faodaidh iarrtasan airson fiosrachadh tighinn bho dhiofar stòran. Bidh cuid dhiubh, leithid rabhaidhean, cuideachd a 'strĂŹ airson luach seasmhach agus ro-innseach. Faodaidh cuid eile, leithid iarrtasan luchd-cleachdaidh, spreadhaidhean adhbhrachadh, ged nach eil seo fĂŹor airson aâ mhòr-chuid de eallach obrach.
Luchdaich a-nuas deuchainn
Rè an deuchainn, chuir mi fòcas air a 'chomas air dĂ ta a chruinneachadh. Chuir mi Prometheus 2.3.2 ri chèile le Go 1.10.1 (mar phĂ irt de PMM 1.14) air seirbheis Linode aâ cleachdadh an sgriobt seo: . Airson an ginealach luchdan as reusanta, a 'cleachdadh seo Chuir mi air bhog grunn nodan MySQL le fĂŹor luchd (Deuchainn Sysbench TPC-C), agus rinn gach fear dhiubh atharrais air 10 nodan Linux/MySQL.
Chaidh a h-uile deuchainn a leanas a dhèanamh air frithealaiche Linode le ochd coraichean brĂŹgheil agus 32 GB de chuimhne, a âruith atharrais luchdan 20 aâ cumail sĂšil air dĂ cheud cĂšis MySQL. No, a thaobh Prometheus, 800 targaid, 440 sgrĂŹoban san diog, 380 mĂŹle clĂ r gach diog, agus 1,7 millean sreath Ăšine gnĂŹomhach.
dealbhadh
Is e an dòigh Ă bhaisteach airson stòran-dĂ ta traidiseanta, aâ gabhail a-steach an tè a chleachd Prometheus 1.x, a bhith . Mura h-eil e gu leòr airson an luchd a lĂ imhseachadh, gheibh thu eòlas air amannan fada agus fĂ illidh cuid de dhâ iarrtasan. Tha cleachdadh cuimhne ann am Prometheus 2 comasach a rèiteachadh tro iuchair storage.tsdb.min-block-duration, a bhios aâ dearbhadh dè cho fada âs a thèid clĂ raidhean a chumail mar chuimhneachan mus tèid iad air adhart gu diosc (is e 2 uair an Ă bhaist). Bidh an ĂŹre de chuimhne a tha a dhĂŹth an urra ris an Ă ireamh de shreath Ăšine, bileagan, agus sgrĂŹoban a chaidh a chur ris an t-sruth a tha aâ tighinn a-steach. A thaobh Ă ite diosc, tha Prometheus ag amas air 3 bytes a chleachdadh gach clĂ r (sampall). Air an lĂ imh eile, tha riatanasan cuimhne mòran nas Ă irde.
Ged a tha e comasach meud a âbhloc a rèiteachadh, chan eilear aâ moladh a rèiteachadh le lĂ imh, agus mar sin feumaidh tu na h-uimhir de chuimhne a thoirt dha Prometheus agus a dh âfheumas e airson an eallach obrach agad.
Mura h-eil cuimhne gu leòr ann airson taic a thoirt don t-sruth meatrach a tha aâ tighinn a-steach, tuitidh Prometheus a-mach Ă s a chuimhne no gheibh am marbhadh OOM thuige.
Chan eil e gu mòr aâ cuideachadh le suaip gus dĂ il a chuir air an tubaist nuair a ruitheas Prometheus a-mach Ă cuimhne, leis gu bheil cleachdadh na gnĂŹomh seo ag adhbhrachadh caitheamh cuimhne spreadhaidh. Tha mi aâ smaoineachadh gu bheil e rudeigin co-cheangailte ri Go, an neach-cruinneachaidh sgudail aige agus an dòigh anns a bheil e aâ dèiligeadh ri suaip.
Is e dòigh inntinneach eile a bhith aâ rèiteachadh aâ bhloc-cinn airson a bhith air a shruthladh gu diosc aig Ă m sònraichte, an Ă ite a bhith ga chunntadh bho thoiseach aâ phròiseis.

Mar a chĂŹ thu bhon ghraf, bidh sruthan gu diosc aâ tachairt a h-uile dĂ uair a thĂŹde. Ma dhâ atharraicheas tu am paramadair fad-bloc gu uair a thĂŹde, bidh na h-ath-shuidheachadh sin aâ tachairt gach uair, aâ tòiseachadh Ă s deidh leth uair a thĂŹde.
Ma tha thu airson seo agus grafaichean eile a chleachdadh san stĂ ladh Prometheus agad, faodaidh tu seo a chleachdadh . Chaidh a dhealbhadh airson PMM ach, le mion-atharrachaidhean, bidh e aâ freagairt air stĂ ladh Prometheus sam bith.
Tha bloc gnĂŹomhach againn ris an canar bloc ceann a tha air a stòradh mar chuimhne; tha blocaichean le dĂ ta nas sine rim faighinn tro mmap(). Tha seo aâ cur Ă s don fheum air an tasgadan a rèiteachadh air leth, ach tha e cuideachd aâ ciallachadh gum feum thu Ă ite gu leòr fhĂ gail airson tasgadan an t-siostaim obrachaidh ma tha thu airson ceasnachadh a dhèanamh air dĂ ta nas sine na na ghabhas aâ bhloc-cinn.
Tha seo cuideachd aâ ciallachadh gum bi caitheamh cuimhne brĂŹgheil Prometheus aâ coimhead gu math Ă rd, rud nach eil na adhbhar dragh.

Is e puing dealbhaidh inntinneach eile cleachdadh WAL (sgrĂŹobh log ro-lĂ imh). Mar a chĂŹ thu bho na sgrĂŹobhainnean stòraidh, bidh Prometheus aâ cleachdadh WAL gus tubaistean a sheachnadh. Gu mĂŹ-fhortanach, chan eil dòighean sònraichte airson a bhith cinnteach gum mair an dĂ ta air a dheagh chlĂ radh. Bidh dreach Prometheus 2.3.2 aâ sruthadh WAL gu diosc a h-uile 10 diog agus chan eil an roghainn seo comasach a rèiteachadh.
Compactions
Tha Prometheus TSDB air a dhealbhadh mar stòr LSM (Log Structured Merge): tha am bloc ceann air a chuir a-steach bho Ă m gu Ă m gu diosc, fhad âs a bhios inneal teannachaidh aâ cothlamadh grunn bhlocaichean còmhla gus nach tèid cus bhlocaichean a sganadh rè cheistean. An seo chĂŹ thu an Ă ireamh de bhlocaichean a chunnaic mi air an t-siostam deuchainn Ă s deidh latha luchd.

Ma tha thu airson barrachd ionnsachadh mun stòr, faodaidh tu sgrÚdadh a dhèanamh air faidhle meta.json, aig a bheil fiosrachadh mu na blocaichean a tha rim faighinn agus mar a thà inig iad gu bhith.
{
"ulid": "01CPZDPD1D9R019JS87TPV5MPE",
"minTime": 1536472800000,
"maxTime": 1536494400000,
"stats": {
"numSamples": 8292128378,
"numSeries": 1673622,
"numChunks": 69528220
},
"compaction": {
"level": 2,
"sources": [
"01CPYRY9MS465Y5ETM3SXFBV7X",
"01CPYZT0WRJ1JB1P0DP80VY5KJ",
"01CPZ6NR4Q3PDP3E57HEH760XS"
],
"parents": [
{
"ulid": "01CPYRY9MS465Y5ETM3SXFBV7X",
"minTime": 1536472800000,
"maxTime": 1536480000000
},
{
"ulid": "01CPYZT0WRJ1JB1P0DP80VY5KJ",
"minTime": 1536480000000,
"maxTime": 1536487200000
},
{
"ulid": "01CPZ6NR4Q3PDP3E57HEH760XS",
"minTime": 1536487200000,
"maxTime": 1536494400000
}
]
},
"version": 1
}Tha coimeasgaidhean ann am Prometheus ceangailte ris an Úine a thèid am bloca cinn a shruthladh gu diosc. Aig an Ïre seo, faodar grunn obraichean mar sin a dhèanamh.

Tha e coltach nach eil teannachadh cuibhrichte ann an dòigh sam bith agus faodaidh e spÏcean I / O diosc mòr adhbhrachadh nuair a thèid a chuir gu bà s.

Draibhearan airson CPU a luchdadh a-nuas

Gu dearbh, tha droch bhuaidh aig seo air astar an t-siostaim, agus tha e cuideachd na dhÚbhlan mòr airson stòradh LSM: mar a nÏ thu teannachadh gus taic a thoirt do Ïrean iarrtas à rd gun a bhith ag adhbhrachadh cus os cionn?
Tha cleachdadh cuimhne anns aâ phròiseas teannachaidh cuideachd aâ coimhead gu math inntinneach.

ChĂŹ sinn mar a tha, Ă s deidh teannachadh, aâ mhòr-chuid de na h-atharrachaidhean cuimhne ag aithris bho Cached to Free: tha seo aâ ciallachadh gun deach fiosrachadh a dhâ fhaodadh a bhith luachmhor a thoirt air falbh Ă s an sin. Tha e neònach ma thèid a chleachdadh an seo fadvice() no dòigh lughdachadh lughdachadh eile, no an ann air sgĂ th gun deach an tasgadan a shaoradh bho bhlocaichean a chaidh a sgrios aig Ă m teannachaidh?
Ath-bheothachadh an dèidh fà illigeadh
Bheir ath-bheothachadh bho fĂ illigidhean Ăšine, agus air adhbhar math. Airson sruth a bha aâ tighinn a-steach de mhillean clĂ r gach diog, bha agam ri feitheamh mu 25 mionaidean fhad âs a chaidh an ath-bheothachadh a dhèanamh aâ toirt aire don draibhear SSD.
level=info ts=2018-09-13T13:38:14.09650965Z caller=main.go:222 msg="Starting Prometheus" version="(version=2.3.2, branch=v2.3.2, revision=71af5e29e815795e9dd14742ee7725682fa14b7b)"
level=info ts=2018-09-13T13:38:14.096599879Z caller=main.go:223 build_context="(go=go1.10.1, user=Jenkins, date=20180725-08:58:13OURCE)"
level=info ts=2018-09-13T13:38:14.096624109Z caller=main.go:224 host_details="(Linux 4.15.0-32-generic #35-Ubuntu SMP Fri Aug 10 17:58:07 UTC 2018 x86_64 1bee9e9b78cf (none))"
level=info ts=2018-09-13T13:38:14.096641396Z caller=main.go:225 fd_limits="(soft=1048576, hard=1048576)"
level=info ts=2018-09-13T13:38:14.097715256Z caller=web.go:415 component=web msg="Start listening for connections" address=:9090
level=info ts=2018-09-13T13:38:14.097400393Z caller=main.go:533 msg="Starting TSDB ..."
level=info ts=2018-09-13T13:38:14.098718401Z caller=repair.go:39 component=tsdb msg="found healthy block" mint=1536530400000 maxt=1536537600000 ulid=01CQ0FW3ME8Q5W2AN5F9CB7R0R
level=info ts=2018-09-13T13:38:14.100315658Z caller=web.go:467 component=web msg="router prefix" prefix=/prometheus
level=info ts=2018-09-13T13:38:14.101793727Z caller=repair.go:39 component=tsdb msg="found healthy block" mint=1536732000000 maxt=1536753600000 ulid=01CQ78486TNX5QZTBF049PQHSM
level=info ts=2018-09-13T13:38:14.102267346Z caller=repair.go:39 component=tsdb msg="found healthy block" mint=1536537600000 maxt=1536732000000 ulid=01CQ78DE7HSQK0C0F5AZ46YGF0
level=info ts=2018-09-13T13:38:14.102660295Z caller=repair.go:39 component=tsdb msg="found healthy block" mint=1536775200000 maxt=1536782400000 ulid=01CQ7SAT4RM21Y0PT5GNSS146Q
level=info ts=2018-09-13T13:38:14.103075885Z caller=repair.go:39 component=tsdb msg="found healthy block" mint=1536753600000 maxt=1536775200000 ulid=01CQ7SV8WJ3C2W5S3RTAHC2GHB
level=error ts=2018-09-13T14:05:18.208469169Z caller=wal.go:275 component=tsdb msg="WAL corruption detected; truncating" err="unexpected CRC32 checksum d0465484, want 0" file=/opt/prometheus/data/.prom2-data/wal/007357 pos=15504363
level=info ts=2018-09-13T14:05:19.471459777Z caller=main.go:543 msg="TSDB started"
level=info ts=2018-09-13T14:05:19.471604598Z caller=main.go:603 msg="Loading configuration file" filename=/etc/prometheus.yml
level=info ts=2018-09-13T14:05:19.499156711Z caller=main.go:629 msg="Completed loading of configuration file" filename=/etc/prometheus.yml
level=info ts=2018-09-13T14:05:19.499228186Z caller=main.go:502 msg="Server is ready to receive web requests."Is e prĂŹomh dhuilgheadas a âphròiseas ath-bheothachaidh caitheamh cuimhne Ă rd. A dh'aindeoin 's gu bheil ann an suidheachadh Ă bhaisteach faodaidh an fhrithealaiche obrachadh gu stĂ ball leis an aon uiread de chuimhne, ma thuiteas e 's dòcha nach fhaigh e air ais air sgĂ th OOM. Bâ e an aon fhuasgladh a lorg mi casg a chuir air cruinneachadh dĂ ta, am frithealaiche a thoirt suas, leigeil leis faighinn air ais agus ath-thòiseachadh le cruinneachadh comasach.
A âblĂ thachadh
Is e giÚlan eile ri chumail nad inntinn aig à m blà thachadh an dà imh eadar coileanadh Ïosal agus caitheamh à rd ghoireasan dÏreach às deidh toiseach tòiseachaidh. Rè cuid, ach chan eil a h-uile cà il a 'tòiseachadh, chunnaic mi fÏor luchd air an CPU agus cuimhne.


Tha beĂ rnan ann an cleachdadh cuimhne aâ nochdadh nach urrainn dha Prometheus a h-uile cruinneachadh a rèiteachadh bhon toiseach, agus tha beagan fiosrachaidh air chall.
Chan eil mi air faighinn a-mach na dearbh adhbharan airson an CPU Ă rd agus an luchd cuimhne. Tha amharas agam gu bheil seo mar thoradh air cruthachadh sreath Ăšine Ăšr anns a âbhloc cinn le tricead Ă rd.
Ărdachadh luchdan CPU
A bharrachd air na teannachadh, a chruthaicheas luchd I / O gu math à rd, mhothaich mi spÏcean mòra ann an luchd CPU a h-uile dà mhionaid. Tha na spreadhaidhean nas fhaide nuair a tha an sruth a-steach à rd agus a rèir coltais air adhbhrachadh le neach-cruinneachaidh sgudail Go, le co-dhiÚ cuid de choraichean gan luchdachadh gu h-iomlan.


Chan eil na geansaidhean sin cho beag. Tha e coltach, nuair a thachras iad sin, nach bi Ă ite inntrigidh agus meatrach taobh a-staigh Prometheus rim faighinn, ag adhbhrachadh beĂ rnan dĂ ta anns na h-aon amannan sin.

Faodaidh tu cuideachd mothachadh gu bheil an Ă s-mhalairt Prometheus a 'dĂšnadh sĂŹos airson aon diog.

ChĂŹ sinn co-dhĂ imhean le cruinneachadh sgudail (GC).

co-dhĂšnadh
Tha TSDB ann am Prometheus 2 luath, comasach air milleanan de shreathan Ăšine a lĂ imhseachadh agus aig an aon Ă m mĂŹltean de chlĂ ran gach diog aâ cleachdadh bathar-cruaidh meadhanach beag. Tha cleachdadh CPU agus diosc I/O cuideachd drĂšidhteach. Sheall an eisimpleir agam suas ri 200 meatrach gach diog gach cridhe a chaidh a chleachdadh.
Gus leudachadh a phlanadh, feumaidh tu cuimhneachadh air meud gu leòr de chuimhne, agus feumaidh seo a bhith na fhĂŹor chuimhne. Bha an ĂŹre de chuimhne a chleachd mi a chunnaic mi timcheall air 5 GB gach 100 clĂ r gach diog den t-sruth a bha aâ tighinn a-steach, a thug còmhla ri tasgadan an t-siostaim obrachaidh timcheall air 000 GB de chuimhne còmhnaidh.
Gu dearbh, tha tòrr obrach ri dhèanamh fhathast gus spĂŹcean CPU agus diosc I/O a cheannsachadh, agus chan eil seo na iongnadh a bhith aâ beachdachadh air mar a tha TSDB Prometheus 2 òg an coimeas ri InnoDB, TokuDB, RocksDB, WiredTiger, ach bha an aon rud aca uile. duilgheadasan trĂ th sa chuairt-beatha aca.
Source: www.habr.com
