pondelok 12. apríla 2010

Farebné logy

Čítanie logov vo všeobecnosti nepatrí medzi veľmi obľúbené činnosti.

Väčšinou je potrebné nájsť nejakú konkrétnu informáciu v konečnom zozname logov. Na to je skvelý niekoľkonásobne zreťazený grep, grep -v a prípadne čerešnička zo sed s awk.

Niekedy je ale potrebné pozerať všetky logy a reagovať na vznikajúce problémy ešte pred tým, ako zákazník niečo zbadá. Nič tak nepoteší zákazníka ako telefonát od Vášho dohľadového technika že našiel problém v produkčnom systéme, ale už pracuje na jeho odstránení.

Tiež je vhodné sledovať všetky logy pri štarte serverov, pri kompilácii (maven píše zaujímavé veci) atď.

Ak logy obsahujú DEBUG hlášky spolu s INFO, WARN a ERROR, je z toho neprehľadný guláš a výsledok sa nedá sledovať dlhšie ako pár minút.

Logy je preto vhodné nejako zafarbiť, aby bolo hneď vidno čo je DEBUG výpis, čo je ERROR hláška a kde je nejaký WARNING.

Našiel som zopár farbičov logov, skúsil som perlový filer colorize.pl (archív), céčkový multitail a pythonovský grc.

Nápaditosťou názvu by určite vyhral posledný z nich, funkčnosťou sa mi najviac páčil perlovský colorize.

Colorize je totiž krásne jednoduchý.

Colorize funguje ako filter. Pri volaní definujete sadu dvojíc parametrov, kde na prvá časť hovorí ako sa majú dáta zvýrazniť (celý riadok alebo len nájdená časť) a aké dáta sa majú hľadať (regexp). Takýchto definičných dvojíc môžete mať koľko chcete potrebujete. Farbenia sa dajú aj kombinovať a dá sa zafarbiť podreťazec (napr. transactionId žltou) v rámci zafarbeného riadku (napr. DEBUG šedou).

Pre rôzne typy logov mám napísané špeciálne definície filtrov, a teda napr. maven build mám v colormvn, aplikačné logy filtrujem cez color. Tieto skripty len volajú colorize.pl s príslušnými parametrami.

Definičný farbič môže vyzerať napr. takto:
#/bin/bash
colorize.pl \
 +l28:BUILD\ SUCCESSFUL \
 +l18:BUILD\ FAILED \
 -n78:INFO \
 -l18:SKIPPING\|ERROR\|FAILURE \
 -l38:WARN\|Exception \
 -l08:DEBUG\|Hibernate
kde napr.
+l28:BUILD\ SUCCESSFUL
je (+) časť riadku (l) low intensity (2) zelená (8) na priesvitnom pozadí pre text "BUILD SUCCESSFUL";
-l08:DEBUG\|Hibernate
je (-) celý riadok (l) low intensity (0) biela na (8) priesvitnom pozadí pre riadky obsahujúce "DEBUG" alebo "Hibernate"

Ak by bol riadok s reťazcom "DEBUG" aj s reťazcom "BUILD SUCCESSFUL", aplikuje sa najskôr na celý riadok DEBUG farbenie bielou slabej intenzity (šedá) a na reťazec "BUILD SUCCESSFUL" pôjde tmavo zelená.

Colorize.pl mám v /usr/local/bin a užívateľské farbiče je vhodné umiestniť do ~/bin/ ktorý je štandardne v ceste.
Ak je nejaký farbič používaný viacerými užívateľmi systému, je fajn dať ho tiež do /usr/local/bin len treba dať pozor že tento adresár je štandardne v ceste pred ~/bin/ takže jednoduché prekrytie je problematické.

EDIT:
pridávam príklady farieb, kvôli viditeľnosťi na čiernom pozadí.

[style]
n = normal, l = light, u=underscore, i = inverted, b = blinking

style n = normal
 0= black  1= red  2= green  3= yellow  4= blue  5= purple  6= cyan  7= white 

style l = light
0 = black  1= red  2= green  3= yellow  4= blue  5= purple  6= cyan  7= white 

[background color]
 0= black ,  1= red ,  2= green ,  3= yellow ,  4= blue ,  5= purple ,  6= cyan ,  7= white , 8= none

UPDATE:
Stránka colorize scriptu zmizla, v archive.org sa dá pozrieť najnovšia archivovaná verzia. Skript samotný však archivovaný nie je.

sobota 27. februára 2010

DOSové programy žerúce 100% procesoru

Občas potrebujem staré programy napísané v čase DOS a 16-bitových windows. V nových 23-bitových windows postavených na NT jadre postavenom na OS/2 jadre postavenom na ... - ale to je trošku iný príbeh - proste na nových windows tieto programy občas zožerú 100% výkonu procesorového jadra. Okrem spotreby to má aj nepríjemný side-effect - procesor sa hreje, vetrák nestíha a tak sú mu zvýšené otáčky, čo on právom odmení hlukom. Nechutné.

Na svedomí to má ntvdm.exe, teda NT Virtual Dos Machine a problémy s ním má podľa google celkom dosť ľudí.

Inžinieri z USA (samozrejme nie tí z Redmondu) ale dali hlavy dokopy a vymysleli TAME. Liek na hluk a spotrebu.

Funguje to jednuoducho. Ukončíte DOS program ktorý naposledy žerie 100% výkonu, stiahnete TAME, rozbalíte TAME, nainštalujete TAME, spustíte DOS program ktorý žral 100% výkonu a skontrolujete že už nežerie 100% ale adekvátne 2-3% (podľa aktuálnej záťaže).

TAME má aj konzolu (Monitor all DOS apps), kde je vidno spustené DOS procesy, PID, čas behu, percento využívaného CPU, počet otvorených súborov, status (väčšinou Idle voľačo) a ešte nejaké ďalšie pre mňa momentálne nepotrebné detaily. Dá sa tam prepnúť aj zoznam otvorených súborov (poor man's lsof), detail využitej pamäte a ako bonus aj konzola bežiaceho procesu.