Многие системные администраторы выбирают веб-сервер 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>
На это всё. Приятной работы!
