Многие системные администраторы выбирают веб-сервер lighttpd за его простоту и удобство, однако очень часто встаёт вопрос мониторинга нагрузки на веб-сервер. Ниже будет показано как настроить мониторинг lighttpd с помощью модуля rrdtool.
Итак, уточняем начальные условия: сервер под управлением Ubuntu Server 8.10 с запущенным на нём lighttpd. Нужно организовать мониторинг нагрузки этого веб-сервера.
Первым делом установим пакет rrdtool:
apt-get install rrdtool
Далее действовать будем практически в полном соответствии с официальной инструкцией, опубликованной на странице проекта lighttpd, разве что будем делать поправки под особенности Debian-based дистрибутивов. Заодно отдельно настроим ведение лога скриптом-построителем графика.
Включаем модуль rrdtool:
lighty-enable-mod rrdtool
Далее открываем в редакторе файл /etc/lighttpd/conf-enabled/10-rrdtool.conf и приводим его к следующему виду:
# Собственно подключение модуля rrdtool server.modules += ( "mod_rrdtool" ) # Путь к бинарному файлу rrdtool rrdtool.binary = "/usr/bin/rrdtool" # Путь к файлу, где будет храниться информация для rrdtool # Файл существовать не должен. Он будет создан при первом запуске веб-сервера # Соответственно права на директорию, где будет этот файл, должны позволить пользователю, # от которого работает lighttpd, (в данном случае это www-data) создать этот файл. rrdtool.db-name = "/var/www/lighttpd.rrd"
После этого перезапускаем веб-сервер:
invoke-rc.d lighttpd force-reload
И убеждаемся что файл создался:
ls -lh /var/www/lighttpd.rrd
Далее создадим директорию, в которую будем складывать графики загрузки сервера:
mkdir -p /var/www/lighttpd-stat/html
Следующим шагом создадим скрипт, с помощью которого будем генерировать графики. Он так же практически полностью скопирован с официальной инструкцией, за исключением одного: вывод сообщений в stdout заменён записью в лог. Вот листинг обновлённого скрипта:
#!/bin/sh # Путь к rrdtool RRDTOOL=/usr/bin/rrdtool # Директория где будут графики OUTDIR=/var/www/lighttpd-stat/html # Путь к файлу с данным INFILE=/var/www/lighttpd.rrd # Размер графика (без учёта полей) WIDTH=400 HEIGHT=100 # Лог для сообщений от rrdtool LOGFILE=/var/log/lighttpd-stat.log # Префикс имени файла OUTPRE=lighttpd-traffic # Описываем графики DISP="-v bytes --title TrafficWebserver \ DEF:binraw=$INFILE:InOctets:AVERAGE \ DEF:binmaxraw=$INFILE:InOctets:MAX \ DEF:binminraw=$INFILE:InOctets:MIN \ DEF:bout=$INFILE:OutOctets:AVERAGE \ DEF:boutmax=$INFILE:OutOctets:MAX \ DEF:boutmin=$INFILE:OutOctets:MIN \ CDEF:bin=binraw,-1,* \ CDEF:binmax=binmaxraw,-1,* \ CDEF:binmin=binminraw,-1,* \ CDEF:binminmax=binmaxraw,binminraw,- \ CDEF:boutminmax=boutmax,boutmin,- \ AREA:binmin#ffffff: \ STACK:binmax#f00000: \ LINE1:binmin#a0a0a0: \ LINE1:binmax#a0a0a0: \ LINE2:bin#efb71d:incoming \ GPRINT:bin:MIN:%.2lf \ GPRINT:bin:AVERAGE:%.2lf \ GPRINT:bin:MAX:%.2lf \ AREA:boutmin#ffffff: \ STACK:boutminmax#00f000: \ LINE1:boutmin#a0a0a0: \ LINE1:boutmax#a0a0a0: \ LINE2:bout#a0a735:outgoing \ GPRINT:bout:MIN:%.2lf \ GPRINT:bout:AVERAGE:%.2lf \ GPRINT:bout:MAX:%.2lf" # Генерируем графики $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE # Префис имени файла OUTPRE=lighttpd-requests # Описываем графики DISP="-v req --title RequestsperSecond -u 1 \ DEF:req=$INFILE:Requests:AVERAGE \ DEF:reqmax=$INFILE:Requests:MAX \ DEF:reqmin=$INFILE:Requests:MIN \ CDEF:reqminmax=reqmax,reqmin,- \ AREA:reqmin#ffffff: \ STACK:reqminmax#00f000: \ LINE1:reqmin#a0a0a0: \ LINE1:reqmax#a0a0a0: \ LINE2:req#00a735:requests" # Генерируем графики $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT >> $LOGFILE
Этот скрипт нужно сохранить под именем /usr/local/bin/lighttpd_rrdtool.sh и сделать его исполняемым:
chmod +x /usr/local/bin/lighttpd_rrdtool.sh
После нужно добавить в файл /etc/crontab запись для периодического запуска этого скрипта:
# Generate lighttpd stat graph */10 * * * * root /usr/local/bin/lighttpd_rrdtool.sh
Через некоторое время в заданной директории начнут появляться графики. Для удобного просмотра полезно создать индексный файл. Для этого достаточно самых минимальных знаний HTML. Автор создал у себя файл следующего содержания:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Lighttpd traffic & requests</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="refresh" content="600"> </head> <body> <h2 align=center>Lighttpd Traffic</h2> <table align=center border=0 cellspacing=0 cellpadding=5> <tr><td><img src="lighttpd-traffic-hour.png" alt="graph1"></td></tr> <tr><td><img src="lighttpd-traffic-day.png" alt="graph2"></td></tr> <tr><td><img src="lighttpd-traffic-month.png" alt="graph3"></td></tr> </table> <h2 align=center>Lighttpd Requests</h2> <table align=center border=0 cellspacing=0 cellpadding=5> <tr><td><img src="lighttpd-requests-hour.png" alt="graph4"></td></tr> <tr><td><img src="lighttpd-requests-day.png" alt="graph5"></td></tr> <tr><td><img src="lighttpd-requests-month.png" alt="graph6"></td></tr> </table> </body> </html>
На это всё. Приятной работы!