Analiz TSDB nan Prometheus 2

Analiz TSDB nan Prometheus 2

Baz done seri tan (TSDB) nan Prometheus 2 se yon egzanp ekselan nan yon solisyon jeni ki ofri gwo amelyorasyon sou depo v2 nan Prometheus 1 an tèm de vitès akimilasyon done, ekzekisyon rechèch, ak efikasite resous. Nou t ap aplike Prometheus 2 nan Percona Monitoring and Management (PMM) e mwen te gen opòtinite pou m konprann pèfòmans Prometheus 2 TSDB. Nan atik sa a mwen pral pale sou rezilta yo nan obsèvasyon sa yo.

Mwayèn kantite travay Prometheus

Pou moun ki abitye fè fas ak baz done jeneral, kantite travay tipik Prometheus la trè enteresan. Pousantaj nan akimilasyon done yo gen tandans yo dwe ki estab: anjeneral sèvis ou kontwole yo voye apeprè menm kantite mezi, ak enfrastrikti a chanje relativman dousman.
Demann enfòmasyon ka soti nan plizyè sous. Kèk nan yo, tankou alèt, tou fè efò pou yon valè ki estab ak previzib. Lòt moun, tankou demann itilizatè, ka lakòz eklat, byenke sa a se pa ka a pou pifò chaj travay.

Tès chaj la

Pandan tès la, mwen konsantre sou kapasite pou akimile done yo. Mwen te deplwaye Prometheus 2.3.2 konpile ak Go 1.10.1 (kòm yon pati nan PMM 1.14) sou sèvis Linode lè l sèvi avèk script sa a: StackScript. Pou jenerasyon chaj ki pi reyalis, lè l sèvi avèk sa a StackScript Mwen te lanse plizyè nœuds MySQL ak yon chaj reyèl (Tès Sysbench TPC-C), yo chak nan yo te imite 10 nœuds Linux/MySQL.
Tout tès sa yo te fèt sou yon sèvè Linode ak uit nwayo vityèl ak 32 GB memwa, kouri 20 simulation chaj siveyans de san ka MySQL. Oswa, an tèm Prometheus, 800 sib, 440 scrapes pa segonn, 380 mil dosye pa segonn, ak 1,7 milyon seri tan aktif.

Design

Apwòch la nòmal nan baz done tradisyonèl yo, ki gen ladan youn nan itilize pa Prometheus 1.x, se yo limit memwa. Si li pa ase pou okipe chay la, ou pral fè eksperyans gwo latans ak kèk demann ap echwe. Itilizasyon memwa nan Prometheus 2 se configurabl atravè kle storage.tsdb.min-block-duration, ki detèmine konbyen tan anrejistreman yo pral kenbe nan memwa anvan flòch sou disk (default se 2 èdtan). Kantite memwa ki nesesè yo pral depann de kantite seri tan, etikèt, ak scrapes ki ajoute nan kouran k ap rantre nèt la. An tèm de espas disk, Prometheus gen pou objaktif pou itilize 3 byte pou chak dosye (echantiyon). Nan lòt men an, kondisyon memwa yo pi wo.

Malgre ke li posib pou konfigirasyon gwosè blòk la, li pa rekòmande pou konfigirasyon li manyèlman, kidonk ou oblije bay Prometheus tout memwa jan li mande pou kantite travay ou.
Si pa gen ase memwa pou sipòte kouran kap fèk ap rantre nan metrik, Prometheus pral tonbe nan memwa oswa asasen an OOM pral jwenn li.
Ajoute swap pou retade aksidan an lè Prometheus fini nan memwa pa vrèman ede, paske lè l sèvi avèk fonksyon sa a lakòz konsomasyon memwa eksplozif. Mwen panse ke li se yon bagay ki fè ak Go, pèseptè fatra li yo ak fason li fè fas ak swap.
Yon lòt apwòch enteresan se konfigirasyon blòk la tèt yo dwe kole sou disk nan yon sèten tan, olye pou yo konte li depi nan kòmansman an nan pwosesis la.

Analiz TSDB nan Prometheus 2

Kòm ou ka wè nan graf la, flòch sou disk fèt chak dezèdtan. Si ou chanje paramèt min-blòk-dire a nan yon èdtan, Lè sa a, reset sa yo ap fèt chak èdtan, kòmanse apre yon demi èdtan.
Si ou vle sèvi ak graf sa a ak lòt nan enstalasyon Prometheus ou a, ou ka itilize sa a tablodbò. Li te fèt pou PMM men, ak modifikasyon minè, adapte nan nenpòt enstalasyon Prometheus.
Nou gen yon blòk aktif ki rele tèt blòk ki estoke nan memwa; blòk ak done ki pi gran yo disponib atravè mmap(). Sa a elimine nesesite pou konfigirasyon kachèt la separeman, men tou vle di ke ou bezwen kite ase espas pou kachèt sistèm operasyon an si ou vle rechèch done ki pi gran pase sa blòk tèt la ka akomode.
Sa vle di tou ke konsomasyon memwa vityèl Prometheus ap gade byen wo, ki se pa yon bagay enkyete sou.

Analiz TSDB nan Prometheus 2

Yon lòt pwen konsepsyon enteresan se itilizasyon WAL (write ahead log). Kòm ou ka wè nan dokiman depo a, Prometheus itilize WAL pou evite aksidan. Mekanis espesifik pou garanti sivivabilite done yo, malerezman, pa byen dokimante. Prometheus vèsyon 2.3.2 vide WAL sou disk chak 10 segonn epi opsyon sa a pa itilizatè configurable.

Compact

Prometheus TSDB fèt tankou yon magazen LSM (Log Structured Merge) : blòk tèt la koule detanzantan sou disk, pandan y ap yon mekanis konpaksyon konbine plizyè blòk ansanm pou evite analize twòp blòk pandan demann. Isit la ou ka wè kantite blòk ke mwen obsève sou sistèm tès la apre yon jou nan chaj.

Analiz TSDB nan Prometheus 2

Si ou vle aprann plis sou magazen an, ou ka egzamine fichye meta.json la, ki gen enfòmasyon sou blòk ki disponib ak kijan yo te vin.

{
       "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
}

Kontraksyon nan Prometheus yo mare nan tan an se blòk tèt la kole sou disk. Nan pwen sa a, plizyè operasyon sa yo ka fèt.

Analiz TSDB nan Prometheus 2

Li parèt ke konpaksyon yo pa limite nan okenn fason epi yo ka lakòz gwo disk I / O Spikes pandan ekzekisyon.

Analiz TSDB nan Prometheus 2

CPU chaj Spikes

Analiz TSDB nan Prometheus 2

Natirèlman, sa a gen yon enpak olye negatif sou vitès la nan sistèm nan, epi tou li poze yon defi grav pou depo LSM: ki jan fè konpaksyon sipòte to demann segondè san yo pa lakòz twòp sou tèt?
Itilize nan memwa nan pwosesis la konpaksyon tou sanble byen enteresan.

Analiz TSDB nan Prometheus 2

Nou ka wè ki jan, apre konpaksyon, pi fò nan memwa a chanje eta soti nan Cached nan gratis: sa vle di ke yo te retire enfòmasyon ki gen anpil valè nan la. Kirye si li itilize isit la fadvice() oswa kèk lòt teknik minimize, oswa èske se paske kachèt la te libere nan blòk detwi pandan konpaksyon?

Rekiperasyon apre yon echèk

Rekiperasyon nan echèk pran tan, ak pou bon rezon. Pou yon kouran fèk ap rantre nan yon milyon dosye pa segonn, mwen te oblije rete tann apeprè 25 minit pandan y ap rekiperasyon an fèt pran an kont kondwi a 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."

Pwoblèm prensipal pwosesis rekiperasyon an se konsomasyon memwa segondè. Malgre lefèt ke nan yon sitiyasyon nòmal sèvè a ka travay estab ak menm kantite memwa, si li aksidan li ka pa refè akòz OOM. Sèl solisyon mwen te jwenn se te enfim koleksyon done, pote sèvè a, kite l refè ak rdemare ak koleksyon pèmèt.

Chofe

Yon lòt konpòtman pou kenbe nan tèt ou pandan cho-up se relasyon ki genyen ant pèfòmans ki ba ak gwo konsomasyon resous imedyatman apre kòmansman an. Pandan kèk, men se pa tout kòmanse, mwen obsève yon chaj grav sou CPU a ak memwa.

Analiz TSDB nan Prometheus 2

Analiz TSDB nan Prometheus 2

Diferans nan itilizasyon memwa endike ke Prometheus pa ka configured tout koleksyon depi nan kòmansman an, epi kèk enfòmasyon pèdi.
Mwen pa te kalkile rezon egzak pou CPU a segondè ak chaj memwa. Mwen sispèk ke sa a se akòz kreyasyon an nan seri tan nouvo nan blòk la tèt ak yon frekans segondè.

CPU chaj vag

Anplis de sa nan konpaksyon yo, ki kreye yon chaj I / O jistis segondè, mwen remake Spikes grav nan chaj CPU chak de minit. Eklatman yo pi long lè koule nan opinyon wo epi yo parèt yo te koze pa pèseptè fatra Go a, ak omwen kèk nwayo yo te konplètman chaje.

Analiz TSDB nan Prometheus 2

Analiz TSDB nan Prometheus 2

So sa yo pa tèlman ensiyifyan. Li sanble ke lè sa yo rive, pwen antre entèn Prometheus a ak mezi yo vin pa disponib, sa ki lakòz twou vid ki genyen nan done pandan menm peryòd tan sa yo.

Analiz TSDB nan Prometheus 2

Ou ka remake tou ke ekspòtatè a Prometheus fèmen pou yon segonn.

Analiz TSDB nan Prometheus 2

Nou ka remake korelasyon ak koleksyon fatra (GC).

Analiz TSDB nan Prometheus 2

Konklizyon

TSDB nan Prometheus 2 se vit, ki kapab manyen dè milyon de seri tan ak nan menm tan an dè milye de dosye pou chak segonn lè l sèvi avèk pyès ki nan konpitè san patipri modès. CPU ak disk I/O itilizasyon tou enpresyonan. Egzanp mwen an te montre jiska 200 metrik pou chak segonn pou chak nwayo itilize.

Pou planifye ekspansyon, ou bezwen sonje sou kantite ase nan memwa, epi sa a dwe memwa reyèl. Kantite memwa yo te itilize ke mwen te obsève te apeprè 5 GB pou chak 100 dosye pou chak segonn nan kouran k ap fèk ap rantre, ki ansanm ak kachèt sistèm operasyon an te bay anviwon 000 GB memwa okipe.

Natirèlman, gen toujou anpil travay yo dwe fè pou donte CPU ak disk I / O Spikes, e sa pa etone lè nou konsidere ki jan jèn TSDB Prometheus 2 konpare ak InnoDB, TokuDB, RocksDB, WiredTiger, men yo tout te gen menm jan an. pwoblèm bonè nan sik lavi yo.

Sous: www.habr.com

Add nouvo kòmantè