GNU/Linux >> Znalost Linux >  >> Ubuntu

Počáteční zprávy protokolu na Ubuntu 13.x?

Na Ubuntu 12.04 najdu zprávy protokolu Upstart v /var/log/syslog .

Příkazy:

# initctl log-priority info
# initctl emit hello

Protokol:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

Na Ubuntu 13.10 se zprávy nezobrazují v syslog nebo kdekoli jinde pod /var/log adresář, i když příkazy jako logger hello pracovat podle očekávání. Mám je hledat někde jinde? Potřebuji někde změnit nastavení konfigurace?

Existuje otázka o chybě serveru od někoho, kdo se zdá, že má stejný problém na Ubuntu 13.04 a další zde a zde, které mohou také popisovat stejný problém. Tyto otázky bohužel nenabízejí žádné vodítko k vyřešení problému.

Nejlepší odpověď

Upravit 2016-06-02

Pokud se snažíte najít „Zprávy protokolu Upstart“ obecně, zkontrolujte /var/log/upstart/ . To je místo, kde Upstart ukládá stdout a stderr ze služeb Upstart. Díky leopdově odpovědi za upozornění.

Pokud hledáte zprávy protokolu od samotného Upstartu, které jsou nakonfigurovány pomocí initctl log-priority a vysílá je initctl emit , čtěte dál!

Krátká verze

Záznamy protokolu by se měly ve skutečnosti zobrazit v dmesg. Navzdory tomu nedělají ve výchozím nastavení se zobrazí v /var/log .

Pokud je chcete v /var/log také přidejte $KLogPermitNonKernelFacility on do konfigurace rsyslogd. Navrhuji vytvořit vlastní soubor jako /etc/rsyslog.d/60-custom.conf abyste se vyhnuli úpravám /etc/rsyslog.conf , protože to spravuje dpkg. Nyní by se zprávy Upstart měly objevit v /var/log/syslog , jakmile Upstartu nastavíte log-priority na info nebo tak.

Dlouhá verze

Vysledování mi trvalo několik dní, ale Upstart (1.5) zjevně ne log to syslog, to znamená, že nevolá funkci glibc syslog() . Místo toho se Upstart přihlásí do kruhové vyrovnávací paměti jádra, což je to, co dmesg čte. Nemyslel jsem si, že je to možné aby procesy v uživatelském prostoru zapisovaly do této vyrovnávací paměti, ale zřejmě mohou zápisem do /dev/kmsg a přesně to Upstart dělá. Takže to je první část skládačky.

Druhá část je, že existuje široce rozšířený názor, že zprávy zapsané do kruhové vyrovnávací paměti jádra jsou jádrem automaticky zkopírovány do syslogu (alespoň jsem si to vždy myslel). Ukázalo se, že to ve skutečnosti provádí démon uživatelského prostoru, tradičně klogd, který funguje v tandemu se syslogd. Je zřejmé, že rsyslogd nahrazuje syslogd, ale zjevně nahrazuje také klogd (tak nějak:viz poznámky na konci).

Třetí částí je, že zprávy zapsané do kruhové vyrovnávací paměti jádra z uživatelského prostoru ve skutečnosti vypadají jinak než zprávy zapsané z prostoru jádra:mají jiné možnosti. dmesg má několik možností, které s tím spolupracují:-x zobrazí zařízení (a prioritu), zatímco -u a -k řekněte dmesg, aby zobrazoval pouze zprávy o zařízení uživatele a zprávy o zařízení jádra.

Související:Jak zabránit Unity, aby si pamatovala historii vyhledávání?

Nyní je klíčová věc:ve výchozím nastavení rsyslogd ignoruje zprávy s nekernelovým zařízením, když čte zprávy z kruhové vyrovnávací paměti jádra. Relevantní možnost konfigurace je $KLogPermitNonKernelFacility , která je ve výchozím nastavení vypnutá a je třeba ji zapnout, pokud chcete, aby rsyslogd tyto zprávy zpracovával. Všimněte si, že zbytek konfigurace rsyslogd bude považovat všechny zprávy z kruhové vyrovnávací paměti jádra za zprávy obsahující kern zařízení, bez ohledu na to, jaké zařízení měli ve vyrovnávací paměti jádra.

Další informace

syslog

Kód může zapisovat do syslog voláním funkce glibc syslog() , popsané v man 3 syslog . Tyto funkce zřejmě zapisují do /dev/log . Kód lze číst ze syslog čtením /dev/log , a to je to, co syslogd a jeho náhrady ano. rsyslogd čte /dev/log pomocí jeho imuxsock vstupní modul.

Kruhová vyrovnávací paměť jádra

Prostor jádra zapisuje do této vyrovnávací paměti voláním funkce jádra printk() , takže se tomu někdy říká printk buffer. Uživatelský prostor do něj může zapisovat zápisem do /dev/kmsg . Uživatelský prostor může číst z této vyrovnávací paměti několika způsoby:může číst z /proc/kmsg (co dmesg dělá ve výchozím nastavení), nebo může číst z /dev/kmsg , nebo může zavolat systémové volání syslog() , který je popsán v man 2 syslog a je úplně jiný z funkce glibc syslog() popsané v man 3 syslog . glibc ve skutečnosti poskytuje obal pro systémové volání syslog() s názvem klogctl() , abychom pomohli zmírnit tento zmatek.

Tradičně klogd čte z jednoho z těchto rozhraní a pak volá funkci glibc syslog() zkopírujte je do syslogu. rsyslogd čte jedno z těchto rozhraní prostřednictvím svého imklog vstupní modul, ale AFAIK se neobtěžuje voláním glibc syslog() , což je důvod, proč to není přesně jako klogd; pouze zpracovává výstup imklog stejně jako zpracovává výstup z jakéhokoli jiného vstupního modulu. Je zde přidáno upozornění, že všechny imklog výstup má kern zařízení bez ohledu na zprávy zařízení v kruhové vyrovnávací paměti jádra.

Odkazy

  • http://upstart.ubuntu.com/cookbook/#initctl-log-priority (nesprávně uvádí, že Upstart se zapisuje do syslog)
  • https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg
  • http://www.gnu.org/software/libc/manual/html_node/Overview-of-Syslog.html
  • http://www.rsyslog.com/doc/v5-stable/configuration/modules/imklog.html (Všimněte si, že toto je pro verzi 5 používanou v Ubuntu 12.04. Tyto možnosti jsou v posledních verzích rsyslog považovány za zastaralé)

Ubuntu
  1. Aktualizujte verzi jádra na serverech Ubuntu

  2. Linux Kernel Live Patching na Ubuntu 20.04 LTS

  3. Rozdíl mezi /var/log/messages, /var/log/syslog a /var/log/kern.log?

  1. Vydáno Linuxové jádro 5.13! Jak nainstalovat v Ubuntu 21.04

  2. Zaznamenat aktivitu Ssh?

  3. Auditované zprávy se zaplňují /var/log/messages

  1. Jak aktualizovat jádro Linuxu v Ubuntu

  2. Jak nastavit službu?

  3. Selhala instalace Virtualboxu 5.1 na Ubuntu 16.04?