Serviciile care rulează pe un server Linux își scriu informațiile în fișierele log. Aceste fișiere pot fi scrise în locuri diferite și există mai multe soluții pentru a obține informații relevante din sistemul de loguri din Linux. Nu mai puțin de 3 modalități diferite sunt folosite de serviciile din Linux pentru a-și scrie informațiile în loguri:
- scrierea directă: unele servicii scriu informația direct în fișierele log; exemple: serverul web Apache sau Samba
- rsyslogd: are grijă de gestionarea centralizată a fișierelor log; este o dezvoltare a syslogd, serviciu care a fost folosit mult timp
- journald: introducerea lui systemd a însemnat și apariția serviciului log systemd-journald; acest serviciu este integrat cu systemd și permite administratorilor de sistem citirea detaliată a informațiilor din jurnal în timp ce se monitorizează statusul serviciului cu comanda systemctl status.
Pentru a obține informații despre ceea ce se întâmplă pe mașină în timpul rulării sistemului de operare Linux, administratorii de sistem au nu mai puțin de 3 modalități de abordare:
- citirea și monitorizarea fișierelor scrise de rsyslogd în directorul /var/log/;
- comanda journalctl poate fi folosită pentru a obține informații detaliate despre jurnal;
- o privire scurtă asupra evenimentelor importante care sunt jurnalizate de unitățile systemd prin intermediul journald poate fi obținută prin comanda
systemctl status nume_unitate
. Această comandă arată statusul serviciilor, ca, de asemenea, și ultimele linii care au fost înregistrate.
Exemplul de mai jos arată statusul serviciului NetworkManager:
$ systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2017-02-08 18:51:10 EET; 1h 31min ago
Docs: man:NetworkManager(8)
Main PID: 333 (NetworkManager)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/NetworkManager.service
├─333 /usr/bin/NetworkManager --no-daemon
└─363 /usr/bin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/dhclient-enp3s0.pid -lf /var/lib/NetworkManager/dhclient-2f58a7c1-210b-3aef-adbf-17baa9156d0a-enpFeb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.2177] dhcp6 (enp3s0): dhclient started with pid 419
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.2197] policy: set 'Wired connection 1' (enp3s0) as default for IPv6 routing and DNS
Feb 08 18:51:14 bobsesarch dhclient[419]: XMT: Info-Request on enp3s0, interval 950ms.
Feb 08 18:51:14 bobsesarch dhclient[419]: RCV: Reply message on enp3s0 from fe80::1.
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.4163] dhcp6 (enp3s0): nameserver 'fe80::1'
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.4164] dhcp6 (enp3s0): state changed unknown -> bound
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.4183] dns-mgr: Writing DNS information to /usr/bin/resolvconf
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.4921] dhcp6 (enp3s0): client pid 419 exited with status 0
Feb 08 18:51:14 bobsesarch NetworkManager[333]: <info> [1486572674.4926] dhcp6 (enp3s0): state changed bound -> done
Feb 08 18:51:17 bobsesarch NetworkManager[333]: <info> [1486572677.1038] manager: startup complete
Citirea fișierelor log
Spre deosebire de mesajele care sunt scrise de journald în jurnal și care pot fi citite folosind comanda journalctl
, pe un sistem Linux se întâlnesc și fișiere log în directorul /var/log/ Aceste fișiere pot fi citite folosind utilitare cum ar fi pagerul less, orice editor de text din linia de comandă (vi/vim, nano), ori afișate folosind comanda cat
.
Nu există un număr exact al fișierelor log din directorul /var/log; ele diferă, în funcție de configurația serverului sau de serviciile care rulează pe server.
Monitorizarea continuă a unui fișier log
Să presupunem că ceva s-a întâmplat pe serverul vostru și vreți să știți de anume. Există posibilitatea de a monitoriza în timp real ceea ce se scrie în log folosind comanda tail -f <nume_fișier_log>
.
Exemplu: comanda tail -f
pe un server Ubuntu cu Apache:
# tail -f error.log
[Sun Feb 05 00:21:03.639377 2017] [:notice] [pid 1503] mod_bw : Memory Allocated 0 bytes (each conf takes 48 bytes)
[Sun Feb 05 00:21:03.639413 2017] [:notice] [pid 1503] mod_bw : Version 0.92 - Initialized [0 Confs]
[Sun Feb 05 00:21:03.799886 2017] [ssl:warn] [pid 1503] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Sun Feb 05 00:21:03.799998 2017] [mpm_prefork:notice] [pid 1503] AH00163: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f configured -- resuming normal operations
[Sun Feb 05 00:21:03.800014 2017] [core:notice] [pid 1503] AH00094: Command line: '/usr/sbin/apache2'
Această urmărire rămâne deschisă până la apăsarea tastelor CTRL+C.
Anumite servicii își pot plasa logurile în altă parte (de exemplu în directorul de instalare).
Ce căutăm în fișierele log?
Citind un fișier log încercăm să înțelegem ce a mers prost pe sistemul nostru. De exemplu, căutăm mesaje de eroare (ERROR sau SEVERE) și vedem ce scrie în explicație - poate sistemul a crăpat că are nevoie de mai multă memorie sau din altă cauză. Când nu reușim să ne dăm seama ce se întâmplă, căutăm frumos pe google explicația mesajului de eroare - este imposibil să nu se mai fi întâlnit cineva cu aceeași problemă.
Util
Comanda următoare ne va afișa doar prima coloană din fișierul access.log:
cat access.log | cut -d '"' -f1
Studiul sistemului de loguri din Linux nu se termină aici: aceasta a fost doar o privire de ansamblu asupra a cum se poate afla ceea ce se întâmplă cu serverul nostru sau cu sistemul nostru de operare Linux.
Lasă un răspuns