Ротация логов в nginx. Анализ логов.
27.06.2009, рубрики: how-to | Теги: servers | 1 комментарий »
Ротация и анализ логов, зачастую являются важными компонентами административного процесса любого сервера. В сети много инфы подобного рода, но в большенстве своей, она ориентированна на сервер Apache, в нашем же случае разговор пойдет о настройке или создании инструментов для обслуживания сервера nginx.
Для чего служит ротация? Ротация – это переодическое архивирование логов сервера. Зачастую, когда сервер испытывает нагрузки, логи ведуться очень интенсивно, и если не производить ротацию, то за считанные дни они могу отъесть все свободное место на винте. Так же, надо понимать, что работа сервера, процесс непрерывный, значит и ротацию необходимо провести таким образом, что-бы не навредить статистике, или не потерять записи в логи.
Анализ же выполняется, с той целью, что-бы получать подробную информацию о посещениях сайта, открытых страницах, сгененрированном конексте и т.д. Как все это осуществить, смотрим ниже.
Ротация логов
За время установки сервера и эксперементов с ним, я выяснил одну маленькую деталь, вот она:
- du -sh error.log localhost.access.log access.log
- 645M error.log
- 2,1M localhost.access.log
- 2,1M access.log
Как видно, error.log оттяпал 645Mb без всяких проблем. Конечно, можно просто удалить лог-файл, а можно написать коротенький скрипт, который будет делать ротацию логов, а можно воспользоваться утилитой logrotate. К тому же на серверах, удаление логов просто не возможно, они могут нести в себе ценную информацию для системных администраторов.
Способ первый. Скрипт.
Я написал простенький скрипт, который поможет вам проводить ротацию логов, экономя ваше место на диске и ваше время.
- #!/bin/bash
- cd /home/www/linuxspace.org/log/
- mv access.log access.log.bak
- mv error.log error.log.bak
- mv localhost.access.log localhost.access.log.bak
- sudo pkill -USR1 nginx -u root
- tar cjf `date '+%d-%B-%Y'.tar.bz2` *.bak
- mv *.tar.bz2 /home/www/linuxspace.org/archives/
- rm *.bak
- #---------------------------------------------------
- #or pidof nginx
- #or cat /home/www/linuxspace.org/nginx.pid > $$
- #or pgrep nginx -u root
- #or sudo pkill -f nginx -u root
- #--------------------------------------------------
Те строки которые закоментированны, это альтернативные способы, которые я нашел в поиске оптимального для меня, по этому я специально сохранил их, если кто-то решит использовать их.
Принцип работы скрипта прост до безобразия.
В первой строке переходим в папку с логами.
Потом переименовываем все логи.
Далее отсылаем на сервер сигнал USR1
Далее делаем backup.
И переносим архив в папку для архивов.
Удаляем старые файлы
Вот как будет выглядеть результат.
- ls -la
- итого 248
- drw-r--r-- 2 www www 4096 2009-06-27 00:00 .
- drwxr--r-- 7 www www 4096 2009-06-27 02:18 ..
- -rw-r--r-- 1 www www 231534 2009-06-22 18:57 22-Июнь-2009.tar.bz2
- -rw-r--r-- 1 root root 1596 2009-06-24 13:09 24-Июнь-2009.tar.bz2
- -rw-r--r-- 1 root root 1605 2009-06-27 00:00 27-June-2009.tar.bz2
Мы получим архив, с точной датой, когда он был создан. Если сервер перегружен и логи пишутся часто, то ротацию желательно выполнять раз в один два дня.
Для этого создаем задание crontab:
- crontab -e
- # m h dom mon dow command
- 00 00 * * * sh /home/www/linuxspace.org/private/logsrotation.sh
Т.е. Каждый день в 00:00 будет проводиться ротация логов. Не забывайте это все делается для пользователя www из группы www, по этому задание должно стоять в рутовском crontab и скрипт исполняться с правами рута.
Способ воторой. logrotate
Скорее всего программа есть уже у вас в системе, на установку время тратить не будем.
Файлы конфигурации лежат по адресу /etc/logrotate.d/:
- ls -la /etc/logrotate.d/
- итого 80
- drwxr-xr-x 2 root root 4096 2009-06-26 16:16 .
- drwxr-xr-x 152 root root 12288 2009-06-27 02:04 ..
- -rw-r--r-- 1 root root 293 2009-06-11 06:26 apache2
- -rw-r--r-- 1 root root 126 2009-04-17 08:17 apport
- -rw-r--r-- 1 root root 84 2009-04-17 07:27 apt
- -rw-r--r-- 1 root root 79 2009-02-10 15:45 aptitude
- -rw-r--r-- 1 root root 148 2009-04-01 11:32 checkbox
- -rw-r--r-- 1 root root 248 2009-04-17 12:20 cups
- -rw-r--r-- 1 root root 111 2009-01-07 14:32 dpkg
- -rw-r--r-- 1 root root 146 2009-04-07 19:49 jockey-common
- -rw-r--r-- 1 root root 101 2009-04-20 20:44 mpd
- -rw-r--r-- 1 root root 837 2009-05-14 13:39 mysql-server
- -rw-r--r-- 1 root root 384 2009-06-27 03:49 nginx
- -rw-r--r-- 1 root root 94 2009-02-20 19:25 ppp
- -rw-r--r-- 1 root root 114 2009-03-02 12:03 unattended-upgrades
- -rw-r--r-- 1 root root 189 2009-03-27 19:18 winbind
- -rw-r--r-- 1 root root 106 2009-04-09 04:44 wpa_action
- -rw-r--r-- 1 root root 114 2009-04-09 04:44 wpa_supplicant
Так же, еще ксть конфиг, /etc/logrotate.conf
Как видно из списка выше, есть файл конфигурации и для nginx
Открываем его:
- /home/www/linuxspace.org/log/*.log {
- daily #ежедневная ротация
- missingok #отсутствие файла не является ошибкой
- rotate 52 #хранится история за 52 дней
- compress #ротируемые файлы сжимаются
- delaycompress #ротируемый файл не сжимается, остальные - сжимаются
- notifempty #не обрабатывать пустые файлы
- #create 640 root adm #в этом нет необходимости
- sharedscripts #prerotate/postrotate выполняются только 1 раз
- #выполняется до начала ротации, в данном случае сбор статистики
- prerotate
- /usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=linuxspace.org
- endscript
- #выполняется после ротации,в данном случае посылаем на сервер сигнал USR1
- postrotate
- [ ! -f /home/www/linuxspace.org/nginx.pid ] || kill -USR1 `cat /home/www/linuxspace.org/nginx.pid`
- endscript
- }
Теперь когда все готово. Можно провести запуск logrotate в отладочном режиме. Т.е. логи тронуты не будут.
Вы же сможете удостовериться, что все настроенно правильно, увидeв вывод системной информации:
- sudo logrotate -d /etc/logrotate.d/nginx
Если все окей, запускаем в рабочем режиме:
- sudo logrotate -v -f /etc/logrotate.d/nginx
Опции:
-d – запуск в отладочном режиме
-v – вывод диагностики на экран во время ротации
-f – Заставляет logrotate выполнить ротацию логов.
Анализ логов, awstats, webalizer, analog
Анализ логов, важная штука, для этих целей существует целый набор утилит.
Все они бесплатны, хороши и доступны для скачивания с сети или установки с репозитория. \
Я буду рассматривать три наиболее популярные, это: awstats, webalizer и analog
Что бы время даром не терять, установи их все в систему одной командой:
- aptitude install awstats webalizer analog
Analog
Программа проста и все что необходимо, для того, что-бы получить отчет, подправить пару конфигов.
Первый, это:
- nano /usr/local/nginx/conf/nginx.conf
Указываем нужный формат для логов:
- access_log /home/www/linuxspace.org/log/access.log combined;
Второй, это:
- nano /etc/analog.cfg
Там просто указываем тех. данные.
- OUTFILE /home/www/linuxspace.org/log/report.html
- HOSTNAME "[linuxspace.org]"
- LANGFILE /usr/share/analog/lang/ru.lng
Названия говорят сами за себя и я думаю нет необходимости их комментить.
Теперь можно выполнить программу:
- sudo analog
и ищем отчет там, где его указали в конфиге analog.
Вы увидите там много полезной информации такого плана:

webalizer
Этот пожалуй самый популярный, например мой хостер юзает тоже именно этот программынй пакет, возможно потому, что он очень прост в настройке, а его конфиг хорошо задокументирован.
Вызвать русскаоязычную помощь по программе можно командой:
- sudo webalizer -h
Файл конфига лежит там, где и должен лежать:
- nano /etc/webalizer/webalizer.conf
Самое вкусное из конфига:
- # Определяет журнал сервера
- LogFile /home/www/linuxspace.org/log/access.log
- # Определяет месторасположение отчетов Webalizer
- OutputDir /home/www/linuxspace.org/stats/web/
- # Имя хоста, который мониторится
- HostName localhost
- # Задает имя файла, в котором будет содержаться информация о посещении веб-сервера на протяжении одного года
- HistoryName HistoryName webalizer.hist
- #Возрастающая обработка позволяет использовать несколько относительно небольших файлов #журналов вместо одного огромного. Данная опция полезна для больших сайтов, период ротации #журналов которых меньше, чем период ротации обыкновенных веб-серверов.
- Incremental
- # Задает заголовок отчета. Русские заголовки поддерживаются (при условии настроенной локализации системы)
- ReportTitle
- # Определяет расширение для файлов-отчетов
- HTMLExtension
- # Позволяет использовать безопасное соединение HTTPS для просмотра статистики
- UseHTTPS
- # Директива PageType указывает расширения файлов, которые будут считаться веб-страницами.
- PageType htm*
- PageType cgi
- PageType phtml
- PageType php*
- PageType pl
Опции Webalizer:
-c файл – альтернативный файл конфигурации. По умолчанию используется файл /etc/webalizer.conf.
-n name – имя машины, которое будет отображено при выводе статистики.
-o каталог – каталог, в который будут помещены файлы статистики.
-t название – заголовок отчета.
-F (clf | ftp | squid) – тип журнала: clf или ftp или squid.
Запуск:
- sudo webalizer
Вот пример отчета.

Awstats
Awstats можно устанавливать разными способами, в принципе без разницы, так как написан он на Perl, и без интерпритатора работать не может.
Ставим:
- sudo aptitude install awstats
Или загружаем последнюю версию с http://awstats.sourceforge.net
Все настройки AWstats находятся в директории /etc/awstats, это при условии, что вы ставили его и репов, в противном случае ищите их в скаченном ахиве по адресу awstats-6.9/wwwroot. Каждый конфиг именуется слудющим образом: awstats.название_хоста.conf. Например, для linuxspace.org файл будет именоваться следующим образом: awstats.linuxspace.org.conf .
По умолчанию (имею ввиду, что ставили из репов), AWstats предоставляет дефолтный файл конфигурации: /etc/awstats/awstats.conf. Чтобы сделать свою конфигурацию, необходимо просто скопировать дефотный файл и отредактировать его:
- sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.linuxspace.org.conf
Если вы качали сырцы, то делаем так:
- cd /место_куда_скачали_архив/
- tar xvf awstats-6.9.tar.gz
- cd awstats-6.9/wwwroot/
- sudo cp awstats.model.conf /etc/awstats/awstats.localhost.conf
Далее правим конфиг:
- sudo nano /etc/awstats/awstats.linuxspace.org.conf
Анализируемый лог файл:
- LogFile="LogFile=/home/www/linuxspace.org/log/access.log"
- # Хост, чей лог будет анализироваться
- SiteDomain="linuxspace.org"
- # Директория, куда будет складироваться сгенерированная статистика посещений
- DirData="."
- #Тип лог файлов которые вы хотите анализировать
- LogType=W
- #Возможность обновлять статистику из браузера
- AllowToUpdateStatsFromBrowser=1
- #Путь к cgi-bin
- DirCgi="/cgi-bin"
- # Язык интерфейса
- Lang="ru"
- # Декодирование поисковых фраз, по кот. был переход на сайт
- LoadPlugin="decodeutfkeys"
- # График стран на основе IP посетителей (снижает скорость работы анализатора на 10%!)
- LoadPlugin="geoipfree"
Для корректной работы плагинов, нужен дополнительный пакет
- sudo aptitude install libgeo-ipfree-perl
Запуск программы из консоли
/usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=linuxspace.org
На этом пожалуй все, много полезной информации по всем трем програмам, вы найдете в man. А вдумчивое чтение, обеспечит всей необходимой и недостающей тут информации.


Отличное пояснение, буду заходить
Спасибо. Удачи