Рубрики
syslog \ rsyslog \ zabbix мониторинг

LOG \ логи \ journalctl \ dmesg \

как работают логи / logrotate / укорачивание

Системный журнал постоянно растёт. 
Это значит, что каков бы ни был размер файловой системы /var, она в конце концов заполнится журналами под завязку — если как-то их не укорачивать. 
К сожалению, в Linux укоротить файл от начала, отрезав самые старые записи, нельзя, как нельзя и добавлять новые записи в начало файла. 
Эти операции легко реализовать с помощью копирования нужной области в новый файл и последующего переименования, но, во-первых, 
соблюсти атомарность таких составных операций нелегко, а во-вторых, они требуют удвоенного места 
в файловой системе на время работы (и, стало быть, каких-то аварийных процедур на случай нехватки места).
Поэтому в Linux принят другой, существенно менее ресурсоёмкий алгоритм, помогающий избежать переполнения /var, т.е. «прокручивание» системных журналов. 
Суть алгоритма в следующем: когда настаёт пора укоротить журнал (например, раз в неделю или если файл журнала достиг определённого размера), 
этот файл переименовывают, и открывают новый пустой файл с тем же именем. 
Если хранить несколько (скажем, семь) переименованных старых фай-лов, с ними уже можно производить операцию «отбрасывания старого», 
самый старый — седьмой — файл удаляется, шестой переименовывается в седьмой, пятый — в шестой, и т.д. до первого (моложе которого только текущий журнал), 
который переименовывается во второй. 
Только тогда можно переименовать текущий журнал в «первый старый», и открыть новый. 
Получается очередь устаревающих файлов, пополняемая с одной стороны и усекаемая с другой.
Как правило имя «первого старого» журнала получается добавлением к имени журнала суффикса *.1, второго —*.2 и т.д.
Прокручиванием системных журналов занимается утилита logrotate, которая тоже управляется 
конфигурационным файлом /etc/logrotate.conf и в 64-каталогом /etc/logrotate.d/. 
Согласно настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в примере) или gzlp, можно задавать им определённые права доступа, 
можно посылать сигнал некоторой службе (чтобы она заметила подмену журнала, если она сама, а не syslogd занимается его пополнением) и т. п.

Для уровней важности, приняты следующие обозначения:

0: emergency (неработоспособность системы)
1: alerts (предупреждения, требующие немедленного вмешательства)
2: critical (критическое состояние)
3: errors (ошибки)
4: warning (предупреждения)
5: notice (уведомления)
6: info (информационные сообщения)
7: debug (отладочные сообщения)

Systemd:

Systemd состоит из трех основных компонентов:
systemd         - менеджер системы и сервисов
systemctl       - утилита для просмотра и управление статусом сервисов
systemd-analyze - предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd

journalctl

journalctl --list-boots - просмотреть журналов загрузки
journalctl -b  - история с момента запуска системы
journalctl -b 0 - просмотреть журнал начиная с текущего старта системы
journalctl -b -1 - просмотреть журнал предыдущей загрузки

journalctl -p 0 - посмотреть события emergency
journalctl -p 2, journalctl покажет все сообщения с уровнями 2, 1 и 0. (alerts, emergency, critical)

journalctl -f  - чтобы следить за логами
journalctl -xe  - открыть журнал на последней записи
journalctl _UID=0 - следить за логами  пользователя с UID=0

journalctl _COMM=sshd - поиск по sshd
journalctl _COMM=sshd -o json-pretty поиск по sshd в JSON
journalctl _COMM=cron - история запуска по cron
journalctl _COMM=cron --since=«date» --until="date"  - история запуска по cron

journalctl -k - посмотреть сообщения от ядра Linux за текущую загрузку

journalctl --since «2015-01-10» --until "2015-01-11 03:00"  - просмотр журнала за определенный период времени
journalctl --since 09:00 --until «1 hour ago» - просмотр журнала за определенный период времени (с 9 утра и до момента, час назад)
journalctl --since yesterday - просмотр журнала за определенный период времени (со вчерашнего дня)


journalctl --disk-usage
journalctl --vacuum-size=1G

systemctl list-units --type=service - покажет названия сервисов

journalctl -u NAME.service - просмотреть логи от NAME.service
journalctl -u NetworkManager.service - просмотреть логи от NetworkManager.service

!!! можно просмотреть лог приложения, указав его исполняемый файл
journalctl /usr/sbin/nginx --since today - просмотреть все сообщения от nginx за сегодня

Ограничение размера журнала / Удаление журналов

Ограничение размера журнала:
Если journald настроен что бы сохранять журналы после перезагрузки, 
то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства.

Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald:
----------------
SystemMaxUse=50M
----------------

Удаление журналов:
Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl.
journalctl --vacuum-size=100M - удалить журналы, оставив только последние 100 Мб
journalctl --vacuum-time=7d - удалить журналы, оставив журналы только за последние 7 дней

dmesg

 
gnome-system-log -в squeeze
dmesg > dmesg.txt
lspci -v > lspci.txt
cp /var/log/Xorg.0.log ~


dmesg | more - все устройства
dmesg | less - все устройства
dmesg | grep -i pci	- команда выводит список всех устройств PCI
dmesg | grep -i isa	- команда выводит список всех устройств ISA
dmesg | grep -i memory	- память
dmesg | grep -i scsi	- команда выводит список всех устройств scsi
dmesg | grep -i usb	- команда выводит список всех устройств usb
dmesg | grep -i tty	- консоль\терминал\ввод
dmesg | grep -i cpu     - процессор

cat /var/lib/dhcp/dhcpd.leases  - посмотреть какие адреса раздал dhcpd (DHCP сервер)
cat /proc/net/dev               - сеть какие пакеты передаются

tail -f /var/log/messages       - следим за логами системы
tail -fn0 /var/log/messages     - следим за /var/log/messages ( n0 - выведет при запуске 0 строк и увидим новые записи в файле )
tail -fn0 /var/log/auth.log     - следим за изменениями в лог файле /var/log/auth.log 

tail -n 20 /var/log/messages	- General message and system related stuff
tail -n 20 /var/log/auth.log	- Authenication logs
tail -n 20 /var/log/kern.log	- Kernel logs
tail -n 20 /var/log/cron.log	- Crond logs (cron job)
tail -n 20 /var/log/maillog	- Mail server logs
tail -n 20 /var/log/qmail/	- Qmail log directory (more files inside this directory)
tail -n 20 /var/log/apache2/access.log	-Apache access and error logs directory
tail -n 20 /var/log/apache2/error.log	-Apache access and error logs directory
tail -n 20 /var/log/apache2/other_vhosts_access.log	-Apache access and error logs directory
tail -n 20 /var/log/lighttpd -Lighttpd access and error logs directory
tail -n 20 /var/log/boot.log	-System boot log
tail -n 20 /var/log/mysqld.log	-MySQL database server log file
tail -n 20 /var/log/secure	-Authentication log
tail -n 20 /var/log/yum.log	-Yum log files
tail -n 20 /var/log/utmp   -Login records file
tail -n 20 /var/log/wtmp  -Login records file

grep cron /var/log/syslog  - история запуска по cron

Boot log / Лог загрузки

 
Лог загрузки Debian Lenny
Иногда необходимо внимательно почитать информацию которая выводиться при загрузке системы. 
Сделать это можно двумя простыми способами:

1. Во время загрузки нажмите комбинацию клавиш
Ctrl + S
вывод будет приостановлен
для продолжения загрузки нажмите комбинацию
Ctrl + Q

2. Активировать запись лога и читать его после загрузки
Отредактируем файл bootlogd
su
sed -i 's/No/Yes/' /etc/default/bootlogd

Разрешим пользователю читать логи, где MyUser ваш логин:
usermod -aG adm MyUser
reboot

Читаем лог:
more /var/log/boot
less /var/log/boot

чистим логи:

 
редактируются обычным редактором
/var/log/messages - что делал юзер
/var/adm/messages - что делал юзер
/var/log  -демоны

редактируются командами
/var/log/wtmp - время сколько проработал юзер
/var/run/utmp - время сколько проработал юзер

вот такими командами
echo -ne > /var/log/wtmp
echo -ne > /var/run/utmp
.bash_history находиться в домашнем каталоге юзера
.mc/history находиться в домашнем каталоге юзера

cat /dev/null > /var/log/* - чистка лога

Доп:

grep francois myfile.txt - показывает строки, содержащие слово francois из файла myfile.txt
grep 404 /var/log/httpd/access_log - показывает	строки, содержащие 
                                     число 404 из /var/log/httpd/access_log
ps auwx	| grep init - показывает строки init из выхода ps
ps auwx	| grep "\[*\]" - показывает команды, заключенные в скобки
dmesg |	grep "[ ]ata\|^ata" - показывает информацию об устройстве ядра ata
grep -Rl Virtual Host /etc/httpd/conf* - показывает строки Virtual Host
grep -v 200 /var/log/httpd/access_log* - отображает строки, не содержащие число 200
ps auwx | grep "[i]nit" -  процесс grep показан не будет

tail -n 15 myfile.txt - отображает последние 15 строк файла
tail -15 myfile.txt - выводит последние 15 строк файла
ps auwx | tail -n 15 - отображает последние 15 строк выхода команды ps
tail -f /var/log/messages - просматривает системные сообщения в режиме реального времени
tail -f /var/1og/maillog - просматривает сообщения почтового севера в режиме реального времени
tail -f /var/1og/httpd/access_log - просматривает сообщения веб-сервера 
                                    в режиме реального времени

wc -позволяет подсчитывать количество полученных строк, слов, байт в файле
grep 192.198.1.1 /var/log/httpd/access-log | wc -l - отображает количество записей конкретного
                                                     IP-адреса в файле журнала Apache
wc /var/log/dmesg - отображает счетчики для одного файла
wc /var/log/*.log - отображает отдельные значения для каждого файла 
                    и общие для всех файлов
                    
Вы можите просматривать любой журнал логов вручную(cat, vi, nano, tail, less)
Однако установив пакет logwatch, вы будете получать более существенную информацию
из журнала файлов в почтовый ящик root(etc/cron.daily/0logwatch - настройки  отправки)