• Technologie
  • Byznys
  • Software
  • Hardware
  • Internet
  • Telco
  • Science
  • České IT
  • Události
Žádné výsledky
Zobrazit všechny výsledky
ITBiz.cz
ITBiz.cz
Žádné výsledky
Zobrazit všechny výsledky

Logování aneb po stopách bugu #424

Jiří Sláma
20. 8. 2013
| Články

„Kritická chyba #424, přehazuji ji na tebe, musí to být opraveno ASAP!“, píše projektový manažer v pátek v 17:30. „Bude to určitě na chvilku“, dodá bodře a vy mu v duchu obouváte španělské boty. Tuto situaci jistě každý správný vývojář důvěrně zná. Nejen v tomto případě oceníte, pokud ze systému dokážete získat co nejvíce informací o okolnostech chyby, abyste následně bug překlasifikovali na enhancement/invalid a ve 23:57 odjeli vítězoslavně poslední tramvají domů.
Na následujících řádcích se pokusím shrnout, co všechno, proč a kde monitorujeme v bankovním systému, na jehož tvorbě se podílím. Získané postřehy jsou aplikovatelné nejen v bankovnictví, ale v podstatě v každé větší databázové aplikaci napsané v PL/SQL.

Custom-logging aneb – „do téhle větve se nikdy nemůžeme dostat“

Základním pomocníkem při opravě chyb jsou ladicí výpisy, které ukládáme do samostatné tabulky. Množství zapisovaných informací regulujeme globálním nastavením úrovně logování. V případě potřeby lze pomocí parametrizace nastavit logování na úrovni jednotlivých metod. Zápis probíhá v autonomní transakci (PRAGMA AUTONOMOUSTRANSACTION), abychom zajistili perzistenci v případě rollbacku. Dojde-li k výjimce, zalogujeme výstupy funkcí DBMSUTILITY.FORMATERRORBACKTRACE, DBMSUTILITY.FORMATCALL_STACK.
Tedy informací více než dost, s chutí do toho. V bugu nepříliš překvapivě není uveden čas, kdy k chybě došlo, zkusíme přílohy. První obsahuje dvě idčka v zazipovaném xlsx souboru, na což velkoryse reaguji pouze drobným tikem v obličeji. Druhou přílohu zkušený uživatel vytvořil nafocením obrazovky na mobilní telefon. Bingo – kromě obecné chybové hlášky z našeho systému a dalších dvou tabů s domácími elektrospotřebiči a facebookem jsou v rohu screenshotu i hodiny.

Pouštím jeden ze své sady archivních selectů, která dělá z junior programátorů senior programátory. Ten by měl v tabulce s ladicími výpisy dohledat logy z daného času. Po chvíli neúspěšného čekání na výsledek zkoumám pomocí příkazu explain plan exekuční plán, kterým je dotaz prováděn. Vida, fullscan – u větších klientů nad tabulkou nejsou žádné indexy kvůli zrychlení insertu (i za cenu fullscanu, tj. procházení celé tabulky při dotazování). Pokud do indexu vkládáte více za sebou následujících záznamů najednou (typicky jde o syntetický identifikátor řádků, Oracle pro jeho vytváření používá tzv. sekvence, MySQL auto increment), při zápisu může nastat problém, neboť po sobě jdoucí záznamy se budou ukládat do stejných datových bloků. Problém lze vyřešit použitím reverzního indexu, který zajistí rozprostření záznamů do více bloků. Reverzní index bohužel neumožňuje efektivně dohledávat záznamy z daného rozsahu, je použitelný pouze k hledání konkrétního záznamu, což jej pro naše účely diskvalifikuje – jeden řádek z logu nám opravdu nestačí.

Chvíli uvažuji o zrušení dotazu a přidání /*+ parallel */ hintu, pak si ale vzpomenu na smrtící pohled našeho DBA, když jsem posledně neuvedl maximální povolený stupeň paralelizace, a jdu si raději zahrát ping-pong, než select doběhne.

Select nic nenašel, vítězství v ping-pongu je mi slabou útěchou. Chvíli vzpomínám, k čemu je sloupeček instanceid. Při nasazení v RACu (tedy běží-li databáze na více strojích najednou) se úzkým hrdlem ukázal být interconnect mezi jednotlivými nody, sdílení datových bloků. Pomohlo rozdělení tabulky na partice podle toho, z jakého uzlu pochází zapisovaný záznam (informace dostupná v proměnné dbmsutility.currentinstance), každý stroj tak loguje do vlastní partice. Exportovací job běží na každém stroji zvlášť, vždy pracuje pouze s konkrétní particí, ke sdílení bloků tak nedochází (částečnou analogií je tzv. sticky session při load balancingu).

Ne že by sloupeček instanceid nějak souvisel s prázdným výsledkem selectu. No samozřejmě – bug byl zadán včera, jelikož tabulka poměrně rychle nabírá na velikosti, dochází na denní bázi k exportu na disk. Pomocí superpuTTy se připojuji na server a zkouším grepovat. Neúspěšně.

Když to nejde jinak, aneb víme všechno o všem

Co se týče monitorování změn v datech, umožňuje systém dohledat de facto cokoliv. Při buildu prostředí na základě parametrizace generujeme ON INSERT/UPDATE/DELETE triggery, které ukládají informace o změnách do auditovací tabulky. Jedná se o tzv. value-based auditing, tedy evidujeme přímo konkrétní řádky, nikoliv pouze spuštěné dotazy.

Parametrizace obsahuje black-list sloupců/tabulek, které nechceme tímto způsobem auditovat (například auditovací tabulku samotnou, jak bystrý čtenář jistě nahlédne). Bohužel i mnou hledaný sloupec nacházím na black-listu. V svn pomocí funkce blame zjišťuji autora a volám mu s poděkováním za tento skvělý commit. V průběhu vypjatého hovoru mimo jiné zjišťuji, že na mém rootnutém telefonu nefunguje mute mikrofonu, to poté, co mi kolega začne odpovídat na nadávky.

Logování pro uživatele

Chvíli trávím porovnáváním výhod práce popeláře a programátora, za stavu 4:1 si vzpomenu, že máme další logovací tabulku. Jelikož dosud zmíněné tabulky se kvůli velikosti pravidelně exportují na disk, nejsou historické záznamy pro aplikaci dostupné. Proto změny dat, které potřebujeme kvůli reportům, logujeme zvlášť. Všechny entity pohromadě, trochu jako u EAV modelu (viz např. Wikipedie zde). Zase nic.

Logování uživatelských akcí aneb „Opravdu jste na ten odkaz neklikl dvakrát?“

U každého požadavku na server evidujeme čas, uživatele, POST parametry a URL, na kterou uživatel přistupoval. Jelikož při opakovaném přístupu na stejnou URL dochází k duplicitnímu ukládání dat, adresy samotné následně jobem převádíme do samostatného číselníku, v původní tabulce zůstane pouze cizí klíč ve sloupečku idurl. Job používá pro dohledání záznamů ke zpracování sloupeček compressionneeded s hodnotami Y (ano) nebo null (ne), který po zpracování nulluje. Použití null hodnot namísto hodnoty N vede ke zmenšení velikosti indexu, alternativou by bylo použít funkční index, jehož funkce bude pro již zpracované řádky vracet hodnotu null.

Spojením dat z logů se dvěma plechovkami energetického nápoje se dobírám ke kýženému výsledku – jde o chybu uživatele. Částečně. Nemá tam co klikat. No možná to raději opravím.

„Konečně!“, úlevou vdechnu hrnek s kávou. Po čtyřech hodinách hledání následuje oprava jednoho řádku kódu, jak se říká: „Jeden dolar za utažení šroubku, 199 dolarů za to, že jsem věděl, který šroubek utáhnout“.

Postupujete u vás ve firmě při řešení chyb jinak? Podělte se o názor v diskuzi.

Rubriky: České ITPodnikový softwareVývoj a HTML

Související příspěvky

Linus Torvalds má 50 let
Články

Red Hat Enterprise Linux for Business Developers umožňuje sladit vývoj aplikací s produkčním provozem

16. 7. 2025
Sophos představil XDR řešení pro synchronizované zabezpečení
Zprávičky

Počet kybernetických incidentů v ČR byl v červnu druhý nejnižší za poslední rok

15. 7. 2025
Umělá inteligence v IT infrastruktuře
Články

Salesforce představuje třetí generaci Agentforce

14. 7. 2025
Nebojte se hlásit na seniornější pozice, radí IT pracovní portál
Články

NÚKIB vydal oficiální varování před některými produkty společnosti DeepSeek

10. 7. 2025

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Souhlasím se Zásadami ochrany osobních údajů .

Zprávičky

Pentagon bude využívat chatbota Grok, s firmou xAI má smlouvu za 200 milionů dolarů

ČTK
16. 7. 2025

Ministerstvo obrany Spojených států začne využívat chatbota Grok americké společnosti xAI miliardáře Elona Muska.

Výdaje na zabezpečení v Evropě i letos porostou

Oracle investuje tři miliardy dolarů do datových centrech v Německu a Nizozemsku

ČTK
16. 7. 2025

Americká společnost Oracle v příštích pěti letech plánuje investovat do datových center v Německu

Infrastruktura jako kód: Zjednodušte své implementace v cloudu automatizací

Meta investuje stovky miliard dolarů do datových center pro superinteligenci

ČTK
16. 7. 2025

Společnost Meta Platforms investuje stovky miliard dolarů do vybudování několika obřích datových center na

Sophos představil XDR řešení pro synchronizované zabezpečení

Počet kybernetických incidentů v ČR byl v červnu druhý nejnižší za poslední rok

ČTK
15. 7. 2025

Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) evidoval v červnu v ČR druhý

Nvidia po souhlasu od Trumpovy vlády obnoví prodej čipů pro AI do Číny

ČTK
15. 7. 2025

Americký výrobce čipů Nvidia získal od vlády prezidenta Donalda Trumpa souhlas s prodejem svých

EK představila nový kodex pro AI, zabývá se autorskými právy nebo bezpečností

ČTK
15. 7. 2025

Evropská komise zveřejnila nový dobrovolný kodex postupů pro poskytovatele výkonných systémů umělé inteligence (AI),

750 zaměstnanců ČSOB se díky Atosu zvládlo rychle přesunout do domácích kanceláří

Čína schválila firmě Synopsys akvizici podniku Ansys za 35 miliard dolarů

ČTK
15. 7. 2025

Čínský regulační úřad s podmínkami schválil záměr výrobce softwaru pro návrh čipů Synopsys převzít

Dell 14 a 16 Premium: Nástupce XPS přináší větší výkon a dlouhou výdrž baterie

Dell 14 a 16 Premium: Nástupce XPS přináší větší výkon a dlouhou výdrž baterie

Pavel Houser
14. 7. 2025

Společnost Dell Technologies představila nové vlajkové lodě svého portfolia notebooků, které navazují na sérii

Tiskové zprávy

AI pomoc pro přetížené týmy ve finančním sektoru

HP představuje digitální tiskový stroj HP Indigo 6K+

GFI Archiver integruje AI CoPilot pro výkonnější správu e-mailových archivů

Společnost Cato Networks jmenována lídrem v magickém kvadrantu 2025 Gartner Magic Quadrant pro platformy SASE

Společnost QNAP představuje myQNAPcloud One Beta

Acer slaví několikanásobné ocenění cenou Red Dot Product Design Awards 2025

Zpráva dne

Květen je měsícem růstu, můžete růst s Windows 11 jen za €20.00!

Květen je měsícem růstu, můžete růst s Windows 11 jen za €20.00!

Redakce
15. 5. 2025

Kupte Windows 11 CDkey od Goodoffer24.com a můžete růst s tímto OS jak při...

Komentujeme

Chvála černých skřínek

Malé modely AI mají být velkým trendem

Pavel Houser
3. 1. 2025

V záplavě prognóz technologického vývoje (nejen) v roce 2025 zde prozatím trochu zapadlo jedno téma, které...

Slovník

Competitive Intelligence

Backspace

TV metr

Nejpopulárnější články

Žádný obsah není dostupný

Kategorie

  • Články
  • Komentujeme
  • Slovník
  • Tiskové zprávy
  • Zprávičky

Portál ITbiz.cz přináší informace z IT a byznysu již od roku 2006. Provozuje jej internetové vydavatelství Nitemedia. Hosting zajišťuje společnost Greenhousing.cz. Mezi další naše projekty patří například ABClinuxu.cz a Sciencemag.cz. Na stránce Redakce naleznete informace o redakci a možnostech inzerce.

Rubriky

Akce a události Byznys Cloud Ekomerce Hardware Internet Operační systémy Podnikový software Právo Science Security Technologie Telekomunikace Veřejná správa Vývoj a HTML Zpráva dne České IT
Žádné výsledky
Zobrazit všechny výsledky
  • Technologie
  • Byznys
  • Software
  • Hardware
  • Internet
  • Telco
  • Science
  • České IT
  • Události

© 2019 Vydává Nitemedia s.r.o. Hosting zajišťuje Greenhousing.cz.

Tento web používá cookies. Pokračováním dáváte souhlas s jejich používáním. Více na itbiz.cz/soukromi.