как работают логи / logrotate / укорачивание
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Системный журнал постоянно растёт. Это значит, что каков бы ни был размер файловой системы /var, она в конце концов заполнится журналами под завязку — если как-то их не укорачивать. К сожалению, в Linux укоротить файл от начала, отрезав самые старые записи, нельзя, как нельзя и добавлять новые записи в начало файла. Эти операции легко реализовать с помощью копирования нужной области в новый файл и последующего переименования, но, во-первых, соблюсти атомарность таких составных операций нелегко, а во-вторых, они требуют удвоенного места в файловой системе на время работы (и, стало быть, каких-то аварийных процедур на случай нехватки места). Поэтому в Linux принят другой, существенно менее ресурсоёмкий алгоритм, помогающий избежать переполнения /var, т.е. «прокручивание» системных журналов. Суть алгоритма в следующем: когда настаёт пора укоротить журнал (например, раз в неделю или если файл журнала достиг определённого размера), этот файл переименовывают, и открывают новый пустой файл с тем же именем. Если хранить несколько (скажем, семь) переименованных старых фай-лов, с ними уже можно производить операцию «отбрасывания старого», самый старый — седьмой — файл удаляется, шестой переименовывается в седьмой, пятый — в шестой, и т.д. до первого (моложе которого только текущий журнал), который переименовывается во второй. Только тогда можно переименовать текущий журнал в «первый старый», и открыть новый. Получается очередь устаревающих файлов, пополняемая с одной стороны и усекаемая с другой. Как правило имя «первого старого» журнала получается добавлением к имени журнала суффикса *.1, второго —*.2 и т.д. Прокручиванием системных журналов занимается утилита logrotate, которая тоже управляется конфигурационным файлом /etc/logrotate.conf и в 64-каталогом /etc/logrotate.d/. Согласно настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в примере) или gzlp, можно задавать им определённые права доступа, можно посылать сигнал некоторой службе (чтобы она заметила подмену журнала, если она сама, а не syslogd занимается его пополнением) и т. п. |
Для уровней важности, приняты следующие обозначения:
1 2 3 4 5 6 7 8 |
0: emergency (неработоспособность системы) 1: alerts (предупреждения, требующие немедленного вмешательства) 2: critical (критическое состояние) 3: errors (ошибки) 4: warning (предупреждения) 5: notice (уведомления) 6: info (информационные сообщения) 7: debug (отладочные сообщения) |
Systemd:
1 2 3 4 |
Systemd состоит из трех основных компонентов: systemd - менеджер системы и сервисов systemctl - утилита для просмотра и управление статусом сервисов systemd-analyze - предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd |
journalctl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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 за сегодня |
Ограничение размера журнала / Удаление журналов
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Ограничение размера журнала: Если journald настроен что бы сохранять журналы после перезагрузки, то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства. Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald: ---------------- SystemMaxUse=50M ---------------- Удаление журналов: Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl. journalctl --vacuum-size=100M - удалить журналы, оставив только последние 100 Мб journalctl --vacuum-time=7d - удалить журналы, оставив журналы только за последние 7 дней |
dmesg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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 / Лог загрузки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Лог загрузки 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 |
чистим логи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
редактируются обычным редактором /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/* - чистка лога |
Доп:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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 - настройки отправки) |