Monitoring aplikací
Základem vývoje zdravé aplikace je správné nastavení monitoringu. Alfa a omega tohoto procesu je pro nás logování.
Jedna z vestavěných knihoven Pythonu (logging) má za úkol zprostředkovat jednoduché zaznamenávání těchto zpráv (logů), které později můžeme použít jako zdroj dat při analýze aplikace.
Elementární příklad logování vypadá takto. Pomocí kódu můžeme tímto způsobem zaznamenat zprávy o procesu a aktuálním stavu během aktivního užívání aplikace.
Proč vlastně logovat?
🔵 správně napsaný log umožňuje snadné dohledání chyby a procesů, které k ní vedly
🔵 dává nám možnost sestavit analýzu užívání aplikace a různých jejích částí
Hlavní části logovacího procesu
🔵 logger - odhaluje rozhraní, které můžeme poté využít v kódu
🔵 formatter - určuje formát zprávy a potřebné parametry pro zaznamenání zprávy
🔵 handler - "posílá" zprávy (logy) do správné destinace - ukládá je do souboru, posílá je do conzole apod.
🔵 filter - umožňuje větší kontrolu nad výběrem zaznamenaných zpráv, které chceme zobrazit
Každá část je v procesu zaznamenávání a analýzy logů důležitá a je žádoucí se naučit za co jaká část zodpovídá.
Hierarchie loggerů
Loggery v python knihovně "logging" jsou uspořádané do hierarchie podle jména použitého při jejich tvorbě.
Hierarchie loggerů z této ukázky vypadá následovně:
Pokud budeme zachytávat zprávy z root loggeru, dostaneme ve výstupu:
zpráva 1
zpráva 2
zpráva 3
zpráva 4
Výstup z loggeru X bude ale jenom:
zpráva 2
zpráva 3
zpráva 4
Logger X je v hierarchii pod hlavním(root) loggerem a proto nezachytává to, co je zasíláno přímo na hlavní logger.
Z loggeru Y zachytíme jenom zprávu 3 a z loggeru Z zprávu 4, protože jsou na stejné úrovni a mají stejného "rodiče".
Úrovně vážnosti záznamů
Každá zpráva v logu může mít různé úrovně "vážnosti", což nám umožňuje filtrovat záznamy podle toho, co je zrovna potřeba.
Úrovní máme pět (někdy se počítá šest):
🔵 DEBUG (+ TRACE)
🔵 INFO
🔵 WARNING
🔵 ERROR
🔵 FATAL
Každá úroveň má svůj smysl a je na developerovi, aby správně určil vážnost záznamu.
Základní pravidla logování
1) Vždy používat logovací knihovnu daného jazyka - (pro nás python - logging lib, js - dev console, node.js - Winston), nikdy si nepsát vlastní knihovnu
2) Logovat na správném levelu - velmi ulehčuje práci s daty
3) Logovat do více kategorií/loggerů - podle kontextu/části aplikace
4) Psát užitečné zprávy bez zbytečných informací
5) Používat angličtinu - zamezuje problémům s encodingem souborů (standardní EN je ASCII only) a problémům s jazykovou bariérou
Proč je logování důležité?
Uchovávat záznamy o chodu aplikace může být výhodné kvůli mnoha věcem, mezi ty hlavní patří:
🔵 kontrola pohybu dat na aplikaci - někdy je vyžadována zákony daného státu / EU
🔵 diagnostika výkonu aplikace
🔵 statistika využívání různých částí