Записки Вредного программиста

enjoy, motherfuckers ;)

Ротация логов на примере логов Unicorn

Что-то все реже и реже находится время, чтобы написать несколько абзацев в свой новый блог. Но сегодня будет исключение. Я все же возьму себя в руки и что-нибудь напишу. Речь в сегодняшнем посте пойдет о ротации логов: с чем едят, как готовить на примере нами любимого unicorn’а.

Думаю, что такое логи и для чего они нужны все знают. А вот что такое ротация логов многие могут не знать. Или знать, что это такое, но не использовать в повседневной жизни (к коим относился я до недавних пор).

Ротация логов – это, если простыми словами, то простой сдвиг, после которого текущий файл логов “обрубается”, архивируется (по желанию) и логи начинают писаться в чистый файл. Для ротации логов используют logrotate, конфигурационные файлы которого можно найти в /etc/logrotate.d/. Скорее всего, у вас на сервере эта папка не пуста и можно найти конфиги для postgresql’а, nginx’а и много чего еще.

Мы же с вами рассмотрим настройку ротации логов для unicorn’а. Если ваш ресурс посещает множество людей, то лог файл (production.log) становится нескромно большим, т.к. хранит все обращения ко всем страницам, все произошедшие ошибки и прочую информацию. Для того, чтобы этого избежать, создадим файл /etc/logrorate.d/#{your_app_name}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"/home/deployer/projects/#{your_app_name}/shared/log/production.log"
{
  daily
  missingok
  rotate 180
  compress
  dateext

  delaycompress

  lastaction
    pid=/home/deployer/projects/#{your_app_name}/shared/pids/unicorn.pid
    test -s $pid && kill -USR1 "$(cat $pid)"
  endscript
}

Теперь по порядку:

  • в кавычках мы указываем какие файлы будут “вращаться”, можно использовать “*” для нескольких файлов
  • daily – сообщает logrotate “прокручивать” файл(ы) логов раз в день.
  • missingok – не выдавать ошибочное сообщение, если файл логов отсутствует.
  • rotate – лог будет “сдвинут” 180 раз, прежде, чем будет удален.
  • compress – старые файлы будут заархивированы (gzip по умолчанию) для того, чтобы занимать меньше места.
  • dateext – полезная опция, которая дописывает в название файла дату, формат можно изменить опцией dateformat вместо скучных названий, вроде (blog.log.1)
  • delaycompress – откладывает сжатие на один цикл
  • lastaction и endscript – строки между данными директивами будут выполнены (с применением /bin/sh) после каждой ротации. Мы используем их, чтобы сообщить unicorn’у и всем его воркерам (USR1 сигнал) заново открыть файлы логов.

После того, как мы написали конфиг, мы должны сообщить logrotate об этом, я предпочитаю сделать это с флагом -f (force), который заново считывает свои конфиги делает один “оборот” логов.

sudo logrotate -f /etc/logrotate.d/#{your_app_name}

Как вы, наверное, уже догадались, #{your_app_name} необходимо заменить именем вашего приложения. После прочтения данного поста, вы с легкостью сможете настроить ротацию логов для чего угодно. Удачи вам и не теряйте свои логи :)

Комментарии