Ротация логов в nginx. Анализ логов.

27.06.2009, рубрики: how-to | Теги: | 1 комментарий »

Ротация и анализ логов, зачастую являются важными компонентами административного процесса любого сервера. В сети много инфы подобного рода, но в большенстве своей, она ориентированна на сервер Apache, в нашем же случае разговор пойдет о настройке или создании инструментов для обслуживания сервера nginx.

Для чего служит ротация? Ротация – это переодическое архивирование логов сервера. Зачастую, когда сервер испытывает нагрузки, логи ведуться очень интенсивно, и если не производить ротацию, то за считанные дни они могу отъесть все свободное место на винте. Так же, надо понимать, что работа сервера, процесс непрерывный, значит и ротацию необходимо провести таким образом, что-бы не навредить статистике, или не потерять записи в логи.

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

Ротация логов

За время установки сервера и эксперементов с ним, я выяснил одну маленькую деталь, вот она:

  1. du -sh error.log localhost.access.log access.log
  2. 645M    error.log
  3. 2,1M    localhost.access.log
  4. 2,1M    access.log

Как видно, error.log оттяпал 645Mb без всяких проблем. Конечно, можно просто удалить лог-файл, а можно написать коротенький скрипт, который будет делать ротацию логов, а можно воспользоваться утилитой logrotate. К тому же на серверах, удаление логов просто не возможно, они могут нести в себе ценную информацию для системных администраторов.

Способ первый. Скрипт.

Я написал простенький скрипт, который поможет вам проводить ротацию логов, экономя ваше место на диске и ваше время.

  1. #!/bin/bash
  2.  
  3. cd /home/www/linuxspace.org/log/
  4. mv access.log access.log.bak
  5. mv error.log  error.log.bak
  6. mv localhost.access.log localhost.access.log.bak
  7. sudo pkill -USR1 nginx -u root
  8. tar cjf `date '+%d-%B-%Y'.tar.bz2` *.bak
  9. mv *.tar.bz2 /home/www/linuxspace.org/archives/
  10. rm *.bak
  11.  
  12. #---------------------------------------------------
  13. #or pidof nginx
  14. #or cat /home/www/linuxspace.org/nginx.pid > $$
  15. #or pgrep nginx -u root
  16. #or sudo pkill -f nginx -u root
  17. #--------------------------------------------------

Те строки которые закоментированны, это альтернативные способы, которые я нашел в поиске оптимального для меня, по этому я специально сохранил их, если кто-то решит использовать их.

Принцип работы скрипта прост до безобразия.
В первой строке переходим в папку с логами.
Потом переименовываем все логи.
Далее отсылаем на сервер сигнал USR1
Далее делаем backup.
И переносим архив в папку для архивов.
Удаляем старые файлы

Вот как будет выглядеть результат.

  1. ls -la
  2. итого 248
  3. drw-r--r-- 2 www  www    4096 2009-06-27 00:00 .
  4. drwxr--r-- 7 www  www    4096 2009-06-27 02:18 ..
  5. -rw-r--r-- 1 www  www  231534 2009-06-22 18:57 22-Июнь-2009.tar.bz2
  6. -rw-r--r-- 1 root root   1596 2009-06-24 13:09 24-Июнь-2009.tar.bz2
  7. -rw-r--r-- 1 root root   1605 2009-06-27 00:00 27-June-2009.tar.bz2

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

  1. crontab -e
  2. # m h  dom mon dow   command
  3. 00 00 * * * sh /home/www/linuxspace.org/private/logsrotation.sh

Т.е. Каждый день в 00:00 будет проводиться ротация логов. Не забывайте это все делается для пользователя www из группы www, по этому задание должно стоять в рутовском crontab и скрипт исполняться с правами рута.

Способ воторой. logrotate

Скорее всего программа есть уже у вас в системе, на установку время тратить не будем.
Файлы конфигурации лежат по адресу /etc/logrotate.d/:

  1. ls -la /etc/logrotate.d/
  2. итого 80
  3. drwxr-xr-x   2 root root  4096 2009-06-26 16:16 .
  4. drwxr-xr-x 152 root root 12288 2009-06-27 02:04 ..
  5. -rw-r--r--   1 root root   293 2009-06-11 06:26 apache2
  6. -rw-r--r--   1 root root   126 2009-04-17 08:17 apport
  7. -rw-r--r--   1 root root    84 2009-04-17 07:27 apt
  8. -rw-r--r--   1 root root    79 2009-02-10 15:45 aptitude
  9. -rw-r--r--   1 root root   148 2009-04-01 11:32 checkbox
  10. -rw-r--r--   1 root root   248 2009-04-17 12:20 cups
  11. -rw-r--r--   1 root root   111 2009-01-07 14:32 dpkg
  12. -rw-r--r--   1 root root   146 2009-04-07 19:49 jockey-common
  13. -rw-r--r--   1 root root   101 2009-04-20 20:44 mpd
  14. -rw-r--r--   1 root root   837 2009-05-14 13:39 mysql-server
  15. -rw-r--r--   1 root root   384 2009-06-27 03:49 nginx
  16. -rw-r--r--   1 root root    94 2009-02-20 19:25 ppp
  17. -rw-r--r--   1 root root   114 2009-03-02 12:03 unattended-upgrades
  18. -rw-r--r--   1 root root   189 2009-03-27 19:18 winbind
  19. -rw-r--r--   1 root root   106 2009-04-09 04:44 wpa_action
  20. -rw-r--r--   1 root root   114 2009-04-09 04:44 wpa_supplicant

Так же, еще ксть конфиг, /etc/logrotate.conf
Как видно из списка выше, есть файл конфигурации и для nginx

Открываем его:

  1. /home/www/linuxspace.org/log/*.log {
  2.         daily #ежедневная ротация
  3.         missingok #отсутствие файла не является ошибкой
  4.         rotate 52 #хранится история за 52 дней
  5.         compress #ротируемые файлы сжимаются
  6.         delaycompress #ротируемый файл не сжимается, остальные - сжимаются
  7.         notifempty #не обрабатывать пустые файлы
  8.         #create 640 root adm #в этом нет необходимости
  9.         sharedscripts #prerotate/postrotate выполняются только 1 раз
  10.         #выполняется до начала ротации, в данном случае сбор статистики
  11.         prerotate
  12.         /usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=linuxspace.org
  13.         endscript
  14.         #выполняется после ротации,в данном случае посылаем на сервер сигнал USR1
  15.         postrotate
  16.                 [ ! -f /home/www/linuxspace.org/nginx.pid ] || kill -USR1 `cat /home/www/linuxspace.org/nginx.pid`
  17.         endscript
  18. }

Теперь когда все готово. Можно провести запуск logrotate в отладочном режиме. Т.е. логи тронуты не будут.
Вы же сможете удостовериться, что все настроенно правильно, увидeв вывод системной информации:

  1. sudo logrotate -d /etc/logrotate.d/nginx

Если все окей, запускаем в рабочем режиме:

  1. sudo logrotate -v -f /etc/logrotate.d/nginx

Опции:
-d – запуск в отладочном режиме
-v – вывод диагностики на экран во время ротации
-f – Заставляет logrotate выполнить ротацию логов.

Анализ логов, awstats, webalizer, analog

Анализ логов, важная штука, для этих целей существует целый набор утилит.
Все они бесплатны, хороши и доступны для скачивания с сети или установки с репозитория. \
Я буду рассматривать три наиболее популярные, это: awstats, webalizer и analog
Что бы время даром не терять, установи их все в систему одной командой:

  1. aptitude install awstats webalizer analog

Analog
Программа проста и все что необходимо, для того, что-бы получить отчет, подправить пару конфигов.
Первый, это:

  1. nano /usr/local/nginx/conf/nginx.conf

Указываем нужный формат для логов:

  1. access_log  /home/www/linuxspace.org/log/access.log combined;

Второй, это:

  1. nano /etc/analog.cfg

Там просто указываем тех. данные.

  1. OUTFILE /home/www/linuxspace.org/log/report.html
  2. HOSTNAME "[linuxspace.org]"
  3. LANGFILE /usr/share/analog/lang/ru.lng

Названия говорят сами за себя и я думаю нет необходимости их комментить.
Теперь можно выполнить программу:

  1. sudo analog

и ищем отчет там, где его указали в конфиге analog.
Вы увидите там много полезной информации такого плана:

webalizer
Этот пожалуй самый популярный, например мой хостер юзает тоже именно этот программынй пакет, возможно потому, что он очень прост в настройке, а его конфиг хорошо задокументирован.
Вызвать русскаоязычную помощь по программе можно командой:

  1. sudo webalizer -h

Файл конфига лежит там, где и должен лежать:

  1. nano /etc/webalizer/webalizer.conf

Самое вкусное из конфига:

  1. # Определяет журнал сервера
  2. LogFile        /home/www/linuxspace.org/log/access.log
  3.  
  4. # Определяет месторасположение отчетов Webalizer
  5. OutputDir      /home/www/linuxspace.org/stats/web/
  6.  
  7. # Имя хоста, который мониторится
  8. HostName   localhost
  9.  
  10. # Задает имя файла, в котором будет содержаться информация о посещении веб-сервера на протяжении одного года
  11. HistoryName    HistoryName webalizer.hist
  12.  
  13. #Возрастающая обработка позволяет использовать несколько относительно небольших файлов #журналов вместо одного огромного. Данная опция полезна для больших сайтов, период ротации #журналов которых меньше, чем период ротации обыкновенных веб-серверов.
  14. Incremental
  15.  
  16. # Задает заголовок отчета. Русские заголовки поддерживаются (при условии настроенной локализации системы)
  17. ReportTitle
  18.  
  19. # Определяет расширение для файлов-отчетов
  20. HTMLExtension
  21.  
  22. # Позволяет использовать безопасное соединение HTTPS для просмотра статистики
  23. UseHTTPS
  24.  
  25. # Директива PageType указывает расширения файлов, которые будут считаться веб-страницами.
  26. PageType     htm*
  27. PageType     cgi
  28. PageType     phtml
  29. PageType     php*
  30. PageType     pl

Опции Webalizer:
-c файл – альтернативный файл конфигурации. По умолчанию используется файл /etc/webalizer.conf.
-n name – имя машины, которое будет отображено при выводе статистики.
-o каталог – каталог, в который будут помещены файлы статистики.
-t название – заголовок отчета.
-F (clf | ftp | squid) – тип журнала: clf или ftp или squid.

Запуск:

  1. sudo webalizer

Вот пример отчета.

Awstats
Awstats можно устанавливать разными способами, в принципе без разницы, так как написан он на Perl, и без интерпритатора работать не может.
Ставим:

  1. 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. Чтобы сделать свою конфигурацию, необходимо просто скопировать дефотный файл и отредактировать его:

  1. sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.linuxspace.org.conf

Если вы качали сырцы, то делаем так:

  1. cd /место_куда_скачали_архив/
  2. tar xvf awstats-6.9.tar.gz
  3. cd awstats-6.9/wwwroot/
  4. sudo cp awstats.model.conf /etc/awstats/awstats.localhost.conf

Далее правим конфиг:

  1. sudo nano /etc/awstats/awstats.linuxspace.org.conf

Анализируемый лог файл:

  1. LogFile="LogFile=/home/www/linuxspace.org/log/access.log"
  2. # Хост, чей лог будет анализироваться
  3. SiteDomain="linuxspace.org"
  4. # Директория, куда будет складироваться сгенерированная статистика посещений
  5. DirData="."
  6. #Тип лог файлов которые вы хотите анализировать
  7. LogType=W
  8. #Возможность обновлять статистику из браузера
  9. AllowToUpdateStatsFromBrowser=1
  10. #Путь к cgi-bin
  11. DirCgi="/cgi-bin"
  12. # Язык интерфейса
  13. Lang="ru"
  14. # Декодирование поисковых фраз, по кот. был переход на сайт
  15. LoadPlugin="decodeutfkeys"
  16. # График стран на основе IP посетителей (снижает скорость работы анализатора на 10%!)
  17. LoadPlugin="geoipfree"

Для корректной работы плагинов, нужен дополнительный пакет

  1. sudo aptitude install libgeo-ipfree-perl

Запуск программы из консоли

/usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=linuxspace.org

На этом пожалуй все, много полезной информации по всем трем програмам, вы найдете в man. А вдумчивое чтение, обеспечит всей необходимой и недостающей тут информации.


1 комментарий на запись “Ротация логов в nginx. Анализ логов.”

  1. 1 alex сказала в 18:04, 06.09.2011:

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

    Спасибо. Удачи


Оставить комментарий

  • Доступные теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">

  • *