Како да ги видите и конфигурирате логовите на Linux на Ubuntu, Debian и CentOS


Вовед

Системските администратори на Linux честопати треба да ги разгледаат датотеките за евиденција за целите на решавање проблеми. Ова е една од првите работи што би ги направил sysadmin.

Линукс и апликациите што работат на него можат да генерираат различни типови пораки, кои се запишуваат во различни датотеки за евиденција. Linux користи збир на конфигурациски датотеки, директориуми, програми, команди и демони за да ги креира, складира и рециклира овие пораки од дневникот. Познавањето каде системот ги чува датотеките за евиденција и како да се користат поврзаните команди, може да помогне да заштедите драгоцено време за време на решавањето проблеми.

Во ова упатство, ќе погледнеме во различни делови од механизмот за логирање на Linux.

Одрекување

Командите во ова упатство беа тестирани во обични ванила инсталации на CentOS 9, Ubuntu 22.10 и Debian 11.

Чекор 1 - Проверка на стандардната локација на датотеката за евиденција

Стандардната локација за датотеките за дневници во Linux е /var/log. Можете да ја видите листата на датотеки за евиденција во овој директориум со следнава команда:

  1. ls -l /var/log

Ќе видите нешто слично на ова на вашиот CentOS систем:

Output
[root@centos-9-trim ~]# ls -l /var/log total 49316 drwxr-xr-x. 2 root root 6 Sep 27 19:17 anaconda drwx------. 2 root root 99 Jan 3 08:23 audit -rw-rw----. 1 root utmp 1234560 Jan 3 16:16 btmp -rw-rw----. 1 root utmp 17305344 Jan 1 00:00 btmp-20230101 drwxr-x---. 2 chrony chrony 6 Aug 10 2021 chrony -rw-r--r--. 1 root root 130466 Dec 8 22:12 cloud-init.log -rw-r-----. 1 root adm 10306 Dec 8 22:12 cloud-init-output.log -rw-------. 1 root root 36979 Jan 3 16:03 cron -rw-------. 1 root root 27360 Dec 10 23:15 cron-20221211 -rw-------. 1 root root 94140 Dec 17 23:07 cron-20221218 -rw-------. 1 root root 95126 Dec 24 23:14 cron-20221225 -rw-------. 1 root root 95309 Dec 31 23:04 cron-20230101 …

Чекор 2 - Преглед на содржината на датотеката за евиденција

Еве неколку вообичаени датотеки за дневници што ќе ги најдете под /var/log:

  • wtmp
  • utmp
  • dmesg
  • пораки
  • дневник на пошта или mail.log
  • сполер
  • auth.log или безбеден

Датотеките wtmp и utmp ги следат корисниците кои се најавуваат и излегуваат од системот. Не можете директно да ја читате содржината на овие датотеки користејќи команди cat во терминалот - има и други специфични команди за тоа и ќе користите некои од овие команди.

За да видите кој е моментално најавен на серверот Linux, користете ја командата who. Оваа команда ги добива своите вредности од датотеката /var/run/utmp (за CentOS и Debian) или /run/utmp (за Ubuntu).

Еве пример од Ubuntu:

Output
root@ubuntu-22:~# who root pts/0 2023-01-03 16:23 (198.211.111.194)

Во конкретниот случај, ние сме единствениот корисник на системот.

Командата last ви ја кажува историјата на најавување на корисниците:

Output
root@ubuntu-22:~# last root pts/0 198.211.111.194 Tue Jan 3 16:23 still logged in reboot system boot 5.19.0-23-generi Thu Dec 8 21:48 still running wtmp begins Thu Dec 8 21:48:51 2022

Можете исто така да ја користите командата last со цевка (|) за да додадете grep пребарување за одредени корисници.

За да дознаете кога системот последен пат бил рестартиран, можете да ја извршите следнава команда:

  1. last reboot

Резултатот може да изгледа вака во Debian:

Output
root@debian-11-trim:~# last reboot reboot system boot 5.10.0-11-amd64 Thu Dec 8 21:49 still running wtmp begins Thu Dec 8 21:49:39 2022

За да видите кога некој последен пат се најавил на системот, користете lastlog:

  1. lastlog

На серверот Debian, може да видите излез како овој:

Output
root@debian-11-trim:~# lastlog Username Port From Latest root pts/0 162.243.188.66 Tue Jan 3 16:23:03 +0000 2023 daemon **Never logged in** bin **Never logged in** sys **Never logged in** sync **Never logged in** games **Never logged in** man **Never logged in** lp **Never logged in** mail **Never logged in** news **Never logged in** uucp **Never logged in** proxy **Never logged in** www-data **Never logged in** backup **Never logged in** list **Never logged in** irc **Never logged in** gnats **Never logged in** nobody **Never logged in** _apt **Never logged in** messagebus **Never logged in** uuidd **Never logged in** …

За други датотеки за евиденција базирани на текст, можете да ги користите командите cat, head или опашка за да ја прочитате содржината.

Во примерот подолу, се обидувате да ги погледнете последните десет линии од датотеката /var/log/messages на серверот Debian:

  1. sudo tail /var/log/messages

Ќе добиете излез сличен на овој:

Output
root@debian-11-trim:~# tail /var/log/messages Jan 1 00:10:14 debian-11-trim rsyslogd: [origin software="rsyslogd" swVersion="8.2102.0" x-pid="30025" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 ssh_watcher.go:65: [SSH Watcher] Port knocking detected. Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:43: [DO-Managed Keys Actioner] Metadata contains 1 ssh keys and 1 dotty keys Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:49: [DO-Managed Keys Actioner] Attempting to update 1 dotty keys Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:70: [DO-Managed Keys Actioner] Updating 2 keys Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:75: [DO-Managed Keys Actioner] Keys updated

Чекор 3 - Користење на rsyslog Daemon

Во срцето на механизмот за логирање е демонот rsyslog. Оваа услуга е одговорна за слушање пораки од евиденција од различни делови на системот Linux и рутирање на пораката до соодветна датотека за евиденција во директориумот /var/log. Исто така, може да препраќа пораки од дневници на друг сервер на Линукс.

Конфигурациската датотека rsyslog

Демонот rsyslog ги добива своите информации за конфигурација од датотеката rsyslog.conf. Датотеката се наоѓа под директориумот /etc.

Датотеката rsyslog.conf му кажува на демонот rsyslog каде да ги зачува пораките од дневникот. Оваа инструкција доаѓа од серија линии од два дела во датотеката.

Оваа датотека може да се најде на rsyslog.d/50-default.conf на Ubuntu.

Дводелната инструкција е составена од селектор и акција. Двата дела се одделени со бел простор.

Делот за избирање одредува кој е изворот и важноста на пораката од дневникот и делот за акција кажува што да се прави со пораката.

Самиот избирач повторно е поделен на два дела одделени со точка (.). Првиот дел пред точката се нарекува објектив (потеклото на пораката), а вториот дел по точката се нарекува приоритет (сериозноста на пораката).

Заедно, објектот/приоритетот и акциониот пар му кажуваат на rsyslog што да прави кога ќе се генерира порака од дневникот што одговара на критериумите.

Можете да видите извадок од датотека CentOS /etc/rsyslog.conf со оваа команда:

  1. cat /etc/rsyslog.conf

Треба да видите нешто како ова како излез:

Output
# rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### GLOBAL DIRECTIVES #### # Where to place auxiliary files global(workDirectory="/var/lib/rsyslog") # Use default timestamp format module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") # Include all config files in /etc/rsyslog.d/ include(file="/etc/rsyslog.d/*.conf" mode="optional") #### MODULES #### module(load="imuxsock" # provides support for local system logging (e.g. via logger command) SysSock.Use="off") # Turn off message reception via local log socket; # local messages are retrieved through imjournal now. module(load="imjournal" # provides access to the systemd journal StateFile="imjournal.state") # File to store the position in the journal #module(load="imklog") # reads kernel messages (the same are read from journald) #module(load="immark") # provides --MARK-- message capability # Provides UDP syslog reception # for parameters see http://www.rsyslog.com/doc/imudp.html #module(load="imudp") # needs to be done just once #input(type="imudp" port="514") …

За да разбереме што значи сето ова, ајде да ги разгледаме различните типови на објекти препознаени од Linux. Еве листа:

  • auth или authpriv: пораки кои доаѓаат од овластување и настани поврзани со безбедноста
  • керн: која било порака што доаѓа од кернелот на Linux
  • пошта: пораки генерирани од потсистемот за пошта
  • cron: пораки поврзани со Cron daemon
  • демон: пораки кои доаѓаат од демони
  • вести: пораки кои доаѓаат од мрежниот потсистем за вести
  • lpr: Печатење поврзани пораки од дневникот
  • корисник: евиденција на пораки кои доаѓаат од кориснички програми
  • local0 to local7: резервирано за локална употреба

И еве список на приоритети во растечки редослед:

  • debug: Отстранете ги информациите од програмите
  • информации: Едноставна информативна порака - не е потребна интервенција
  • забелешка: состојба која може да бара внимание
  • предупредување: Предупредување
  • грешка: Грешка
  • крит: Критична состојба
  • известување: состојба која бара итна интервенција
  • emerge: Вонредна состојба

Па, сега да ја разгледаме следната линија од датотеката:

Output
… # Log cron stuff cron.* /var/log/cron …

Ова само му кажува на демонот rsyslog да ги зачува сите пораки што доаѓаат од демонот cron во датотека наречена /var/log/cron. Ѕвездичката (*) по точката значи дека пораките од сите приоритети ќе бидат евидентирани. Слично на тоа, ако објектот бил наведен како ѕвездичка, тоа би значело сите извори.

Објектите и приоритетите може да се поврзат на повеќе начини.

Во неговата стандардна форма, кога има само еден приоритет наведен по точката, тоа значи дека сите настани еднакви или поголеми од тој приоритет ќе бидат заробени. Така, следнава директива предизвикува сите пораки што доаѓаат од потсистемот за пошта со приоритет на предупредување или повисоко да бидат најавени во одредена датотека под /var/log:

Output
mail.warn /var/log/mail.warn

Ова ќе ја евидентира секоја порака еднаква или поголема од приоритетот за предупредување, но оставете сè под него. Така, пораките со err, crit, alert или emerg исто така ќе бидат снимени во оваа датотека.

Користењето на знакот за еднаквост (=) по точката ќе предизвика само наведениот приоритет да се евидентира. Значи, ако сакаме да ги заробиме само инфо пораките што доаѓаат од потсистемот за пошта, спецификацијата би била нешто како следнава:

Output
mail.=info /var/log/mail.info

Повторно, ако сакаме да заробиме сè од потсистемот за пошта освен инфо пораките, спецификацијата би била нешто како следнава

Output
mail.!info /var/log/mail.info

или

Output
mail.!=info /var/log/mail.info

Во првиот случај, датотеката mail.info ќе содржи сè со приоритет помал од информациите. Во вториот случај, датотеката ќе ги содржи сите пораки со приоритет над информациите.

Повеќе објекти во иста линија може да се одделат со запирки.

Повеќе извори (facility.priority) во иста линија се одделени со точка-запирка.

Кога дејството е означено како ѕвездичка, тоа значи сите корисници. Ова е запис во вашата датотека CentOS rsyslog.conf што го кажува токму тоа:

Output
# Everybody gets emergency messages *.emerg :omusrmsg:*

Обидете се да видите што вели rsyslog.conf во вашиот Linux систем. Еве извадок од серверот Debian за друг пример:

Output
# /etc/rsyslog.conf configuration file for rsyslog # # For more information install rsyslog-doc and see # /usr/share/doc/rsyslog-doc/html/configuration/index.html ################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging module(load="imklog") # provides kernel logging support #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception #module(load="imudp") #input(type="imudp" port="514") # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514") ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Set the default permissions for all log files. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 …

Како што можете да видите, Debian ги зачувува сите пораки на ниво на безбедност/овластување во /var/log/auth.log додека CentOS ги зачувува под /var/log/secure.

Конфигурациите за rsyslog може да доаѓаат и од други сопствени датотеки. Овие сопствени конфигурациски датотеки обично се наоѓаат во различни директориуми под /etc/rsyslog.d. Датотеката rsyslog.conf ги вклучува овие директориуми користејќи ја директивата $IncludeConfig.

Еве како изгледа во Ubuntu:

Output
… # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf …

Проверете ја содржината во директориумот /etc/rsyslog.d со:

  1. ls -l /etc/rsyslog.d

Ќе видите нешто слично на ова во вашиот терминал:

Output
-rw-r--r-- 1 root root 314 Sep 19 2021 20-ufw.conf -rw-r--r-- 1 root root 255 Sep 30 22:07 21-cloudinit.conf -rw-r--r-- 1 root root 1124 Nov 16 2021 50-default.conf

Дестинацијата за порака од дневник не мора нужно да биде датотека за евиденција; пораката може да се испрати до конзолата на корисникот. Во овој случај, полето за акција ќе го содржи корисничкото име. Ако повеќе од еден корисник треба да ја прими пораката, нивните кориснички имиња се одделени со запирки. Ако пораката треба да се емитува на секој корисник, таа е наведена со ѕвездичка (*) во полето за акција.

Поради тоа што е дел од мрежен оперативен систем, демонот rsyslog не само што може локално да зачувува пораки од дневникот, туку може и да ги препраќа на друг Linux сервер во мрежата или да дејствува како складиште за други системи. Демонот слуша пораки за евиденција во UDP портата 514. Примерот подолу ќе ги препрати критичните пораки на јадрото до серверот наречен „тексас“.

Output
kern.crit @texas

Чекор 4 - Креирање и тестирање на сопствени пораки од дневникот

Значи, сега е време да креирате сопствени датотеки за дневници. За да го тестирате ова, ќе го направите следново:

  • Додајте спецификација на датотеката за евиденција во датотеката /etc/rsyslog.conf
  • Рестартирајте го демонот rsyslog
  • Тестирајте ја конфигурацијата со помош на алатката за дневник

Во следниот пример, ќе додадете две нови линии во датотеката rsyslog.conf на вашиот CentOS Linux систем. Како што можете да видите со следнава команда, секој од нив доаѓа од објект наречен local4 и тие имаат различни приоритети.

  1. vi /etc/rsyslog.conf

Еве го излезот:

Output
… # New lines added for testing log message generation local4.crit /var/log/local4crit.log local4.=info /var/log/local4info.log

Следно, услугата што ќе ја рестартирате за да се вчитаат повторно податоците за конфигурациската датотека:

  1. /etc/init.d/rsyslog restart

За да ја генерирате пораката за дневник сега, апликацијата logger се нарекува:

  1. logger -p local4.info " This is a info message from local 4"

Гледајќи под директориумот /var/log сега се прикажуваат две нови датотеки:

Output
… -rw------- 1 root root 0 Jan 3 11:21 local4crit.log -rw------- 1 root root 72 Jan 3 11:22 local4info.log …

Големината на local4info.log не е нула. Значи, кога ќе го отворите, ќе видите дека пораката е снимена:

  1. cat /var/log/local4info.log
Output
Jan 3 11:22:32 TestLinux root: This is a info message from local 4

Чекор 5 - Ротирачки датотеки за евиденција

Како што се повеќе и повеќе информации се пишуваат во датотеките за евиденција, тие стануваат се поголеми и поголеми. Ова очигледно претставува потенцијален проблем со перформансите. Исто така, управувањето со датотеките станува незгодно.

Линукс го користи концептот на ротирачки лог датотеки наместо да ги чисти или брише. Кога се ротира дневник, се креира нова датотека за евиденција и старата датотека за евиденција се преименува и опционално се компресира. На тој начин, датотеката за евиденција може да има повеќе стари верзии кои остануваат онлајн. Овие датотеки ќе се вратат наназад во текот на одреден временски период и ќе го претставуваат заостанатото. Откако ќе се генерираат одреден број на заостанати дневници, нова ротација на дневникот ќе предизвика бришење на најстарата датотека за евиденција.

Ротацијата се иницира преку алатката logrotate.

Конфигурациската датотека логротирај

Како rsyslog, logrotate исто така зависи од конфигурациската датотека и името на оваа датотека е logrotate.conf. Се наоѓа под /etc.

Еве што гледате во датотеката logrotate.conf на вашиот Debian сервер:

  1. cat /etc/logrotate.conf
Output
# see "man logrotate" for details # global options do not affect preceding include directives # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file #dateext # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may also be configured here.

Стандардно, датотеките за евиденција треба да се ротираат неделно, а четири заостанати заостанати останати онлајн во секое време. Кога програмата ќе работи, ќе се генерира нова, празна датотека за евиденција и по желба старите ќе бидат компресирани.

Единствен исклучок е за датотеките wtmp и btmp. wtmp ги следи системските најавувања и btmp ги следи лошите обиди за најавување. Двете датотеки за евиденција треба да се ротираат секој месец и не се враќа грешка ако може да се најде некоја претходна датотека wtmp или btmp.

Прилагодените конфигурации за ротација на дневници се чуваат во директориумот /etc/logrotate.d. Овие се исто така вклучени во logrotate.conf со директивата include. Инсталацијата на Debian ви ја прикажува содржината на овој директориум:

  1. ls -l /etc/logrotate.d
Output
total 32 -rw-r--r-- 1 root root 120 Jan 30 2021 alternatives -rw-r--r-- 1 root root 173 Jun 10 2021 apt -rw-r--r-- 1 root root 130 Oct 14 2019 btmp -rw-r--r-- 1 root root 160 Oct 19 2021 chrony -rw-r--r-- 1 root root 112 Jan 30 2021 dpkg -rw-r--r-- 1 root root 374 Feb 17 2021 rsyslog -rw-r--r-- 1 root root 235 Feb 19 2021 unattended-upgrades -rw-r--r-- 1 root root 145 Oct 14 2019 wtmp

Содржината на rsyslog покажува како да рециклирате голем број датотеки за евиденција:

  1. cat /etc/logrotate.d/rsyslog
Output
/var/log/syslog /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }

Како што можете да видите, датотеката пораки ќе се реиницијализира секој ден со четиридневни дневници кои ќе се чуваат онлајн. Другите датотеки со дневници се ротираат секоја недела.

Исто така, вреди да се забележи и директивата postrotate. Ова го одредува дејството што се случува откако ќе заврши целата ротација на дневникот.

Чекор 6 - Тестирање на ротацијата

logrotate може рачно да се изврши за да се рециклира една или повеќе датотеки. И за да го направите тоа, ја одредувате соодветната конфигурациска датотека како аргумент на командата.

За да видите како функционира ова, еве делумна листа на датотеки за евиденција во директориумот /var/log во тест CentOS сервер:

  1. ls -l /var/log
Output
total 49324 … -rw-------. 1 root root 84103 Jan 3 17:20 messages -rw-------. 1 root root 165534 Dec 10 23:12 messages-20221211 -rw-------. 1 root root 254743 Dec 18 00:00 messages-20221218 -rw-------. 1 root root 217810 Dec 25 00:00 messages-20221225 -rw-------. 1 root root 237726 Dec 31 23:45 messages-20230101 drwx------. 2 root root 6 Mar 2 2022 private drwxr-xr-x. 2 root root 6 Feb 24 2022 qemu-ga lrwxrwxrwx. 1 root root 39 Mar 2 2022 README -> ../../usr/share/doc/systemd/README.logs -rw-------. 1 root root 2514753 Jan 3 17:25 secure -rw-------. 1 root root 2281107 Dec 10 23:59 secure-20221211 -rw-------. 1 root root 9402839 Dec 17 23:59 secure-20221218 -rw-------. 1 root root 8208657 Dec 25 00:00 secure-20221225 -rw-------. 1 root root 7081010 Dec 31 23:59 secure-20230101 drwxr-x---. 2 sssd sssd 6 Jan 17 2022 sssd -rw-------. 1 root root 0 Dec 8 22:11 tallylog -rw-rw-r--. 1 root utmp 2688 Jan 3 16:22 wtmp

Делумната содржина на датотеката logrotate.conf изгледа вака:

  1. cat /etc/logrotate.conf
Output
# see "man logrotate" for details # global options do not affect preceding include directives # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may be also be configured here.

Потоа ја извршувате командата logrotate:

  1. logrotate -fv /etc/logrotate.conf

Пораките се прелистуваат додека се генерираат нови датотеки, се појавуваат грешки итн. Кога прашината се спушта, проверувате дали има нова пошта, безбедна или пораки датотеки:

  1. ls -l /var/log/mail*
Output
-rw------- 1 root root 0 Dec 17 18:34 /var/log/maillog -rw-------. 1 root root 1830 Dec 16 16:35 /var/log/maillog-20131216 -rw------- 1 root root 359 Dec 17 18:25 /var/log/maillog-20131217
  1. ls -l /var/log/messages*
Output
-rw------- 1 root root 148 Dec 17 18:34 /var/log/messages -rw-------. 1 root root 180429 Dec 16 16:35 /var/log/messages-20131216 -rw------- 1 root root 30554 Dec 17 18:25 /var/log/messages-20131217
ls -l /var/log/secure*
-rw-------  1 root root    0 Jan 3 12:34 /var/log/secure
-rw-------. 1 root root 4187 Jan 3 16:41 /var/log/secure-20230103 
-rw-------  1 root root  591 Jan 3 18:28 /var/log/secure-20230103 ```

Како што можеме да видиме, сите три нови датотеки за дневници се создадени. Датотеките maillog и secure сè уште се празни, но новата датотека messages веќе има некои податоци во неа.

Заклучок

Се надеваме дека ова упатство ви даде некои идеи за евиденција на Linux. Може да се обидете да погледнете во вашиот сопствен развој или системи за тестирање за да имате подобра идеја. Откако ќе се запознаете со локацијата на датотеките за евиденција и нивните конфигурациски поставки, искористете го тоа знаење за поддршка на вашите системи за производство. Потоа можете да креирате некои псевдоними за да укажете на овие датотеки за да заштедите и време за пишување.