Управління балками apache

Apache Web server може не тільки показувати
сторінки користувачам, а й з усієї
ретельністю записувати дані про їх
активності і помилках. За замовчуванням, всі
відомості про запити користувачів пишуться
в один лог, а про помилки - в інший.
Природно, сенс записів і їх положення
на сервері можна довільно налаштовувати,
ніж ми сьогодні і займаємося.

Як я вже сказав в передмові, по
замовчуванням сервер пише лог в два файли - / var / log / httpd / access_log
і error_log в тій же директорії. такий стан
справ визначається, звичайно, в httpd.conf
параметрами TransferLog і ErrorLog. приблизно це
відбувається так:

TransferLog / data / apache / logs / gen_msg
ErrorLog / data / apache / logs / error_msg

Крім поділу логів по файлах ми
можемо створити окремий лог для кожного
домену, який крутиться на Apache.
Припустимо, що на сервері крутиться два
домену та ми хочемо що б кожен домен писав
лог в свою директорію. приклад:


ServerName www.company_a.com
DocumentRoot / data / apache / co_a / html
TransferLog / data / apache / co_a / logs / gen_msg
ErrorLog / data / apache / co_a / logs / error_msg



ServerName www.company_b.com
DocumentRoot / data / apache / co_b / html
TransferLog / data / apache / co_b / logs / gen_msg
ErrorLog / data / apache / co_b / logs / error_msg

Ясно, що в такому конфіги не тільки
документи будуть поділятися за різними
каталогам, але і логи. Відзначте, що записи лежать поза DocumentRoot,
що досить непогано для забезпечення
безпеки.

Існує кілька рівнів за допомогою
яких можна налаштувати глибину записи
активності Web-сервера. Рівні логів такі: emerg,
alert, crit, error, warn, notice, info
і debug. Дописуючи визначення рівня в
кінець директиви, що управляє логгірованіем,
ми можемо визначити, що саме писати.
Наприклад, я хочу змусити Apache записувати
невідкладні записи і попередження тільки
для одного з доменів. У контейнері потрібного
домену робимо так:

Формат, в якому сервер робить записи,
так само можна довільно змінювати. робиться
це директивою LogFormat все в тому ж htttpd.conf.
По дефолту виглядає запис приблизно так:

Для зміни формату треба описати його
в LogFormat і передати ім'я потім в опис балки.
Якщо опис дається поза контейнера, то його
можна використовувати для будь-якого балки, в
даному прикладі задається шлях і формат балки:

LogFormat «Date:% t, Host:% h, User:% u, File Requested:% r» simple
...

...
CustomLog / data / apache / co_a / logs / gen_msg simple
...

Ще один приклад - припустимо я хочу
отримати в лог тільки заголовок запиту від
іншого сайту, пошукової машини.

CustomLog search_eng_log «% i»

Включення і виключення

На своєму сайті я вважаю за краще запити з
власної робочої станції записувати в
окремий лог, це спрощує налагодження
скриптів і самого сервера. вводимо
змінну і по ній визначаємо куди і що
класти:

SetEnvIf Remote_Addr «12.127.17.72» my_stuff
CustomLog logs / my_access complex env = my_stuff
CustomLog logs / gen_msg simple env =! My_stuff

Всім зрозуміло, що логи пристойного сервера
розростаються досить швидко. За замовчуванням
вони очищаються щотижня: access_log
копіюється в access_log.1, access_log.1 в access_log.2 і так
далі (в зворотному порядку зрозуміло).
Однак якщо ви встановлюєте власні
логи, то потрібно задати і їх ротацію. зробити
це можна кількома шляхами. ІМХО краще
всього написати простий скрипт для cron, який
потім регулярно виконувати:

#! / Bin / bash
mv -f gen_msg.2 gen_msg.3
mv -f gen_msg.1 gen_msg.2
mv -f gen_msg gen_msg.1
apachectl graceful

Покажи цю статтю друзям:

Схожі статті