Управляем логами

Ubuntu Linux, как и другие linux-дистрибутивы имеет такое свойство, как детальное документирование всех действий системы, т.е. логированию. Иногда пользователям подробные и большие лог-файлы совершенно ненужны, иногда пользователи жалуются на большой объем этих файлов. Что можно предпринять? Ответ прост - настроить свою систему, особенно правила ведения логов.

Итак, первым делом определите программу-источник наибольшего количества записей в логах. Для этого вам необходимо просто просмотреть часто повторяющиеся последние записи в лог-файлах. Проанализируйте сообщения - возможно, они говорят о неправильной настройке приложения. Если все нормально с приложением, то ищем файлы конфигурации этого приложения и отключаем ведение логов или выбираем менее детальный уровень логирования.

Второй этап - настройка ротации лог-файлов. Тут мы зададим все параметры самих лог-файлов и действий над ними.

Обработкой логов занимается программа logrotate, которая вызывается ежедневно как задание cron (cron - запускает запланированные задание в указанное время). Принцип работы ее прост - logrotate осуществляет ротацию, сжатие, удалением лог-файлов и отсылкой их по почте.

Что такое ротация? Простыми словами - это механизм управления логами, который разбивает логи на несколько кусков-файлов в зависимости от периода времени и(или) размера логов. При этом более новые "сдвигают" старые логи на одну позицию, а самый последний удаляется (в большинстве случаев). Чтобы посмотреть на примере - откройте папку и посмотрите на имена файлов и вы увидите что-то вроде этого - syslog syslog.0 syslog.1.gz syslog.2.gz syslog.3.gz syslog.4.gz, где syslog - это текущий лог-файл, syslog.0 - лог-файл прошлой недели, syslog.1.gz - логи 2-недельной давности и т.д. При следующей ротации файл syslog.4.gz будет удален, syslog.3.gz будет переименован в syslog.4.gz, syslog.2.gz - в syslog.3.gz, syslog.1.gz - в syslog.2.gz, syslog.0 в syslog.1.gz, syslog - в syslog.0, а в файл syslog будет очищен для новых логов.

Задавая параметры logrotate мы можем контролировать хранение логов. Конфигурация для logrotate находится в файле /etc/logrotate.conf - посмотрим на него повнимательней.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Это значения по умолчанию, т.е. в этом файле хранятся правила ведения лог-файлов для всех программ за исключением указанных (читай ниже ниже).

Идем по параметрам:

weekly - означает, что ротация будет осуществляться раз в неделю, может быть указано monthly (daily) - раз в месяц (раз в день);

rotate 4 - сколько раз делать ротацию логов перед их удалением или пересылкой по почте, если указано 0 - то старая версия сразу удаляется или пересылается по почте;
size 1000 - при превышении указанного размера лог-файла будет произведена ротация, размер можно указывать и так: 1000k, 5M, т.е. в килобайтах и мегабайтах.

create - после ротации сразу будет создан пустой лог-файл;

compress - если указана эта директива, то лог-файлы после ротации будут сжиматься.

include /etc/logrotate.d - указываем путь, в котором будут храниться правила ротации для логов других программ, которым не подходят значения по умолчанию, откройте любой файл из указанной папки и вы увидите, что правила там задаются так-же как и правила по умолчанию.

Это основные директивы, более подробно, если есть желание или необходимость, вы можете посмотреть набрав команду:

man logrotate

И вы узнаете, что можно запускать перед ротацией и после нее свой скрипт обработки, сжимать своим алгоритмом и прочее.

Думаю, что приведенной выше информации хватит для приведения в порядок размеров своих лог-фалов.