Propozimi për të transferuar log-et sistemore lastlog, btmp, utmp dhe wtmp në përdorimin e SQLite

Në listën e shpërndarjes linux-api është paraqitur për diskutim propozimi (RFC) për të zëvendësuar formatet binarë të vjetra të regjistrave të sistemeve lastlog, btmp, utmp dhe wtmp me biblioteka të reja të ndara që përdorin SQLite si backend. Iniciativa ka për qëllim zgjidhjen e problemeve të akumuluara, përfshirë tejkalimin e numrave 32-bit të kohës në vitin 2038, mungesën e shkallëzueshmërisë, performancën e ulët të kërkesave dhe mungesën e atomizmit gjatë shkrimit.

Aktualisht, për ruajtjen e të dhënave mbi seancat dhe përpjekjet për autentifikim në Linux, përdoren këta skedarë binarë, të cilët kanë një strukturë të fiksuar:

  • /var/log/lastlog — время последнего входа (структура «struct lastlog» с полем «ll_time» 32-разрядного типа time_t);
  • /var/log/btmp — неудачные попытки входа;
  • /var/run/utmp — текущие сеансы;
  • /var/log/wtmp — история входов и выходов.

Formati i të dhënave të skedarëve ishte zhvilluar disa dekada më parë dhe ka një numër të kufizimeve themelore:

  • Fusha «tv_sec» në strukturën «utmpx» dhe fusha «ll_time» në «lastlog» kanë tipin «int32_t», vlera e numrave të kohës mbi të cilën do të ndodhë tejkalimi më 19 janar 2038. Për shkak të kërkesave për ABI‑kompatibilitet, edhe në sistemet 64-bit këto fusha mbeten 32-bit, prandaj problemi do të preku të gjitha instalimet e Linux.
  • Madhësia fikse e të dhënave nuk lejon shtimin e fushave të reja (p.sh. identifikuesi i kontejnerit, emri i shërbimit, adresa IP) pa e zëvendësuar plotësisht formatin dhe rikompilimin e të gjitha utiliteteve.
  • Utilitetet last, lastb, who dhe lastlog janë të detyruara të kalojnë linearisht përmbajtjen e skedarëve. Kur regjistrat janë të mëdhenj, pa përdorimin e indekseve që lejojnë filtrimin efikas të të dhënave, ngarkesa mbi sistemin e hyrjes/dalbësimit dhe vonesat gjatë ekzekutimit të kërkesave bëhen të papranueshme.
  • Shkrimi në një skedar binar nuk është një operacion atomik. Në rast dështimi, shkrimi mund të çhetë pjesërisht.
  • Për të përjashtuar konfliktet gjatë shkrimit të një regjistri nga disa procese (p.sh. sshd dhe login), përdoren bllokimet flock, të cilat nuk garantojnë atomizëm dhe mund të çojnë në bllokime të ndërsjella.

Autori i RFC-së propozon një heqje të plotë të formateve binarë në favor të bibliotekave të ndara të specializuara që përdorin SQLite. Për çdo lloj regjistri krijohet një bibliotekë e veçantë me një ndërfaqe uniforme C: liblastlog2, libbtmp2, libutmp2 dhe libwtmp2. Të gjitha bibliotekat punojnë me BD, skema e të cilave përfshin vula të kohës 64-bit (tip INTEGER) dhe indekse sipas përdoruesit dhe kohës. Ka mundësi për të shtuar fushë të reja pa shkelur përputhshmërinë (nëpërmjet ALTER TABLE).

Ndër argumentet në favor të përdorimit të SQLite përmendet përdorimi i tipit 64-bit INTEGER për ruajtjen e kohës epokale, angazhimi i indekseve për të reduktuar hyrjen/dalinë përmes aksesit të përzgjedhur në regjistrime në vend të skanimit të plotë, mundësia për të shtuar fusha të reja pa ndryshuar regjistrimet ekzistuese, mbështetje për transaksionet ACID, moda WAL (Write-Ahead Logging) për qasje konkurruese pa bllokime, dhe një besueshmëri e provuar e punës së SQLite.

Për të siguruar një kalim të qetë, propozohet strategjia "dy shkruaj" (dual-write):

  • Programet që shkruajnë në skedarë binarë (login, sshd, sudo, cron etj.) modifikohen në mënyrë që të kryejnë njëkohësisht regjistrimin në skedarin e vjetër binar dhe në bazën e re SQLite përmes bibliotekës përkatëse.
  • Po zhvillohen versione të reja të utiliteteve (last2, lastb2, who2, lastlog2), të cilat lexojnë të dhënat nga bazat SQLite, duke përdorur indekse për punë të shpejtë. Utilitetet e vjetra vazhdojnë të funksionojë me skedarët përkatës.
  • Pas disa vitesh, kur shumica dërrmuese e sistemeve të përditësohen, mbështetja për regjistrimin në formatet e vjetra mund të fiket dhe utilitetet e vjetra të shpallen të vjetruara.

Pyetjet që janë ngritur për diskutim të mëtejshëm:

  • Rëndësia e ndarjes në biblioteka të veçanta ose kombimin në një të vetme (p.sh., libsession2).
  • Zgjedhja e emrave për bibliotekat dhe utilitetet (të ruhet emri historik apo të kalojë në emra më të përgjithshëm).
  • Vendi i skedarëve të bazave të të dhënave (/var/lib/ si për gjendjen e aplikacioneve apo /var/log/ si për logët).
  • Mekanizmat e versionimit të skemës dhe migrimit.
  • Parametrat e performancës së SQLite për skenarë të ndryshëm (serverët, sisteme të integruara).
  • Ofrimi i një fallback-backend që ruan log-e në një format binar të thjeshtuar për sistemet ku SQLite mund të jetë i tepërt (p.sh., pajisje të integruara me kufizime të rrepta për memorie).

Burimi: opennet.ru

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster