Како да ги видите и конфигурирате логовите на Linux на Ubuntu, Debian и CentOS
Вовед
Системските администратори на Linux честопати треба да ги разгледаат датотеките за евиденција за целите на решавање проблеми. Ова е една од првите работи што би ги направил sysadmin.
Линукс и апликациите што работат на него можат да генерираат различни типови пораки, кои се запишуваат во различни датотеки за евиденција. Linux користи збир на конфигурациски датотеки, директориуми, програми, команди и демони за да ги креира, складира и рециклира овие пораки од дневникот. Познавањето каде системот ги чува датотеките за евиденција и како да се користат поврзаните команди, може да помогне да заштедите драгоцено време за време на решавањето проблеми.
Во ова упатство, ќе погледнеме во различни делови од механизмот за логирање на Linux.
Одрекување
Командите во ова упатство беа тестирани во обични ванила инсталации на CentOS 9, Ubuntu 22.10 и Debian 11.
Чекор 1 - Проверка на стандардната локација на датотеката за евиденција
Стандардната локација за датотеките за дневници во Linux е /var/log
. Можете да ја видите листата на датотеки за евиденција во овој директориум со следнава команда:
- 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:
Outputroot@ubuntu-22:~# who
root pts/0 2023-01-03 16:23 (198.211.111.194)
Во конкретниот случај, ние сме единствениот корисник на системот.
Командата last
ви ја кажува историјата на најавување на корисниците:
Outputroot@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
пребарување за одредени корисници.
За да дознаете кога системот последен пат бил рестартиран, можете да ја извршите следнава команда:
- last reboot
Резултатот може да изгледа вака во Debian:
Outputroot@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
:
- lastlog
На серверот Debian, може да видите излез како овој:
Outputroot@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:
- sudo tail /var/log/messages
Ќе добиете излез сличен на овој:
Outputroot@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
со оваа команда:
- 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
:
Outputmail.warn /var/log/mail.warn
Ова ќе ја евидентира секоја порака еднаква или поголема од приоритетот за предупредување, но оставете сè под него. Така, пораките со err
, crit
, alert
или emerg
исто така ќе бидат снимени во оваа датотека.
Користењето на знакот за еднаквост (=
) по точката ќе предизвика само наведениот приоритет да се евидентира. Значи, ако сакаме да ги заробиме само инфо пораките што доаѓаат од потсистемот за пошта, спецификацијата би била нешто како следнава:
Outputmail.=info /var/log/mail.info
Повторно, ако сакаме да заробиме сè од потсистемот за пошта освен инфо пораките, спецификацијата би била нешто како следнава
Outputmail.!info /var/log/mail.info
или
Outputmail.!=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
со:
- 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. Примерот подолу ќе ги препрати критичните пораки на јадрото до серверот наречен „тексас“.
Outputkern.crit @texas
Чекор 4 - Креирање и тестирање на сопствени пораки од дневникот
Значи, сега е време да креирате сопствени датотеки за дневници. За да го тестирате ова, ќе го направите следново:
- Додајте спецификација на датотеката за евиденција во датотеката
/etc/rsyslog.conf
- Рестартирајте го демонот
rsyslog
- Тестирајте ја конфигурацијата со помош на алатката за дневник
Во следниот пример, ќе додадете две нови линии во датотеката rsyslog.conf
на вашиот CentOS Linux систем. Како што можете да видите со следнава команда, секој од нив доаѓа од објект наречен local4 и тие имаат различни приоритети.
- 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
Следно, услугата што ќе ја рестартирате за да се вчитаат повторно податоците за конфигурациската датотека:
- /etc/init.d/rsyslog restart
За да ја генерирате пораката за дневник сега, апликацијата logger се нарекува:
- 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
не е нула. Значи, кога ќе го отворите, ќе видите дека пораката е снимена:
- cat /var/log/local4info.log
OutputJan 3 11:22:32 TestLinux root: This is a info message from local 4
Чекор 5 - Ротирачки датотеки за евиденција
Како што се повеќе и повеќе информации се пишуваат во датотеките за евиденција, тие стануваат се поголеми и поголеми. Ова очигледно претставува потенцијален проблем со перформансите. Исто така, управувањето со датотеките станува незгодно.
Линукс го користи концептот на ротирачки лог датотеки наместо да ги чисти или брише. Кога се ротира дневник, се креира нова датотека за евиденција и старата датотека за евиденција се преименува и опционално се компресира. На тој начин, датотеката за евиденција може да има повеќе стари верзии кои остануваат онлајн. Овие датотеки ќе се вратат наназад во текот на одреден временски период и ќе го претставуваат заостанатото. Откако ќе се генерираат одреден број на заостанати дневници, нова ротација на дневникот ќе предизвика бришење на најстарата датотека за евиденција.
Ротацијата се иницира преку алатката logrotate
.
Конфигурациската датотека логротирај
Како rsyslog
, logrotate
исто така зависи од конфигурациската датотека и името на оваа датотека е logrotate.conf
. Се наоѓа под /etc
.
Еве што гледате во датотеката logrotate.conf
на вашиот Debian сервер:
- 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 ви ја прикажува содржината на овој директориум:
- ls -l /etc/logrotate.d
Outputtotal 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
покажува како да рециклирате голем број датотеки за евиденција:
- 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 сервер:
- ls -l /var/log
Outputtotal 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
изгледа вака:
- 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
:
- logrotate -fv /etc/logrotate.conf
Пораките се прелистуваат додека се генерираат нови датотеки, се појавуваат грешки итн. Кога прашината се спушта, проверувате дали има нова пошта
, безбедна
или пораки
датотеки:
- 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
- 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. Може да се обидете да погледнете во вашиот сопствен развој или системи за тестирање за да имате подобра идеја. Откако ќе се запознаете со локацијата на датотеките за евиденција и нивните конфигурациски поставки, искористете го тоа знаење за поддршка на вашите системи за производство. Потоа можете да креирате некои псевдоними за да укажете на овие датотеки за да заштедите и време за пишување.