Lekce 11 - Údržba logů v systému ObjectGears
V minulé lekci, Objekty systému ObjectGears - Role a řízení přístupu, jsme si popsali objekt Role a způsob řízení přístupu uživatelů.
V dnešním ObjectGears tutoriálu se zaměříme na správný přístup k údržbě logů pro zajištění větší stability systému.
Motivace
Při běžné práci s aplikacemi uživatelé prohlížejí data, vytvářejí nová, upravují již existující nebo data mažou. Spolu s těmito změnami se v aplikaci hromadí druhá sada dat, kterými jsou logovací data. V systému ObjectGears se loguje spousta informací, které můžeme později použít pro kontrolu přístupů, k analýze chování uživatelů či k hledání případných chyb.
Tento typ dat neustále narůstá. Časem se tak budeme potýkat s těmito problémy:
- velikost vlastní databáze,
- velikost vytvořených záloh,
- obnova databáze po havárii disku.
Právě z těchto a podobných důvodů obsahuje systém ObjectGears možnost údržby logů.
Údržba logů
Kliknutím na položku Správa / Systém / Údržba logů v levém menu si zobrazíme základní nastavení:

Na obrázku vidíme možnost nastavit údržbu:
- systémových logů,
- archivních tabulek v modelu.
Pojďme si obě možnosti vysvětlit.
Údržba systémových logů
Na obrázku výše, v sekci Systémové logy, vidíme tabulku s logy k odstranění. Na každém řádku vidíme:
- Název – název skupiny příbuzných logů,
- Povoleno – příznak, kterým povolujeme odstraňování logů,
- Ponechat posledních dní – definujeme počet dní, v kterých budou logy zachovány,
- Počet řádek v DB - vidíme, kolik řádků zabírá daný log v databázi. Pokud je log složen z více tabulek, pak je zde více hodnot.
Jednotlivé logy jsou sloučeny do skupinek podle významu. Např. log Odeslané emaily používá v databázi tři tabulky, log Spuštění workflow jich používá pět. Při promazání těchto logů, dojde k promazání všech těchto tabulek.
Při mazání však nedochází automaticky ke smazání všech záznamů. Mažou se jen nepotřebné záznamy. Naopak záznamy, na které je odkazováno z jiných tabulek, není možné smazat. Typicky log Protokol událostí obsahuje informace i pro jiné logy, a tak z něj není možné smazat záznamy, pokud nebudou smazány záznamy z jiných logů.
Hodnotu z pole Ponechat posledních dní nastavujeme podle četnosti tvorby zálohy databáze. Například když děláme plnou zálohu každý týden, pak nastavíme hodnotu na 15 dní. Logy tak budeme mít ve dvou zálohách.
Při nastavování kontrolujeme vlastní velikost databáze, aby nepřekročila velikost dostupného disku.
Hodnota z pole Ponechat posledních dní může být libovolné
celé číslo větší nebo rovno 5
. Vyjímkou jsou
automatické časové operace (ATO), kde je minimální hodnota
90
, což vychází z principu fungování ATO.
Zachování logu na delší dobu nebo natrvalo
Pokud máme specifický požadavek na uchování logu po dobu 1 roku či natrvalo, pak vytvoříme novou instanci ObjectGears. Do této instance vytvoříme instanci třídy, která bude představovat daný log. Pak například jobem každou noc budeme přesunovat nové záznamy.
Vytvoření instance pro každý log zvlášť získáme dostatečný prostor.
Nastavení archivních tabulek v modelech
V rámci modelu můžeme u každé třídy povolit archivaci záznamů. Tzn., každá změna ve třídě provede vložení původních dat do archivní tabulky. Tyto záznamy se ale nemažou a časem by mohly narůst do velkého množství.
Nastavení je zde stejné jako u systémových logů. Nejdříve vybereme daný model ze zobrazených tříd (ty mají povolenu archivaci záznamů) a pak vybereme třídy k promazání:

Pro každý model je potřeba zvlášť kliknout na tlačítko Uložit. Jinak po výběru jiného modelu dojde k zahození změn nastavení předchozího modelu.
Při promazávání archivních tabulek tříd modelů se nijak nekontrolují vazby mezi záznamy.
Mějme například dvě třídy Faktura
a
Položky-faktury
. Třída Položky-faktury
odkazuje na
třídu Faktura
. Na třídě Faktura
bychom nastavili
ponechání 90
posledních dní a na třídě
Položky-faktury
jen 30
dní. Pak po 30 dnech stále v
archivu uvidíme seznam všech faktur a jejich změn, ale již neuvidíme
položky starších faktur, které byly smazány po 30 dnech.
V provozních třídách Faktura
a
Položky-faktur
bude stále vše v pořádku, protože v nich
mazání neprobíhá.
Spouštění odstranění logů
Promazávání logů spouštíme pomocí jobu Log maintenance se skriptem takto:
OG.RunLogMaintenance();
To nám dává plnou moc nad dobou, kdy v databázi neprovádíme žádné
importy, exporty ani jiné hromadné databázové operace, které by výmaz
mohly časově nebo výkonově narušit. Údržbu můžeme spouštět jednou
denně, týdně nebo jen měsíčně v závislosti na plnění tabulky s logy. S
ohledem na četnost spouštění nastavujeme i hodnotu
Ponechat posledních dní. Nemá smysl nastavovat 3
dny,
když provádíme vlastní mazání jednou týdně/měsíčně.
Vypnutí odstranění logů
V případě nutnosti je možné job na promazávání logů zcela vypnout. Vypnutí způsobí nárůst logů a po opětovném zapnutí se smaže více záznamů.
Jde o stejnou situaci, kdy logy promazáváme poprvé nebo když měníme hodnotu Ponechat posledních dní. Její snížení při následném spuštění promazávání odstraní více záznamů.
Četnost odstraňování logů
Častějším spouštěním promazávání logů snížíme skokové změny velikostí databáze, tedy potřebné místo na disku. Pokud např. promazáváme každý den a smažeme průměrně 50MB, pak se velikost databáze bude denně měnit o 50MB a +- nové záznamy.
Pokud budeme promazávat jednou měsíčně, pak bude změna velikosti cca 50*31 = 1,5GB. Toto místo musíme mít vždy k dispozici na disku a bude v podstatě nevyužité. Jen se jednou měsíčně naplní a opět uvolní. Současně s tím se nám prodlužuje čas tvorby zálohy a následného kopírování souboru na zálohovací místo.
Shrink databáze
Promazání nepotřebných záznamů zmenší velikost databáze. Nezmenší se však vlastní soubory. Proto je potřeba ještě spustit v databázi příkaz Shrink. Tento příkaz systém ObjectGears přímo nepodporuje, ale můžeme to obejít. K jobu přidáme další krok, ve kterém spustíme databázový příkaz, který shrink provede:
OG.Sql.RunSql('shrink …');
Práva pro nastavení logů
Pro nastavení mazání systémových logů musí být uživatel v roli administrátor. Pro nastavení mazání tříd modelů musí být uživatel v roli administrátor nebo IT vlastník daného modelu. Uživatelům jsou nabízeny jen modely, na které má právo.