Jako správce systému Linux kontroluji soubory protokolu je jedním z nejběžnějších úkolů, které možná budete muset provést.
Linuxové protokoly jsou zásadní:ukládají důležité informace o některých chybách, které se mohou ve vašem systému vyskytnout.
Mohou také ukládat informace o tom, kdo se pokouší získat přístup k vašemu systému, co konkrétní služba dělá nebo o selhání systému, ke kterému došlo dříve.
V důsledku toho vědět, jak najít , manipulovat a analyzovat soubory protokolu je určitě dovednost, kterou musíte ovládat.
V tomto tutoriálu odhalíme vše, co je třeba vědět o Linux logování.
Bude vám představen způsob architektury protokolování v systémech Linux a jak se různá virtuální zařízení a procesy vzájemně ovlivňují při protokolování záznamů.
Budeme se hlouběji zabývat protokolem Syslog a jak to přešlo ze syslogd (na starých systémech) na journalctl poháněné systemd na novějších systémech.
Typy protokolování Linux
Když se zabýváte protokolováním Linuxu, existuje několik základů, kterým musíte porozumět, než zadáte jakékoli příkazy do terminálu.
V systému Linux máte dva typy mechanismů protokolování:
- Protokolování jádra :související s chybami, varováními nebo informacemi, které může zapsat vaše jádro;
- Protokolování uživatelů :propojeno s uživatelským prostorem, tyto položky protokolu se týkají procesů nebo služeb, které mohou běžet na hostitelském počítači.
Rozdělením protokolování do dvou kategorií v podstatě odhalujeme, že samotná paměť je v Linuxu rozdělena do dvou kategorií:uživatelský prostor a prostor jádra .
Protokolování jádra
Začněme nejprve protokolováním souvisejícím s prostorem jádra známým také jako protokolování jádra.
V prostoru jádra se protokolování provádí pomocí Kernel Ring Buffer.
Kruhová vyrovnávací paměť jádra je kruhová vyrovnávací paměť, která je první datovou strukturou ukládající zprávy protokolu při spuštění systému.
Když spouštíte svůj počítač se systémem Linux, pokud se na obrazovce zobrazují zprávy protokolu, jsou tyto zprávy uloženy v kruhové vyrovnávací paměti jádra.
Protokolování jádra se spouští před přihlášením uživatele (spravováno démonem syslog nebo rsyslog u posledních distribucí).
Kruhový buffer jádra, stejně jako všechny ostatní soubory protokolu ve vašem systému, lze zkontrolovat.
Chcete-li otevřít protokoly související s jádrem ve vašem systému, musíte použít „dmesg “.
Poznámka :tento příkaz musíte provést jako root nebo mít privilegovaná práva, abyste mohli zkontrolovat vyrovnávací paměť jádra.
$ dmesg
Jak můžete vidět, od spuštění systému až do okamžiku, kdy jste provedli příkaz, jádro sleduje všechny akce, varování nebo chyby, které se mohou v prostoru jádra vyskytnout.
Pokud má váš systém potíže s detekcí nebo připojením disku, pravděpodobně zde budete chtít zkontrolovat chyby.
Jak můžete vidět, příkaz dmesg je docela pěkné rozhraní pro zobrazení protokolů jádra, ale jak vám příkaz dmesg tyto výsledky vytiskne?
Abychom odhalili různé používané mechanismy, podívejme se, které procesy a zařízení se starají o protokolování jádra .
Interní prvky protokolování jádra
Jak jste již pravděpodobně slyšeli, v Linuxuje vše soubor.
Pokud je vše soubor, znamená to také, žezařízení jsou soubory.
V Linuxu je vyrovnávací paměť jádra zhmotněna souborem znakového zařízení v adresáři /dev a jmenuje se kmsg.
$ ls -l /dev/ | grep kmsg
Pokud bychom měli znázornit vztah mezi zařízením kmsg a kruhovou vyrovnávací pamětí jádra, znázornili bychom to takto.
Jak vidíte, zařízení kmsg jeabstrakce používá se ke čtení a zápisu do kruhové vyrovnávací paměti jádra.
V podstatě to můžete vidět jako vstupní bod pro procesy v uživatelském prostoru pro zápis do kruhové vyrovnávací paměti jádra.
Výše uvedený diagram je však neúplný, protože jádro používá jeden speciální soubor k uložení informací protokolu jádra do souboru.
Pokud bychom to měli shrnout, v podstatě bychom uvedli, že virtuální zařízení kmsg funguje jako vstupní bod pro kruhovou vyrovnávací paměť jádra, zatímco výstup tohoto procesu (řádky protokolu) jsou vytištěny do souboru /proc/kmsg.
Tento soubor lze analyzovat pouze jedním procesem, kterým je většinu času protokolovací nástroj používaný v uživatelském prostoru. Na některých distribucích to může být syslogd, ale na novějších distribucích je integrován s rsyslog.
Nástroj rsyslog má sadu vestavěných modulů, které přesměrují protokoly jádra na vyhrazené soubory v systému souborů.
Historicky byly protokoly jádra načítány démonem klogd na předchozích systémech, ale u většiny distribucí byl nahrazen rsyslog.
Na jedné straně máte protokolovací nástroje, které čtou z kruhové vyrovnávací paměti, ale také máte programy pro uživatelský prostor, které zapisují do kruhové vyrovnávací paměti:systemd (se slavným systemd-journal) například na nejnovějších distribucích.
Nyní, když víte více o protokolování jádra, pojďme se podívat, jak se protokolování provádí v uživatelském prostoru.
Protokolování na straně uživatele pomocí Syslog
Přihlašování do uživatelského prostoru je zcela odlišné od přihlašování do prostoru jádra.
Na straně uživatele je protokolování založeno na protokolu Syslog .
Syslog se standardně používá k vytváření, předávání a shromažďování protokolů vytvořených v instanci Linuxu.
Syslog definuje úrovně závažnosti i úrovně zařízení, což uživatelům pomáhá lépe porozumět protokolům vytvářeným na jejich počítačích.
Protokoly lze později analyzovat a vizualizovat na serverech označovaných jako servery Syslog.
Stručně řečeno, protokol Syslog je protokol používaný k definování formátování, odesílání a přijímání zpráv protokolu na systémech Unix.
Syslog je známý tím, že definuje formát syslog, který definuje formát, který musí aplikace používat k odesílání protokolů.
Tento formát je známý tím, že definuje dva důležité pojmy:vybavení a priority .
Vysvětlení zařízení Syslog
Stručně řečeno, úroveň zařízení se používá k určení programu nebo části systému, která vytvořila protokoly.
Ve vašem systému Linux odesílá protokoly mnoho různých nástrojů a programů. Aby bylo možné určit, který proces odeslal protokol, Syslog definuje čísla, čísla zařízení, které programy používají k odesílání protokolů Syslog.
Existuje více než 23 různých zařízení Syslog, které jsou popsány v tabulce níže.
Číselný kód | Klíčové slovo | Název zařízení |
0 | kern | Zprávy jádra |
1 | uživatel | Zprávy na uživatelské úrovni |
2 | Poštovní systém | |
3 | démon | Systémoví démoni |
4 | auth | Bezpečnostní zprávy |
5 | syslog | Zprávy Syslogd |
6 | lpr | Subsystém řádkové tiskárny |
7 | novinky | Subsystém síťových zpráv |
8 | uucp | Podsystém UUCP |
9 | cron | Démon hodin |
10 | authpriv | Bezpečnostní zprávy |
11 | ftp | Démon FTP |
12 | ntp | NTP subsystém |
13 | zabezpečení | Audit protokolu zabezpečení |
14 | konzole | Upozornění protokolu konzoly |
15 | solaris-cron | Protokoly plánování |
16–23 | local0 až local7 | Místně využívaná zařízení |
Většina těchto zařízení je vyhrazena pro systémové procesy (jako je poštovní server, pokud jej máte, nebo obslužný program cron). Některé z nich (od zařízení číslo 16 až 23) mohou být použity vlastními klienty Syslog nebo uživatelskými programy k odesílání protokolů.
Vysvětlení priorit Syslog
Úrovně závažnosti syslog se používají k tomu, jak závažná je událost protokolu, a sahají od ladění, informačních zpráv až po nouzové úrovně.
Podobně jako u úrovní zařízení Syslog jsou úrovně závažnosti rozděleny do číselných kategorií v rozsahu od 0 do 7, přičemž 0 je nejkritičtější úroveň nouzového stavu .
Opět je zde tabulka pro všechny úrovně priority dostupné v Syslog.
Zde jsou úrovně závažnosti syslog popsané v tabulce:
Hodnota | Závažnost | Klíčové slovo |
0 | Nouzový stav | emerg |
1 | Upozornění | alert |
2 | Kritické | crit |
3 | Chyba | err |
4 | Upozornění | warning |
5 | Upozornění | alert |
6 | Informační | info |
7 | Ladění | debug |
Architektura Syslog
Syslog také definuje několik technických termínů, které se používají při budování architektury logovacích systémů:
- Původce :také známý jako „klient Syslog“, původce je zodpovědný za odeslání zprávy ve formátu Syslog přes síť nebo do správné aplikace;
- Relé :přenos se používá k předávání zpráv po síti. Přenos může zprávy transformovat, aby je například obohatil (známé příklady zahrnují Logstash nebo fluentd);
- Sběratel :také známé jako „Syslog servery“, kolektory se používají k ukládání, vizualizaci a načítání protokolů z více aplikací. Kolektor může zapisovat protokoly do široké škály různých výstupů:místní soubory, databáze nebo mezipaměti.
Jak můžete vidět, protokol Syslog se řídí architekturou klient-server jsme viděli v předchozích tutoriálech.
Jeden klient Syslog vytváří zprávy a odesílá je volitelným místním nebo vzdáleným přenosům, které lze dále přenášet na servery Syslog.
Nyní, když víte, jak je architekturován protokol Syslog, co náš vlastní systém Linux?
Řídí se touto architekturou?
Linuxová architektura místního protokolování
Přihlašování do místního systému Linux se řídí přesnými principy, které jsme popsali dříve.
Bez dalších okolků, zde je způsob, jakým je protokolování architekturováno v systému Linux (v nejnovějších distribucích)
Podle výše popsané architektury originator-relay-collector v případě místního systému Linux:
- Původci jsou klientské aplikace které mohou vkládat knihovny syslog nebo journald za účelem odesílání protokolů;
- Ve výchozím nastavení nejsou lokálně implementována žádná relé;
- Sběratelé jsou rsyslog a démon journald naslouchání na předdefinovaných soketech pro příchozí protokoly.
Kde jsou tedy protokoly uloženy poté, co je obdrží sběratelé?
Umístění souboru protokolu Linux
Ve vašem systému Linux jsou protokoly uloženy ve složce /var/log adresář.
Protokoly v adresáři /var/log jsou rozděleny do funkcí Syslog, které jsme viděli dříve, za nimiž následuje přípona protokolu:auth.log, daemon.log, kern.log nebo dpkg.log.
Pokud byste si prohlédli soubor auth.log, byly by vám předloženy protokoly týkající se ověřování a autorizace ve vašem systému Linux.
Podobně soubor cron.log zobrazuje informace související se službou cron ve vašem systému.
Jak však můžete vidět z výše uvedeného diagramu, na vašem linuxovém serveru koexistují dva různé systémy protokolování:rsyslog a systemd-journal.
Koexistence Rsyslog a systemd-journal
Historicky démon byl zodpovědný za shromažďování protokolů z vašich aplikací v systému Linux.
Na mnoha starých distribucích byla tato úloha přiřazena démonovi s názvem syslogd ale v posledních distribucích byl nahrazen démonem rsyslog .
Když systemd nahradil stávající proces init v posledních distribucích, přišel s vlastním způsobem získávání a ukládání protokolů:systemd-journal.
Nyní oba systémy koexistují ale mělo se za to, že jejich koexistence je zpětně kompatibilní se způsoby, jakými bývaly protokoly architektovány v minulosti.
Hlavní rozdíl mezi rsyslog a systemd-journal je v tom, že rsyslog zachová protokoly do souborů protokolu dostupných na adrese /var/log zatímco journald nebude uchovávat data, pokud k tomu není nakonfigurován.
Umístění souborů deníku
Jak jste pochopili z poslední sekce,systemd-journal nástroj také sleduje aktivity protokolování ve vašem systému.
Některé aplikace, které jsou nakonfigurovány jako služby (například Apache HTTP Server), mohou komunikovat přímo se systemd journal.
Systemd journal ukládá protokoly centralizovaným způsobem je /run/log/journal adresář.
Soubory protokolu jsou uloženy jako binární soubory od systemd, takže soubory nebudete moci prohlížet pomocí obvyklých příkazů cat nebo less.
Místo toho chcete použít „journalctl ” za účelem kontroly souborů protokolu vytvořených systemd-journal.
$ journalctl
Existuje mnoho různých možností, které můžete použít s journalctl, ale většinou chcete zůstat u možnosti „-r“ a „-u“.
Chcete-li zobrazit nejnovější záznamy deníku, použijte „journalctl “ pomocí „-r “.
$ journalctl -r
Pokud chcete zobrazit protokoly související s konkrétní službou , použijte volbu „-u“ a zadejte název služby.
$ journalctl -u <service>
Chcete-li například zobrazit protokoly související se službou SSH, spustili byste následující příkaz
$ journalctl -u ssh
Nyní, když jste viděli, jak můžete číst konfigurační soubory, pojďme se podívat, jak můžete snadno nakonfigurovat své protokolovací nástroje.
Konfigurace protokolování Linuxu
Jak jste pravděpodobně pochopili z předchozích částí, protokolování Linuxu je založeno na dvou důležitých komponentách:rsyslog a systemd-journal.
Každý z těchto nástrojů má svůj vlastní konfigurační soubor a v následujících kapitolách uvidíme, jak je lze nakonfigurovat.
Konfigurace systémového deníku
Konfigurační soubory pro žurnál systemd jsou umístěny v /etc/systemd adresář.
$ sudo vi /etc/systemd/journald.conf
Soubor s názvem „journald.conf ” se používá k konfiguraci démona deníku v posledních distribucích.
Jednou z nejdůležitějších možností v konfiguraci deníku je „Úložiště ” parametr.
Jak bylo uvedeno výše, soubory žurnálu se ve vašem systému neuchovávají a při příštím restartu budou ztraceny.
Aby byly vaše žurnálové protokoly trvalé, nezapomeňte upravit tento parametr na „persistent“ a restartovat démona žurnálu systemd.
Chcete-li restartovat démona žurnálu, použijte příkaz „systemctl“ s volbou „restart“ a zadejte název služby.
$ sudo systemctl restart systemd-journald
V důsledku toho budou protokoly žurnálu uloženy do adresáře /var/log/journal vedle souborů protokolu rsyslog.
$ ls -l /var/log/journal
Pokud vás zajímá konfigurace systemd-journal, přečtěte si dokumentaci poskytovanou FreeDesktop.
Konfigurace Rsyslog
Na druhou stranu, službu rsyslog lze nakonfigurovat pomocí /etc/rsyslog.conf konfigurační soubor.
$ sudo vi /etc/rsyslog.conf
Jak bylo uvedeno výše, rsyslog je v podstatě kolektor Syslog, ale hlavní koncept, kterému musíte rozumět, je, že Rsyslog pracuje s moduly.
Jeho modulární architektura poskytuje zásuvné moduly, jako jsou nativní způsoby přenosu protokolů do souboru, shellu, databáze nebo soketů.
Při práci s rsyslogem jsou dvě hlavní sekce, které stojí za vaši pozornost:moduly a pravidla .
Rsyslog Moduly
Ve výchozím nastavení jsou ve vašem systému povoleny dva moduly:imuxsock (poslech na syslog socketu) a imjournal (v podstatě přeposílání protokolů žurnálu do rsyslog).
Poznámka :může být také aktivován imklog (odpovědný za shromažďování protokolů jádra).
Pravidla Rsyslog
Pravidla sekce rsyslog je pravděpodobně nejdůležitější.
Na rsyslog, ale stejné principy můžete najít na starých distribucích se systemd, sekce pravidel definuje, který protokol by měl být uložen do vašeho souborového systému v závislosti na jejich zařízení a prioritě.
Jako příklad si uveďme následující konfigurační soubor rsyslog.
První sloupec popisuje použitá pravidla:na levé straně tečky definujete zařízení a na pravé straně závažnost .
Zástupný znak „*“ znamená, že funguje pro všechny závažnosti.
V důsledku toho, pokud chcete upravit konfiguraci protokolování v pořadí, řekněte například, že vás zajímají pouze konkrétní závažnosti, toto je soubor, který byste upravili.
Nástroje pro monitorování protokolů Linux
V předchozí části jsme viděli, jak můžete snadno konfigurovat své protokolovací nástroje, ale jaké nástroje můžete použít, abyste mohli snadno číst své protokoly Linuxu?
Nejjednodušší způsob, jak číst a sledovat vaše protokoly Linuxu, je použít příkaz tail s možností „-f“ pro následování.
$ tail -f <file>
Chcete-li si například přečíst protokoly zapsané v souboru auth.log, spustili byste následující příkaz.
$ tail -f /var/log/auth.log
Dalším skvělým způsobem čtení linuxových protokolů je použití grafických aplikací, pokud používáte desktopové prostředí Linuxu.
„Protokoly ” aplikace je grafická aplikace navržená tak, aby vypisovala aplikační a systémové logy, které mohou být uloženy v různých log souborech (buď v rsyslog nebo journald).
Linuxové protokolovací nástroje
Nyní, když jste viděli, jak lze protokolování nakonfigurovat v systému Linux, pojďme se podívat na několik nástrojů, které můžete použít v případě, že chcete protokolovat zprávy.
Použití loggeru
Protokol obslužný program je pravděpodobně jedním z nejjednodušších protokolovacích klientů.
Logger se používá k odesílání zpráv protokolu do systémového protokolu a lze jej spustit pomocí následující syntaxe.
$ logger <options> <message>
Řekněme například, že chcete odeslat nouzovou zprávu z auth zařízení do vašeho nástroje rsyslog, spustili byste následující příkaz.
$ logger -p auth.emerg "Somebody tried to connect to the system"
Pokud byste si nyní prohlédli soubor /var/log/auth.log, mohli byste najít zprávu, kterou jste právě přihlásili na server rsyslog.
$ tail -n 10 /var/log/auth.log | grep --color connect
Logger je velmi užitečný při použití například ve skriptech Bash.
Co když ale chcete protokolovat soubory pomocí systemd-journal?
Pomocí systemd-cat
Abyste mohli odesílat zprávy do žurnálu systemd, musíte použít příkaz „systemd-cat“ a zadat příkaz, který chcete spustit.
$ systemd-cat <command> <arguments>
Pokud chcete odeslat výstup příkazu „ls -l“ do žurnálu, napište následující příkaz
$ systemd-cat ls -l
Je také možné posílat protokoly „prostého textu“ do žurnálu propojením příkazu echo do obslužného programu systemd-cat.
$ echo "This is a message to journald" | systemd-cat
Použití zdi
Příkaz wall nesouvisí přímo s logovacími nástroji, ale může být docela užitečný pro správu systému Linux.
Příkaz wall se používá k odesílání zpráv všem přihlášeným uživatelům.
$ wall -n <message>
Pokud byste například napsali zprávu všem přihlášeným uživatelům, abyste je informovali o příštím restartu serveru, spustili byste následující příkaz.
$ wall -n "Server reboot in five minutes, close all important applications"
Závěr
V tomto tutoriálu jste se dozvěděli více o protokolování Linuxu :jak je to postaveno a jak různé komponenty protokolování (jmenovitě rsyslog a žurnál ) interagovat spolu.
Dozvěděli jste se více o protokolu Syslog a jak lze nakonfigurovat kolektory, aby zaznamenávaly konkrétní události ve vašem systému.
Logování Linuxu je široké téma a existuje mnoho dalších témat, která můžete na toto téma prozkoumat.
Věděli jste, že můžete vytvořit centralizované systémy protokolování, abyste mohli sledovat protokoly na více počítačích?
Pokud vás zajímá centralizované protokolování, přečtěte si našeho průvodce!
Pokud vás také zajímá administrace systému Linux, máme na webu kompletní sekci věnovanou této problematice, takže se na ni určitě podívejte!