Impara Linux, 101: Log di sistema

2 xmlns=”http://www.w3.org/1999/xhtmlPanoramica

In questo tutorial, imparerai a:

  • Configurare il demone syslog
  • Conoscere le strutture standard, le priorità e le azioni
  • Configurare la rotazione dei log
  • Conoscere rsyslog e syslog-ng

Cosa sta succedendo all’interno del tuo sistema

Un sistema Linux ha molti sottosistemi e applicazioni in esecuzione. Usate i log di sistema per raccogliere dati sul vostro sistema in esecuzione dal momento in cui si avvia. A volte avete solo bisogno di sapere che tutto va bene. Altre volte si usano questi dati per l’auditing, il debug, per sapere quando un disco o un’altra risorsa sta esaurendo la sua capacità, e per molti altri scopi. Si possono raccogliere dati di log su un sistema e inoltrarli a un altro sistema per l’elaborazione. I dati di log possono essere visualizzati su un terminale, come quello dell’utente root, ma più spesso vengono salvati in file o inoltrati su socket a un server di log. Inutile dire che la registrazione è altamente configurabile.

La tradizionale struttura syslog e il suo demone syslogd forniscono questa registrazione. Al giorno d’oggi, syslog è stato integrato da altre strutture di log come rsyslog, syslog-ng e il sottosistema systemd journal. Ti presento queste strutture in questo tutorial.

Questo tutorial ti aiuta a preparare l’obiettivo 108.2 nell’argomento 108 dell’esame 102 di Linux Server Professional (LPIC-1). L’obiettivo ha un peso di 3.

Pre-requisiti

Per ottenere il massimo dai tutorial di questa serie, hai bisogno di una conoscenza di base di Linux e di un sistema Linux funzionante su cui puoi fare pratica con i comandi trattati in questo tutorial. Dovresti avere familiarità con i comandi GNU e UNIX. A volte versioni diverse di un programma formattano l’output in modo diverso, quindi i tuoi risultati potrebbero non essere sempre esattamente come quelli mostrati qui.

In questo tutorial, uso Slackware 42.2 per gli esempi di syslogd, CentOS 7 per gli esempi di rsyslogd, e Fedora 26 per gli esempi di systemd-journalctl e syslog-ng.

Il syslog tradizionale e il demone syslogd

La tradizionale funzione di log di sistema syslog su un sistema Linux fornisce il log di sistema e il trapping dei messaggi del kernel. Puoi registrare i dati sul tuo sistema locale o inviarli ad un sistema remoto. Usa il file di configurazione /etc/syslog.conf per controllare finemente il livello di registrazione. La registrazione viene eseguita dal demone syslogd, che normalmente riceve input attraverso il socket /dev/log, come mostrato nel listato 1.

Listino 1. /dev/log è un socket
$ #Slackware 42.2 $ /bin/ls -l /dev/log srw-rw-rw- 1 root root 0 Nov 19 16:35 /dev/log

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlPer la registrazione locale, il file principale è di solito /var/log/messages, ma molti altri file sono usati nella maggior parte delle installazioni, di solito situati nella directory /var/log o in una sua sottodirectory. È possibile personalizzarli ampiamente. Per esempio, potresti volere un log separato per i messaggi del sistema di posta.

Il file di configurazione syslog.conf

Il file syslog.conf è il principale file di configurazione per il demone syslogd. Le voci in syslog.conf specificano le regole di registrazione. Ogni regola ha un campo selettore e un campo azione, che sono separati da uno o più spazi o tabulazioni. Il campo selettore identifica la struttura e le priorità a cui la regola si applica, e il campo azione identifica l’azione di registrazione per la struttura e le priorità.

Le strutture definite sono auth (o security), authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, syslog, user, uucp, e local0 through local7. La parola chiave auth dovrebbe essere usata al posto di security, e la parola chiave mark è per uso interno.

Le priorità (in ordine crescente di gravità) sono:

  1. debug
  2. info
  3. notice
  4. warning (o warn)
  5. err (o error)
  6. crit
  7. alert
  8. emerg (o panic)

Le parole chiave tra parentesi (warn, error e panic) sono ora deprecate.

Il comportamento predefinito è quello di agire per il livello specificato e per tutti i livelli superiori, sebbene sia possibile limitare la registrazione a livelli specifici. Ogni selettore consiste in una struttura e una priorità separate da un punto. Più strutture per una data azione possono essere specificate separandole con una virgola. Coppie multiple struttura/priorità per una data azione possono essere specificate separandole con un punto e virgola. Il listato 2 mostra un esempio di un semplice file syslog.conf.

Lista 2. Esempio di syslog.conf
#Log anything 'warn' or higher. #Exclude authpriv, cron, mail, and news. These are logged elsewhere. #Don't log private authentication messages! *.warn;\ authpriv.none;cron.none;mail.none;news.none -/var/log/syslog #The authpriv file has restricted access. authpriv.* /var/log/secure #Log all the mail messages in one place. mail.* -/var/log/maillog #Log cron stuff cron.* /var/log/cron #Everybody gets emergency messages *.emerg * #Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlNote:

  • Come per molti file di configurazione, le linee che iniziano con # e quelle vuote vengono ignorate.
  • Un * può essere usato per riferirsi a tutte le strutture o a tutte le priorità.
  • La parola chiave di priorità speciale none indica che nessun logging per questa struttura dovrebbe essere fatto con questa azione.
  • Il trattino prima del nome di un file (come -/var/log/maillog, in questo esempio) indica che il file di log non dovrebbe essere sincronizzato dopo ogni scrittura. Potresti perdere informazioni dopo un crash di sistema, ma potresti guadagnare in prestazioni facendo così.

Le azioni sono genericamente indicate come “file di log”, anche se non devono essere necessariamente file reali. La tabella 1 descrive i possibili logfile.

Tabella 1. Azioni in syslog.conf
Azione Scopo
File regolare Specificare il percorso completo, che inizia con una barra (/). Fissalo con un trattino (-) per omettere la sincronizzazione del file dopo ogni voce di registro. Questo può causare la perdita di informazioni in caso di crash, ma può migliorare le prestazioni.
Tubi nominati Utilizzare un first-in first-out (FIFO) o una named pipe come destinazione per i messaggi di log includendo un simbolo di pipe (|) prima del nome del file. Devi creare il FIFO usando il comando mkfifo prima di avviare (o riavviare) syslogd. I FIFO sono talvolta utilizzati per il debug.
Terminale o console Invia i messaggi di log ad un terminale come /dev/console.
Macchina remota Inoltra i messaggi ad un altro host mettendo un segno at (@) prima del nome dell’host. Si noti che i messaggi non vengono inoltrati dall’host ricevente.
Lista di utenti Utilizzare una lista separata da virgole di utenti per ricevere i messaggi (se l’utente è connesso). L’utente root è spesso incluso qui.
Tutti gli utenti connessi Specifica un asterisco (*) per far notificare tutti gli utenti connessi utilizzando il comando wall.

Fissare una priorità con ! per indicare che l’azione non deve essere applicata a questo livello e a quelli superiori. Allo stesso modo, prefissa una priorità con = per indicare che la regola si applica solo a questo livello o con != per indicare che la regola si applica a tutti tranne che a questo livello. Il listato 3 mostra alcuni esempi, e la pagina man di syslog.conf ha molti altri esempi.

Lista 3. Ulteriori esempi di syslog.conf
#Kernel messages are first, stored in the kernel#file, critical messages and higher ones also go#to another host and to the console#kern.* /var/adm/kernelkern.crit @log‑serverkern.crit /dev/consolekern.info;kern.!err /var/adm/kernel‑info#Store all mail messages except info priority in /var/log/mail. mail.*;mail.!=info /var/log/mail

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlIl comando syslogd avvia il demone syslogd. Ha un numero di opzioni, tra cui -f per specificare un diverso file di configurazione, e -a per ulteriori socket da ascoltare. Il demone risponde a diversi segnali, incluso SIGHUP che lo fa reinizializzare. Vedere le pagine man o info per maggiori dettagli sull’esecuzione e l’interazione con il demone syslogd.

L’elenco 4 mostra alcuni dei messaggi che potrebbero essere registrati in /var/log/messages usando parametri di configurazione di syslogd come quelli del listato 2.

Lista 4. Esempio di messaggi registrati in /var/log/messages
root@attic4‑sl42:~#tail ‑n 20 /var/log/messages Nov 19 21:39:57 attic4‑sl42 kernel: usb 1‑1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3Nov 19 21:39:57 attic4‑sl42 kernel: usb 1‑1.1: Product: USB DISK 2.0Nov 19 21:39:57 attic4‑sl42 kernel: usb 1‑1.1: Manufacturer: Nov 19 21:39:57 attic4‑sl42 kernel: usb 1‑1.1: SerialNumber: 070B53DF11FC0170Nov 19 21:39:57 attic4‑sl42 kernel: usb‑storage 1‑1.1:1.0: USB Mass Storage device detectedNov 19 21:39:57 attic4‑sl42 kernel: scsi host12: usb‑storage 1‑1.1:1.0Nov 19 21:39:57 attic4‑sl42 mtp‑probe: checking bus 1, device 12: "/sys/devices/pci0000:00/0000:00:12.2/usb1/1‑1/1‑1.1" Nov 19 21:39:57 attic4‑sl42 mtp‑probe: bus: 1, device: 12 was not an MTP device Nov 19 21:39:58 attic4‑sl42 kernel: scsi 12:0:0:0: Direct‑Access USB DISK 2.0 PMAP PQ: 0 ANSI: 4Nov 19 21:39:59 attic4‑sl42 kernel: sd 12:0:0:0: 30299520 512‑byte logical blocks: (15.5 GB/14.4 GiB)Nov 19 21:39:59 attic4‑sl42 kernel: sd 12:0:0:0: Write Protect is offNov 19 21:40:00 attic4‑sl42 kernel: sdd: sdd1Nov 19 21:40:00 attic4‑sl42 kernel: sd 12:0:0:0: Attached SCSI removable diskNov 19 21:42:36 attic4‑sl42 kernel: usb 1‑1.1: reset high‑speed USB device number 12 using ehci‑pciNov 19 21:42:37 attic4‑sl42 kernel: usb 1‑1.1: reset high‑speed USB device number 12 using ehci‑pciNov 19 21:42:37 attic4‑sl42 kernel: usb 1‑1.1: reset high‑speed USB device number 12 using ehci‑pciNov 19 21:42:37 attic4‑sl42 kernel: usb 1‑1.1: reset high‑speed USB device number 12 using ehci‑pciNov 19 21:42:38 attic4‑sl42 kernel: usb 1‑1.1: USB disconnect, device number 12Nov 19 21:42:38 attic4‑sl42 kernel: <27> udevd: inotify_add_watch(6, /dev/sdd, 10) failed: No such file or directoryNov 19 21:56:48 attic4‑sl42 ‑‑ MARK ‑‑

Mostra altroMostra altra icona

2 xmlns=”http://www.w3.org/1999/xhtmlIl demone di log del kernel – klogd

Nel listato 3 hai visto alcuni modi per configurare la registrazione dei messaggi del kernel. Ma come fanno i messaggi del kernel all’avvio ad essere registrati prima ancora che un file system sia montato? Il kernel memorizza i messaggi in un ring buffer in memoria. Il demone klogd elabora questi messaggi direttamente in una console, o in un file come /var/log/dmesg, o attraverso la funzione syslog.

Nota che l’esempio nel listato 2 registra tutti i messaggi a livello di warning o superiore in /var/log/syslog. In particolare, questo include i messaggi del kernel.

Come il comando syslogd, il comando klogd ha una serie di opzioni. Vedi le pagine man o info per i dettagli. Non esiste un file di configurazione per klogd.

Puoi anche visualizzare messaggi dal ring buffer del kernel usando il comando dmesg. Il comando ha anche delle opzioni per interagire con il ring buffer, per esempio per leggere e cancellare i messaggi.

Rotate e archiviate i file di log

Con la quantità di log che è possibile, è necessario essere in grado di controllare la dimensione dei file di log. Questo viene fatto usando il comando logrotate, che di solito viene eseguito come cron job. (Vedi il nostro tutorial, Automatizzare le attività di amministrazione del sistema programmando i lavori, per maggiori informazioni sui lavori cron).

L’idea generale dietro il comando logrotate è che i file di log vengono periodicamente sottoposti a backup e viene avviato un nuovo log. Vengono mantenute diverse generazioni di log, e quando un log invecchia fino all’ultima generazione, può essere archiviato. Per esempio, potrebbe essere spedito ad un utente di archiviazione.

Utilizza il file di configurazione /etc/logrotate.conf per specificare come dovrebbero avvenire la rotazione e l’archiviazione dei log. Puoi specificare diverse frequenze, come giornaliera, settimanale o mensile, per diversi file di log, e puoi controllare il numero di generazioni da mantenere e quando o se spedire le copie ad un utente di archivio. Il listato 5 mostra un esempio di file /etc/logrotate.conf.

Elenco 5. Esempio di /etc/logrotate.conf
#/etc/logrotate.conf ##logrotate is designed to ease administration of systems that generate large #numbers of log files. It allows automatic rotation, compression, removal, and #mailing of log files. Each log file may be handled daily, weekly, monthly, or #when it grows too large. ##logrotate is normally run daily from root's crontab. ##For more details, see "man logrotate". #rotate log files weekly: weekly #keep 4 weeks worth of backlogs: rotate 4 #create new (empty) log files after rotating old ones: create #uncomment if you want to use the date as a suffix of the rotated file #dateext #uncomment this if you want your log files compressed: #compress #some packages install log rotation information in this directory: include /etc/logrotate.d #Rotate /var/log/wtmp: /var/log/wtmp { missingok monthly create 0664 root utmp minsize 1M rotate 1 } #Rotate /var/log/btmp: /var/log/btmp { missingok monthly create 0600 root root rotate 1 } #Note that /var/log/lastlog is not rotated. This is intentional, and it should #not be. The lastlog file is a database, and is also a sparse file that takes #up much less space on the drive than it appears. #system-specific logs may be also be configured below:

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlIl file logrotate.conf ha opzioni globali all’inizio. Queste sono le opzioni predefinite se non viene specificato nulla di più specifico altrove. In questo esempio, i file di log vengono ruotati settimanalmente e vengono conservati quattro settimane di backup. Una volta che un file di log viene ruotato, ne viene creato automaticamente uno nuovo al posto di quello vecchio. Nota che il file logrotate.conf può includere specifiche da altri file. Qui, tutti i file in /etc/logrotate.d sono inclusi.

Questo esempio include anche regole specifiche per /var/log/wtmp e /var/log/btmp, che sono ruotati mensilmente. Nessun messaggio di errore viene emesso se i file mancano. Viene creato un nuovo file e viene mantenuto solo un backup. L’accesso a questi file è anche limitato dall’impostazione dei permessi.

Nota: I file /var/log/wtmp e /var/log/btmp registrano rispettivamente i tentativi di login riusciti e non riusciti. A differenza della maggior parte dei file di log, questi non sono file di testo chiaro. Puoi esaminarli usando i comandi last o lastb. Vedi le pagine man di questi comandi per i dettagli.

In questo esempio, quando un backup raggiunge l’ultima generazione, viene cancellato perché non c’è nessuna specifica su cos’altro farne.

Puoi fare il backup dei file di log quando raggiungono una dimensione specifica. Si possono anche scrivere comandi da eseguire prima o dopo l’operazione di backup. Il listato 6 mostra un esempio più complesso.

Il listato 6. Un altro esempio di configurazione di logrotate
/var/log/messages { rotate 5 mail logsave@log-server size 100k postrotate /usr/bin/killall -HUP syslogd endscript }

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlNel listato 6, /var/log/messages viene ruotato dopo aver raggiunto i 100 KB di dimensione. Vengono mantenuti cinque file di backup, e quando il backup più vecchio invecchia, viene inviato a logsave@log-server. Il postrotate introduce uno script che riavvia il demone syslogd al termine della rotazione, inviandogli il segnale HUP. L’istruzione endscript è richiesta per terminare lo script ed è anche richiesta se è presente uno script prerotate. Vedi la pagina man di logrotate per informazioni più complete.

Come per molti file di configurazione di questo tipo, alcuni programmi forniscono una configurazione aggiuntiva, di solito nella directory etc/logrotate.d. L’elenco 7 mostra i file sul mio sistema Slackware.

Lista 7. File di configurazione per logrotate
root@attic4‑sl42:~#ls /etc/logrot/etc/logrotate.conf/etc/logrotate.d:consolekit mcelog mysql.orig ulogd wpa_supplicanthttpd mysql syslog vsftpdroot@attic4‑sl42:~#cat /etc/logrotate.d/httpd/var/log/httpd/_log { rotate 10 notifempty missingok size=5M compress delaycompress sharedscripts postrotate /etc/rc.d/rc.httpd restart endscript}

Mostra altroMostra altra icona

2 xmlns=”http://www.w3.org/1999/xhtmlScansiona i file di log per attività degne di nota

Le voci dei file di log sono solitamente contrassegnate dall’ora e contengono l’hostname del processo di segnalazione, insieme al nome del processo. L’elenco 8 mostra alcune linee da /var/log/messages, che contengono voci da diversi programmi.

Elenco 8. Esempi di voci del file di log
Nov 19 15:48:31 attic4-sl42 kernel: EXT4-fs (sda6): re-mounted. Opts: (null) Nov 19 15:48:32 attic4-sl42 mtp-probe: checking bus 3, device 3: "/sys/devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2.1" Nov 19 15:48:32 attic4-sl42 mtp-probe: bus: 3, device: 3 was not an MTP device Nov 19 15:48:32 attic4-sl42 mtp-probe: checking bus 3, device 4: "/sys/devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2.4" Nov 19 15:48:32 attic4-sl42 mtp-probe: bus: 3, device: 4 was not an MTP device Nov 19 15:48:32 attic4-sl42 mtp-probe: checking bus 1, device 4: "/sys/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1.1" Nov 19 15:48:32 attic4-sl42 mtp-probe: bus: 1, device: 4 was not an MTP device Nov 19 15:48:36 attic4-sl42 root: /etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1 Nov 19 15:48:36 attic4-sl42 root: /etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo Nov 19 15:48:36 attic4-sl42 root: /etc/rc.d/rc.inet1: /sbin/dhcpcd -t 10 eth0 Nov 19 15:48:36 attic4-sl42 dhcpcd: eth0: adding address fe80::4c2a:3f48:e0f7:cc90 Nov 19 15:48:41 attic4-sl42 sshd: Server listening on 0.0.0.0 port 22. Nov 19 15:48:41 attic4-sl42 sshd: Server listening on :: port 22. Nov 19 15:48:41 attic4-sl42 ntpd: ntpd [email protected] Fri Jun 3 23:08: 22 UTC 2016 (1): Starting Nov 19 15:48:41 attic4-sl42 ntpd: Command line: /usr/sbin/ntpd -g -p /var /run/ntpd.pid Nov 19 15:48:41 attic4-sl42 ntpd: proto: precision = 0.230 usec (-22) Nov 19 15:48:41 attic4-sl42 ntpd: Listen and drop on 0 v6wildcard :12 3 Nov 19 15:48:41 attic4-sl42 ntpd: Listen and drop on 1 v4wildcard 0.0.0.0:123 Nov 19 15:48:41 attic4-sl42 ntpd: Listen normally on 2 lo 127.0.0.1:123 Nov 19 15:48:41 attic4-sl42 ntpd: Listen normally on 3 eth0 192.168.1.24:123 Nov 19 15:48:41 attic4-sl42 ntpd: Listen normally on 4 lo :123 Nov 19 15:48:41 attic4-sl42 ntpd: failed to init interface for address fe80::8616:f9ff:fe04:7a2a%2 Nov 19 15:48:41 attic4-sl42 ntpd: Listening on routing socket on fd #21 for interface updates Nov 19 15:48:41 attic4-sl42 acpid: starting up with netlink and the input layer Nov 19 15:48:41 attic4-sl42 acpid: 1 rule loaded Nov 19 15:48:41 attic4-sl42 acpid: waiting for events: event logging is off Nov 19 15:48:42 attic4-sl42 dbus: Activating service name='org.freedesktop.PolicyKit1' (using servicehelper) Nov 19 15:48:42 attic4-sl42 ntpd: failed to init interface for address fe80::8616:f9ff:fe04:7a2a%2

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlL’ultima riga del listato 8 mostra un errore del demone Network Time Protocol (ntpd). In questo caso, non è riuscito ad inizializzare un’interfaccia IP V6 perché questo sistema usa solo connessioni IP V4.

Puoi scansionare i file di log usando un pager, come meno, o cercare voci specifiche (come i messaggi ntpd dall’host attic4-sl42) usando grep come mostrato nel listato 9.

Lista 9. Scansione dei file di log
root@attic4-sl42:~#grep "attic4-sl42 ntpd" /var/log/messages | tail -9 Nov 19 21:17:12 attic4-sl42 ntpd: Command line: /usr/sbin/ntpd -g -p /var/run/ntpd.pid Nov 19 21:17:12 attic4-sl42 ntpd: proto: precision = 0.220 usec (-22) Nov 19 21:17:13 attic4-sl42 ntpd: Listen and drop on 0 v6wildcard :123 Nov 19 21:17:13 attic4-sl42 ntpd: Listen and drop on 1 v4wildcard 0.0.0.0:123 Nov 19 21:17:13 attic4-sl42 ntpd: Listen normally on 2 lo 127.0.0.1:123 Nov 19 21:17:13 attic4-sl42 ntpd: Listen normally on 3 eth0 192.168.1.24:123 Nov 19 21:17:13 attic4-sl42 ntpd: Listen normally on 4 lo :123 Nov 19 21:17:13 attic4-sl42 ntpd: Listen normally on 5 eth0 :123 Nov 19 21:17:13 attic4-sl42 ntpd: Listening on routing socket on fd #22 for interface updates

Mostra altroMostra altra icona

2 xmlns=”http://www.w3.org/1999/xhtmlMonitorare i file di log

Occasione potrebbe essere necessario monitorare i file di log per eventi. Per esempio, si potrebbe cercare di catturare un evento che si verifica raramente nel momento in cui accade. In tal caso, puoi usare il comando tail con l’opzione -f per seguire il file di log. Il listato 10 mostra un esempio.

Lista 10. Seguire gli aggiornamenti dei file di log
root@attic4-sl42:~#tail -n 1 -f /var/log/messages Nov 20 09:24:58 attic4-sl42 kernel: sd 15:0:0:0: Attached SCSI removable disk Nov 20 09:26:23 attic4-sl42 kernel: usb 3-2.4: USB disconnect, device number 5 Nov 20 09:27:13 attic4-sl42 sshd: Accepted password for ian from 192.168.1.40 port 58184 ssh2 Nov 20 09:29:08 attic4-sl42 kernel: usb 3-2.4: new low-speed USB device number 6 using ohci-pci Nov 20 09:29:08 attic4-sl42 kernel: usb 3-2.4: New USB device found, idVendor=046d, idProduct=c50e Nov 20 09:29:08 attic4-sl42 kernel: usb 3-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Nov 20 09:29:08 attic4-sl42 kernel: usb 3-2.4: Product: USB Receiver Nov 20 09:29:08 attic4-sl42 kernel: usb 3-2.4: Manufacturer: Logitech Nov 20 09:29:08 attic4-sl42 kernel: input: Logitech USB Receiver as /devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2.4/3-2.4:1.0/0003:046D:C50E.0004/input/input19 Nov 20 09:29:08 attic4-sl42 kernel: hid-generic 0003:046D:C50E.0004: input,hidraw1: USB HID v1.11 Mouse on usb-0000:00:12.0-2.4/input0 Nov 20 09:29:08 attic4-sl42 mtp-probe: checking bus 3, device 6: "/sys/devices/pci0000:00/0000:00:12.0/usb3/3-2/3-2.4" Nov 20 09:29:08 attic4-sl42 mtp-probe: bus: 3, device: 6 was not an MTP device

Mostra altroMostra altra icona

2 xmlns=”http://www.w3.org/1999/xhtmlRintracciare i problemi riportati nei file di log

Quando si trovano problemi nei file di log, annotare il tempo, il nome dell’host e il processo che ha generato il problema. Se il messaggio identifica il problema in modo abbastanza specifico da permettervi di risolverlo, avete finito. In caso contrario, potrebbe essere necessario aggiornare syslog.conf per specificare che più messaggi siano registrati per la struttura appropriata. Per esempio, potresti aver bisogno di mostrare messaggi informativi invece di messaggi di avvertimento o anche messaggi a livello di debug. La tua applicazione potrebbe avere strutture aggiuntive che puoi usare.

Infine, se hai bisogno di mettere dei segni nel file di log per aiutarti a sapere quali messaggi sono stati registrati in quale fase della tua attività di debug, puoi usare il comando logger da una finestra di terminale o da uno script di shell per inviare un messaggio di tua scelta al demone syslogd per la registrazione secondo le regole in syslog.conf.

Utilizzare rsyslogd

Rsyslog è il sistema auto-descritto veloce come un razzo per l’elaborazione dei log. È compatibile con syslog nel senso che può elaborare configurazioni compatibili con syslog e anche gestire la chiamata syslog per le informazioni di log. Fornisce anche diversi miglioramenti che non sono compatibili all’indietro. In particolare, supporta protocolli di log aggiuntivi e può registrare su database, come MySQL o PostgreSQL, così come su file. È possibile filtrare qualsiasi parte di un messaggio syslog e configurare completamente il formato di output.

Le tradizionali pagine man e info forniscono informazioni di base su rsyslog. Tuttavia, c’è molta più documentazione fornita in formato HTML nella directory doc del tuo sistema. Potrebbe essere necessario installare il pacchetto rsyslog-doc se non è stato installato nel tuo sistema. La radice dell’albero HTML è in /usr/share/doc/rsyslog-8.24.0/html/index.html. La posizione potrebbe essere diversa nel tuo sistema.

Il programma rsyslog funziona come un demone, simile a syslogd. Il file di configurazione predefinito è rsyslog.conf.

Lista 11. Un file di configurazione rsyslog.conf
$ cat /etc/rsyslog.conf #rsyslog configuration file#For more information see /usr/share/doc/rsyslog‑*/rsyslog_conf.html#If you experience problems, see https://www.rsyslog.com/doc/v8-stable/troubleshooting/index.html####MODULES #####The imjournal module bellow is now used as a message source instead of imuxsock.$ModLoad imuxsock #provides support for local system logging (e.g. via logger command)$ModLoad imjournal #provides access to the systemd journal#$ModLoad imklog #reads kernel messages (the same are read from journald)#$ModLoad immark #provides ‑‑MARK‑‑ message capability#Provides UDP syslog reception#$ModLoad imudp#$UDPServerRun 514#Provides TCP syslog reception#$ModLoad imtcp#$InputTCPServerRun 514####GLOBAL DIRECTIVES #####Where to place auxiliary files$WorkDirectory /var/lib/rsyslog#Use default timestamp format$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat#File syncing capability is disabled by default. This feature is usually not required,#not useful and an extreme performance hit#$ActionFileEnableSync on#Include all config files in /etc/rsyslog.d/$IncludeConfig /etc/rsyslog.d/.conf#Turn off message reception via local log socket;#local messages are retrieved through imjournal now.$OmitLocalLogging on#File to store the position in the journal$IMJournalStateFile imjournal.state####RULES #####Log all kernel messages to the console.#Logging much else clutters up the screen.#kern./dev/console#Log anything (except mail) of level info or higher.#Don't log private authentication messages!.info;mail.none;authpriv.none;cron.none /var/log/messages#The authpriv file has restricted access.authpriv./var/log/secure#Log all the mail messages in one place.mail.‑/var/log/maillog#Log cron stuffcron./var/log/cron#Everybody gets emergency messages.emerg :omusrmsg:#Save news errors of level crit and higher in a special file.uucp,news.crit /var/log/spooler#Save boot messages also to boot.loglocal7./var/log/boot.log####begin forwarding rule ####The statement between the begin ... end define a SINGLE forwarding#rule. They belong together, do NOT split them. If you create multiple#forwarding rules, duplicate the whole block!#Remote Logging (we use TCP for reliable delivery)##An on‑disk queue is created for this action. If the remote host is#down, messages are spooled to disk and sent when it is up again.#$ActionQueueFileName fwdRule1 #unique name prefix for spool files#$ActionQueueMaxDiskSpace 1g #1gb space limit (use as much as possible)#$ActionQueueSaveOnShutdown on #save messages to disk on shutdown#$ActionQueueType LinkedList #run asynchronously#$ActionResumeRetryCount ‑1 #infinite retries if host is down#remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional#.*` remote‑host:514####end of the forwarding rule ###

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlRiconoscerete le voci familiari di syslog.conf al centro del file, circondate da altre cose che la struttura rsyslog capisce. Vedi le pagine man o info o la documentazione HTML per maggiori dettagli.

Puoi usare logrotate con i file creati da rsyslogd, sebbene i database SQL potrebbero richiedere uno scripting o altri strumenti. Allo stesso modo, il comando logger funziona ancora per mettere il proprio marchio nel log.

Usare il servizio systemd journal

Gli esempi del servizio systemd journal in questa sezione provengono da Fedora 26.

Il programma systemd-journald è un demone di servizio di sistema che raccoglie e memorizza i dati di log. Crea e mantiene diari strutturati e indicizzati basati sulle informazioni di log ricevute dalle solite fonti di syslog e sui messaggi di log strutturati usando un’API nativa per i diari.

Il solito socket /dev/log è un collegamento a /run/systemd/journal/dev-log come mostrato nel listato 12.

Lista 12. I socket dev/log e /run/systemd/journal/dev-log
#ls ‑l /dev/loglrwxrwxrwx. 1 root root 28 Nov 20 23:43 /dev/log ‑> /run/systemd/journal/dev‑log#ls ‑l /run/systemd/journal/dev‑logsrw‑rw‑rw‑. 1 root root 0 Nov 20 23:43 /run/systemd/journal/dev‑log

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlIl systemd-journald daemon ascolta sui socket e su altre entità del file system, incluso /dev/kmsg, /dev/log, /run/systemd/journal/dev-log, /run/systemd/journal/socket, e /run/systemd/journal/stdout. Può anche ascoltare gli eventi di audit usando netlink, che trasferisce le informazioni del kernel allo spazio utente usando i socket.

La maggior parte dei dati di log è testuale, ma sono ammessi dati binari, teoricamente fino a 2^64-1 byte di dimensione. Il giornale memorizza i dati di log in /run/log/journal/ per impostazione predefinita. Il file system /run/ è volatile, quindi i dati di log vengono persi quando il sistema si riavvia. Per rendere i dati persistenti, si crea /var/log/journal/ e systemd-journald memorizzerà i dati lì.

Come per altri sistemi di log, c’è un file di configurazione. Per impostazione predefinita, è /etc/systemd/journald.conf. Molte opzioni sono compilate in modo predefinito, quindi la maggior parte delle opzioni nel file di configurazione sono inizialmente commentate come mostrato nel listato 13. Togli i commenti a quelle che vuoi cambiare. Come al solito file di configurazione aggiuntivi possono essere collocati nella directory journald.conf.d. I pacchetti dovrebbero installare le loro informazioni di configurazione del journal in /usr/lib/systemd/*.conf.d/.

Lista 13. Esempio iniziale di /etc/systemd/journald.conf
# This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.##Entries in this file show the compile time defaults.#You can change settings by editing this file.#Defaults can be restored by simply deleting this file.##See journald.conf(5) for details.#Storage=auto#Compress=yes#Seal=yes#SplitMode=uid#SyncIntervalSec=5m#RateLimitIntervalSec=30s#RateLimitBurst=1000#SystemMaxUse=#SystemKeepFree=#SystemMaxFileSize=#SystemMaxFiles=100#RuntimeMaxUse=#RuntimeKeepFree=#RuntimeMaxFileSize=#RuntimeMaxFiles=100#MaxRetentionSec=#MaxFileSec=1month#ForwardToSyslog=no#ForwardToKMsg=no#ForwardToConsole=no#ForwardToWall=yes#TTYPath=/dev/console#MaxLevelStore=debug#MaxLevelSyslog=debug#MaxLevelKMsg=notice#MaxLevelConsole=info#MaxLevelWall=emerg

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlUtilizzare le pagine man o info per journald.conf per saperne di più sulle impostazioni di configurazione supportate.

Utilizzare il comando journalctl per visualizzare le informazioni registrate. Il listato 14 mostra come visualizzare le ultime 10 righe di dati registrati e poi usare l’opzione -f per seguire, o visualizzare continuamente, le nuove righe quando vengono aggiunte. Usa l’opzione --rotate per ruotare i file del diario.

Lista 14. Usare journalctl per visualizzare o seguire i messaggi di log
#journalctl ‑n 10 ‑f‑‑ Logs begin at Mon 2007‑07‑09 22:14:00 EDT. ‑‑Nov 21 10:24:47 atticf26 dbus‑daemon: Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus‑org.freedesktop.nm‑dispatcher.service' requested by ':1.9' (uid=0 pid=650 comm="/usr/sbin/NetworkManager ‑‑no‑daemon " label="system_u:system_r:NetworkManager_t:s0")Nov 21 10:24:47 atticf26 systemd: Starting Network Manager Script Dispatcher Service...Nov 21 10:24:47 atticf26 audit: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=NetworkManager‑dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'Nov 21 10:24:47 atticf26 dbus‑daemon: Successfully activated service 'org.freedesktop.nm_dispatcher'Nov 21 10:24:47 atticf26 systemd: Started Network Manager Script Dispatcher Service.Nov 21 10:24:47 atticf26 nm‑dispatcher: req:1 'connectivity‑change': new request (5 scripts)Nov 21 10:24:47 atticf26 nm‑dispatcher: req:1 'connectivity‑change': start running ordered scripts...Nov 21 10:24:48 atticf26 gnome‑software‑service.desktop: 15:24:48:0034 Gs failed to call gs_plugin_app_install on packagekit: do not know how to install app in state queuedNov 21 10:24:52 atticf26 dhclient: DHCPDISCOVER on enp4s0 to 255.255.255.255 port 67 interval 15 (xid=0x36565033)Nov 21 10:24:57 atticf26 audit: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=NetworkManager‑dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'Nov 21 10:25:07 atticf26 dhclient: DHCPDISCOVER on enp4s0 to 255.255.255.255 port 67 interval 14 (xid=0x36565033)Nov 21 10:25:21 atticf26 dhclient: DHCPDISCOVER on enp4s0 to 255.255.255.255 port 67 interval 17 (xid=0x36565033)Nov 21 10:25:22 atticf26 NetworkManager: <warn> dhcp4 (enp4s0): request timed outNov 21 10:25:22 atticf26 NetworkManager: <info> dhcp4 (enp4s0): state changed unknown ‑> timeoutNov 21 10:25:22 atticf26 NetworkManager: <info> dhcp4 (enp4s0): canceled DHCP transaction, DHCP client pid 7110Nov 21 10:25:22 atticf26 NetworkManager: <info> dhcp4 (enp4s0): state changed timeout ‑> doneNov 21 10:25:22 atticf26 NetworkManager: <info> device (enp4s0): state change: ip‑config ‑> failed (reason 'ip‑config‑unavailable', internal state 'managed')Nov 21 10:25:22 atticf26 NetworkManager: <warn> device (enp4s0): Activation: failed for connection 'enp3s0'Nov 21 10:25:22 atticf26 NetworkManager: <info> device (enp4s0): state change: failed ‑> disconnected (reason 'none', internal state 'managed')...Nov 21 10:26:37 atticf26 NetworkManager: <info> device (enp4s0): state change: ip‑config ‑> deactivating (reason 'user‑requested', internal state 'managed')Nov 21 10:26:37 atticf26 NetworkManager: <info> audit: op="device‑disconnect" interface="enp4s0" ifindex=3 pid=7167 uid=1000 result="success"Nov 21 10:26:37 atticf26 NetworkManager: <info> device (enp4s0): state change: deactivating ‑> disconnected (reason 'user‑requested', internal state 'managed')Nov 21 10:26:37 atticf26 gnome‑software‑service.desktop: 15:26:37:0783 Gs failed to call gs_plugin_app_install on packagekit: do not know how to install app in state queuedNov 21 10:26:37 atticf26 avahi‑daemon: Withdrawing address record for fe80::3fd7:76aa:e99d:da5d on enp4s0.Nov 21 10:26:37 atticf26 avahi‑daemon: Leaving mDNS multicast group on interface enp4s0.IPv6 with address fe80::3fd7:76aa:e99d:da5d.Nov 21 10:26:37 atticf26 avahi‑daemon: Interface enp4s0.IPv6 no longer relevant for mDNS.Nov 21 10:26:37 atticf26 gnome‑software‑service.desktop: 15:26:37:0787 Gs failed to call gs_plugin_app_install on packagekit: do not know how to install app in state queuedNov 21 10:26:37 atticf26 NetworkManager: <info> dhcp4 (enp4s0): canceled DHCP transaction, DHCP client pid 7179Nov 21 10:26:37 atticf26 NetworkManager: <info> dhcp4 (enp4s0): state changed unknown ‑> doneNov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=filter family=2 entries=99Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=nat family=2 entries=59Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=mangle family=2 entries=42Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=raw family=2 entries=30Nov 21 10:26:37 atticf26 dbus‑daemon: Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus‑org.freedesktop.nm‑dispatcher.service' requested by ':1.9' (uid=0 pid=650 comm="/usr/sbin/NetworkManager ‑‑no‑daemon " label="system_u:system_r:NetworkManager_t:s0")Nov 21 10:26:37 atticf26 systemd: Starting Network Manager Script Dispatcher Service...Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=filter family=10 entries=90Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=nat family=10 entries=54Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=mangle family=10 entries=41Nov 21 10:26:37 atticf26 audit: NETFILTER_CFG table=raw family=10 entries=31Nov 21 10:26:37 atticf26 dbus‑daemon: Successfully activated service 'org.freedesktop.nm_dispatcher'Nov 21 10:26:37 atticf26 audit: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=NetworkManager‑dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'Nov 21 10:26:37 atticf26 nm‑dispatcher: req:1 'down' : new request (5 scripts)Nov 21 10:26:37 atticf26 systemd: Started Network Manager Script Dispatcher Service.Nov 21 10:26:37 atticf26 nm‑dispatcher: req:1 'down' : start running ordered scripts...Nov 21 10:26:38 atticf26 gnome‑software‑service.desktop: 15:26:38:0787 Gs failed to call gs_plugin_app_install on packagekit: do not know how to install app in state queuedNov 21 10:26:48 atticf26 audit: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=NetworkManager‑dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'Nov 21 10:28:35 atticf26 cupsd: REQUEST localhost ‑ ‑ "POST / HTTP/1.1" 200 182 Renew‑Subscription successful‑ok

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlUtilizza il comando systemctl per visualizzare informazioni su, interagire o controllare il demone e le unità correlate. Il listato 15 mostra un esempio.

Lista 15. Utilizzo del comando systemctl
#systemctl list‑units "journal" ‑‑no‑pagerUNIT LOAD ACTIVE SUB DESCRIPTION abrt‑journal‑core.service loaded active running Creates ABRT problems frosystemd‑journal‑flush.service loaded active exited Flush Journal to Persistesystemd‑journald.service loaded active running Journal Service systemd‑journald‑audit.socket loaded active running Journal Audit Socket systemd‑journald‑dev‑log.socket loaded active running Journal Socket (/dev/log)systemd‑journald.socket loaded active running Journal Socket LOAD = Reflects whether the unit definition was properly loaded.ACTIVE = The high‑level unit activation state, i.e. generalization of SUB.SUB = The low‑level unit activation state, values depend on unit type.6 loaded units listed. Pass ‑‑all to see loaded but inactive units, too.To show all installed unit files use 'systemctl list‑unit‑files'.

Mostra altroMostra altra icona

2 xmlns=”http://www.w3.org/1999/xhtmlUsare syslog-ng

Syslog-ng si descrive come “un demone di log avanzato, che supporta una vasta gamma di metodi di input e output: syslog, testo non strutturato, accodamento, SQL & NoSQL.” Supporta i protocolli syslog legacy e migliorati e aggiunge il supporto per i formati di messaggi JavaScript Object Notation (JSON) e journald. Syslog-ng supporta ampie capacità per filtrare l’input e formattare l’output.

Una volta installato, ci sono informazioni di base nelle pagine man e info. Tuttavia, probabilmente vorrete usare “The syslog-ng Open Source Edition Administrator Guide”, che è disponibile sia in formato HTML che PDF. (Vedi risorse a destra per maggiori informazioni).

Il file di configurazione predefinito è /etc/syslog-ng/syslog-ng.conf. Un esempio è mostrato nel listato 16. Altri file di configurazione possono essere situati nella directory /etc/syslog-ng/conf.d.

Listing 16. Esempio di syslog-ng.conf
@version:3.9@include "scl.conf"#syslog‑ng configuration file.##This should behave pretty much like the original syslog on RedHat. But#it could be configured a lot smarter.##See syslog‑ng(8) and syslog‑ng.conf(5) for more information.##Note: it also sources additional configuration files (*.conf)# located in /etc/syslog‑ng/conf.d/options { flush_lines (0); time_reopen (10); log_fifo_size (1000); chain_hostnames (off); use_dns (no); use_fqdn (no); create_dirs (no); keep_hostname (yes);};source s_sys { system(); internal(); #udp(ip(0.0.0.0) port(514));};destination d_cons { file("/dev/console"); };destination d_mesg { file("/var/log/messages"); };destination d_auth { file("/var/log/secure"); };destination d_mail { file("/var/log/maillog" flush_lines(10)); };destination d_spol { file("/var/log/spooler"); };destination d_boot { file("/var/log/boot.log"); };destination d_cron { file("/var/log/cron"); };destination d_kern { file("/var/log/kern"); };destination d_mlal { usertty(""); };filter f_kernel { facility(kern); };filter f_default { level(info..emerg) and not (facility(mail) or facility(authpriv) or facility(cron)); };filter f_auth { facility(authpriv); };filter f_mail { facility(mail); };filter f_emergency { level(emerg); };filter f_news { facility(uucp) or (facility(news) and level(crit..emerg)); };filter f_boot { facility(local7); };filter f_cron { facility(cron); };#log { source(s_sys); filter(f_kernel); destination(d_cons); };log { source(s_sys); filter(f_kernel); destination(d_kern); };log { source(s_sys); filter(f_default); destination(d_mesg); };log { source(s_sys); filter(f_auth); destination(d_auth); };log { source(s_sys); filter(f_mail); destination(d_mail); };log { source(s_sys); filter(f_emergency); destination(d_mlal); };log { source(s_sys); filter(f_news); destination(d_spol); };log { source(s_sys); filter(f_boot); destination(d_boot); };log { source(s_sys); filter(f_cron); destination(d_cron); };#Source additional configuration files (.conf extension only)@include "/etc/syslog‑ng/conf.d/.conf"#vim:ft=syslog‑ng:ai:si:ts=4:sw=4:et:

Mostra altroMostra altra icona

xmlns=”http://www.w3.org/1999/xhtmlIn genere non è necessario eseguire sia il systemd journal che syslog-ng journalling. Se si desidera utilizzare entrambi, è necessario apportare alcune modifiche alla configurazione di entrambi e poi riavviare entrambi. Cerca sul web le istruzioni attuali su come farlo.

Questo conclude la tua introduzione ai servizi di log su Linux.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *