Analiżi TSDB fi Prometheus 2

Analiżi TSDB fi Prometheus 2

Id-database tas-serje ta 'żmien (TSDB) fi Prometheus 2 hija eżempju eċċellenti ta' soluzzjoni ta 'inġinerija li toffri titjib kbir fuq il-ħażna v2 fi Prometheus 1 f'termini ta' veloċità ta 'akkumulazzjoni tad-dejta, eżekuzzjoni ta' mistoqsijiet, u effiċjenza tar-riżorsi. Konna qed nimplimentaw Prometheus 2 f'Percona Monitoring and Management (PMM) u kelli l-opportunità li nifhem il-prestazzjoni ta' Prometheus 2 TSDB. F'dan l-artikolu ser nitkellem dwar ir-riżultati ta 'dawn l-osservazzjonijiet.

Xogħol medju ta' Prometheus

Għal dawk użati biex jittrattaw databases ta 'skop ġenerali, l-ammont ta' xogħol tipiku ta 'Prometheus huwa pjuttost interessanti. Ir-rata ta 'akkumulazzjoni tad-dejta għandha tendenza li tkun stabbli: normalment is-servizzi li timmonitorja jibagħtu bejn wieħed u ieħor l-istess numru ta' metriċi, u l-infrastruttura tinbidel relattivament bil-mod.
Talbiet għall-informazzjoni jistgħu jiġu minn diversi sorsi. Xi wħud minnhom, bħal twissijiet, jistinkaw ukoll għal valur stabbli u prevedibbli. Oħrajn, bħat-talbiet tal-utenti, jistgħu jikkawżaw tifqigħ, għalkemm dan mhuwiex il-każ għall-biċċa l-kbira tal-piżijiet tax-xogħol.

Test tat-tagħbija

Waqt l-ittestjar, iffokajt fuq il-ħila li takkumula dejta. I skjerat Prometheus 2.3.2 miġbura ma 'Go 1.10.1 (bħala parti minn PMM 1.14) fuq is-servizz Linode billi tuża dan l-iskript: StackScript. Għall-ġenerazzjoni tat-tagħbija l-aktar realistiku, tuża dan StackScript Nedejt diversi nodi MySQL b'tagħbija reali (Sysbench TPC-C Test), li kull wieħed minnhom emula 10 nodi Linux/MySQL.
It-testijiet kollha li ġejjin twettqu fuq server Linode bi tmien qlub virtwali u 32 GB ta 'memorja, li jħaddmu simulazzjonijiet ta' tagħbija 20 li jimmonitorjaw mitejn istanza MySQL. Jew, f'termini ta 'Prometheus, 800 mira, 440 scrapes kull sekonda, 380 elf rekord kull sekonda, u 1,7 miljun serje ta' ħin attiva.

Disinn

L-approċċ tas-soltu tad-databases tradizzjonali, inkluż dak użat minn Prometheus 1.x, huwa li limitu tal-memorja. Jekk ma jkunx biżżejjed biex timmaniġġja t-tagħbija, ser ikollok latenzi għoljin u xi talbiet ifallu. L-użu tal-memorja fi Prometheus 2 huwa konfigurabbli permezz taċ-ċavetta storage.tsdb.min-block-duration, li tiddetermina kemm se jinżammu r-reġistrazzjonijiet fil-memorja qabel ma titlaħlah fuq id-diska (default huwa sagħtejn). L-ammont ta 'memorja meħtieġ se jiddependi fuq in-numru ta' serje ta 'żmien, tikketti, u scrapes miżjuda mal-fluss nett deħlin. F'termini ta 'spazju tad-diska, Prometheus għandu l-għan li juża 2 bytes għal kull rekord (kampjun). Min-naħa l-oħra, ir-rekwiżiti tal-memorja huma ħafna ogħla.

Għalkemm huwa possibbli li jiġi kkonfigurat id-daqs tal-blokk, mhux irrakkomandat li jiġi kkonfigurat manwalment, għalhekk inti sfurzat li tagħti lil Prometheus memorja kemm teħtieġ għall-ammont tax-xogħol tiegħek.
Jekk ma jkunx hemm biżżejjed memorja biex tappoġġja n-nixxiegħa deħlin ta 'metriċi, Prometheus se jaqa' mill-memorja jew il-qattiel OOM jasal għaliha.
Iż-żieda ta' swap biex tittardja l-ħabta meta Prometheus jispiċċa bla memorja ma tantx tgħin, għax l-użu ta' din il-funzjoni jikkawża konsum splussiv tal-memorja. Naħseb li hija xi ħaġa li tagħmel ma 'Go, il-ġbir taż-żibel tagħha u l-mod kif tittratta t-tpartit.
Approċċ ieħor interessanti huwa li jiġi kkonfigurat il-blokka tar-ras biex titlaħlaħ fuq id-diska f'ċertu ħin, minflok ma tgħoddha mill-bidu tal-proċess.

Analiżi TSDB fi Prometheus 2

Kif tistgħu taraw mill-graff, fwawar fuq disk iseħħu kull sagħtejn. Jekk tibdel il-parametru tal-min-block-duration għal siegħa, allura dawn ir-resets iseħħu kull siegħa, li jibdew wara nofs siegħa.
Jekk trid tuża din u grafika oħra fl-installazzjoni ta' Prometheus tiegħek, tista' tuża dan daxxbord. Kien iddisinjat għal PMM iżda, b'modifiki minuri, jidħol fi kwalunkwe installazzjoni Prometheus.
Għandna blokk attiv imsejjaħ blokk tar-ras li huwa maħżun fil-memorja; blokki b'data eqdem huma disponibbli permezz mmap(). Dan jelimina l-ħtieġa li jiġi kkonfigurat il-cache separatament, iżda jfisser ukoll li għandek bżonn tħalli biżżejjed spazju għall-cache tas-sistema operattiva jekk trid tfittex dejta eqdem minn dak li jista 'jkollha l-blokka tar-ras.
Dan ifisser ukoll li l-konsum tal-memorja virtwali Prometheus se jidher pjuttost għoli, li mhix xi ħaġa li tinkwieta dwarha.

Analiżi TSDB fi Prometheus 2

Punt ta 'disinn interessanti ieħor huwa l-użu ta' WAL (write ahead log). Kif tistgħu taraw mid-dokumentazzjoni tal-ħażna, Prometheus juża WAL biex jevita ħabtiet. Mekkaniżmi speċifiċi għall-garanzija tas-sopravivenza tad-dejta, sfortunatament, mhumiex dokumentati tajjeb. Prometheus verżjoni 2.3.2 fwawar WAL fuq disk kull 10 sekondi u din l-għażla mhix konfigurabbli mill-utent.

Kompattazzjonijiet

Prometheus TSDB huwa ddisinjat bħal maħżen LSM (Log Structured Merge): il-blokka tar-ras titlaħlaħ perjodikament mad-diska, filwaqt li mekkaniżmu ta 'kompattazzjoni jgħaqqad blokki multipli flimkien biex tevita li tiskennja wisq blokki waqt il-mistoqsijiet. Hawnhekk tista 'tara n-numru ta' blokki li osservajt fuq is-sistema tat-test wara jum ta 'tagħbija.

Analiżi TSDB fi Prometheus 2

Jekk trid titgħallem aktar dwar il-maħżen, tista 'teżamina l-fajl meta.json, li għandu informazzjoni dwar il-blokki disponibbli u kif saru.

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

Il-kompatzzjonijiet fi Prometheus huma marbuta mal-ħin li l-blokka tar-ras titlaħlaħ mad-diska. F'dan il-punt, jistgħu jitwettqu diversi operazzjonijiet bħal dawn.

Analiżi TSDB fi Prometheus 2

Jidher li l-kompatzzjonijiet mhumiex limitati bl-ebda mod u jistgħu jikkawżaw spikes kbar I/O tad-disk waqt l-eżekuzzjoni.

Analiżi TSDB fi Prometheus 2

Spikes tat-tagħbija tas-CPU

Analiżi TSDB fi Prometheus 2

Naturalment, dan għandu impatt pjuttost negattiv fuq il-veloċità tas-sistema, u joħloq ukoll sfida serja għall-ħażna LSM: kif tagħmel kompattazzjoni biex tappoġġja rati għoljin ta 'rikjesti mingħajr ma tikkawża wisq overhead?
L-użu tal-memorja fil-proċess ta 'kompattazzjoni wkoll jidher pjuttost interessanti.

Analiżi TSDB fi Prometheus 2

Nistgħu naraw kif, wara l-kompattazzjoni, ħafna mill-memorja tbiddel l-istat minn Cached għal Ħieles: dan ifisser li informazzjoni potenzjalment siewja tneħħiet minn hemm. Kurjuż jekk jintużax hawn fadvice() jew xi teknika oħra ta 'minimizzazzjoni, jew minħabba li l-cache ġiet meħlusa minn blokki meqruda waqt il-kompattazzjoni?

Irkupru wara falliment

L-irkupru minn fallimenti jieħu ż-żmien, u għal raġuni tajba. Għal fluss deħlin ta 'miljun rekord kull sekonda, kelli nistenna madwar 25 minuta waqt li l-irkupru kien imwettaq b'kont meħud tal-SSD drive.

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."

Il-problema ewlenija tal-proċess ta 'rkupru hija konsum għoli ta' memorja. Minkejja l-fatt li f'sitwazzjoni normali s-server jista 'jaħdem b'mod stabbli bl-istess ammont ta' memorja, jekk jiġġarraf jista 'ma jirkuprax minħabba OOM. L-unika soluzzjoni li sibt kienet li tiddiżattiva l-ġbir tad-dejta, ġġib is-server, ħalliha tirkupra u terġa 'tibda bil-ġbir attivat.

Tisħon

Imġieba oħra li għandek iżżomm f'moħħok waqt it-tisħin hija r-relazzjoni bejn prestazzjoni baxxa u konsum għoli ta 'riżorsi eżatt wara l-bidu. Matul xi bidu, iżda mhux kollha, osservajt tagħbija serja fuq is-CPU u l-memorja.

Analiżi TSDB fi Prometheus 2

Analiżi TSDB fi Prometheus 2

Lakuni fl-użu tal-memorja jindikaw li Prometheus ma jistax jikkonfigura l-kollezzjonijiet kollha mill-bidu, u tintilef xi informazzjoni.
Ma kontx dehret ir-raġunijiet eżatti għas-CPU għolja u t-tagħbija tal-memorja. Nissuspetta li dan huwa dovut għall-ħolqien ta 'serje ta' żmien ġdida fil-blokka tar-ras bi frekwenza għolja.

Żieda fit-tagħbija tas-CPU

Minbarra l-kompatzzjonijiet, li joħolqu tagħbija I/O pjuttost għolja, innutajt spikes serji fit-tagħbija tas-CPU kull żewġ minuti. Il-fqigħ huma itwal meta l-fluss tad-dħul huwa għoli u jidhru li huma kkawżati mill-kollettur taż-żibel ta 'Go, b'mill-inqas xi qlub ikunu mgħobbija bis-sħiħ.

Analiżi TSDB fi Prometheus 2

Analiżi TSDB fi Prometheus 2

Dawn il-qbiż mhumiex daqshekk insinifikanti. Jidher li meta dawn iseħħu, il-punt ta 'dħul intern u l-metriċi ta' Prometheus ma jsirux disponibbli, u jikkawżaw lakuni fid-dejta matul dawn l-istess perjodi ta 'żmien.

Analiżi TSDB fi Prometheus 2

Tista 'tinnota wkoll li l-esportatur Prometheus jagħlaq għal sekonda.

Analiżi TSDB fi Prometheus 2

Nistgħu ninnutaw korrelazzjonijiet mal-ġbir taż-żibel (GC).

Analiżi TSDB fi Prometheus 2

Konklużjoni

TSDB fi Prometheus 2 huwa mgħaġġel, kapaċi jimmaniġġja miljuni ta 'serje ta' ħin u fl-istess ħin eluf ta 'rekords kull sekonda bl-użu ta' ħardwer pjuttost modest. L-użu tas-CPU u tad-disk I/O huwa wkoll impressjonanti. L-eżempju tiegħi wera sa 200 metrika kull sekonda għal kull qalba użata.

Biex tippjana l-espansjoni, trid tiftakar dwar ammonti suffiċjenti ta 'memorja, u din trid tkun memorja reali. L-ammont ta 'memorja użata li osservajt kien ta' madwar 5 GB għal kull 100 rekord kull sekonda tal-fluss deħlin, li flimkien mal-cache tas-sistema operattiva ta madwar 000 GB ta 'memorja okkupata.

Naturalment, għad hemm ħafna xogħol xi jsir biex jittamaw is-CPU u d-disk I/O spikes, u dan mhux sorprendenti meta wieħed iqis kif iż-żgħażagħ TSDB Prometheus 2 huwa mqabbel ma 'InnoDB, TokuDB, RocksDB, WiredTiger, iżda kollha kellhom simili problemi kmieni fiċ-ċiklu tal-ħajja.

Sors: www.habr.com

Żid kumment