Sat 29 Apr 2006
Сбор Статиcтики О Работе Сервера nginx При Помощи rrdtool
Posted by Scoundrel under Development , Networks ·
Неcколько дней тому назад я установил nginx на одном из своих adult-проектов как reverse proxy server и сервер для раздачи статичечких файлов. Вчера, когда трафик с этого сервера достиг 200Mbit/сек и, наверное, потому, что все админы любят рисовать графики, я решил отобразить статистику работы сервера nginx на графиках чтобы увидеть загрузку не только в мегабитах и системных параметрах загрузки сервера. В результате работы над этими графиками родился скрипт на perl, использующий модель RRDs для создания и управления базой rrd и рисования очень красивых графиков.
Скрипт очень прост в установке и настройке. Вы можете использовать следующий набор шагов для получения симпатичных графиков со статистикой работы вашего nginx-сервера:
- Добавьте в конфигурационный файл nginx следующий раздел location:
http {
...
server {
listen SOME.IP.ADD.RESS;
...
location /nginx_status {
stub_status on;
access_log off;
allow SOME.IP.ADD.RESS;
deny all;
}
...
}
...
} - Проверьте свою конфигурацию следующей командой:
# /your/installation/sbin/nginx -t
2006/04/29 04:24:36 [info] 31676#0: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
2006/04/29 04:24:36 [info] 31676#0: the configuration file /opt/nginx/conf/nginx.conf was tested successfully
#Если вы получите сообщение о том, что директива stub_status неизвестна, то проверьте включена ли опция —-with-http_stub_status_module при компиляции nginx.
- Если проверка конфигурации прошла успешно, перезапустите nginx и проверьте статистику:
croesus:~# GET http://your-domain.com/nginx_status
Active connections: 1492
server accepts handled requests
2124355 2124355 8278635
Reading: 6 Writing: 405 Waiting: 1081
croesus:~# - Скачайте скрипт генерации графиков: rrd_nginx.pl и сделайте его исполнимым:
# chmod +x rrd_nginx.pl
- Измените настройки в файле rrd_nginx.pl, чтобы дать скрипту знать, куда складывать rrd-базу и картинки со статистикой:
#!/usr/bin/perl
use RRDs;
use LWP::UserAgent;
# определите путь к базам для rrdtool
my $rrd = '/opt/rrd';
# определите путь к картинкам
my $img = '/opt/rrd/html';
# определите URL для статистики nginx
my $URL = "http://your-domain.com/nginx_status";
... - Последний шаг в настройке - добавление следующей команды в файл /etc/crontab и перезапуск демона cron:
* * * * * root /some/path/rrd_nginx.pl
Когда все приготовления будут завершены, Вы получите в каталоге $img следующие графики:
Вот и все. Если у Вас есть какие-либо коментарии или пожелания, оставляйте их в разделе коментариев. Если заметка вам понравилась, можете поддержать автора обратив внимание на рекламные объявления на этой странице. ;-).
- Useful Cacti Templates to Monitor Your Servers
- Compiling nginx in RedHat Linux: PCRE library problem
- Стриминг Flash Video при помощи Nginx
- HAProxy - Надежный, высокопроизводительный балансировщик нагрузки для TCP/HTTP
- Master-master replication example
April 30th, 2006 at 8:03 am
Monitorix is another lightweight tool perl-based and web-based to monitorize easily your Linux/UNIX servers.
Try it!
June 27th, 2006 at 11:05 am
У меня странно работает. Запросы в секунду показывает нормально, а вот с другими - беда.
Сначала показал совсем левые значения из миллионных величин (пр: Total Current: 450.0 m)
В дальнейшем так же 4300.0, что не сходится даже со строкой
print “RQ:$requests; TT:$total; RD:$reading; WR:$writing; WA:$waiting\n”;
которая все показывает правильно…
где собака порылась?
Вот здесь можно посмотреть:
http://foxtrot355.server4you.de/stat.html
June 29th, 2006 at 10:09 am
Нашел ошибку!
вместо:
“DS:total:ABSOLUTE:120:0:60000″,
“DS:reading:ABSOLUTE:120:0:60000″,
“DS:writing:ABSOLUTE:120:0:60000″,
“DS:waiting:ABSOLUTE:120:0:60000″,
надо:
“DS:total:GAUGE:120:0:60000″,
“DS:reading:GAUGE:120:0:60000″,
“DS:writing:GAUGE:120:0:60000″,
“DS:waiting:GAUGE:120:0:60000″,
Теперь данные будут правильно отображаться
August 28th, 2006 at 3:14 am
[…] I can only find one case of a Rails developer who is using nginx in a production setup, although he appears to be very happy with it. […]
September 8th, 2006 at 6:52 pm
>У меня странно работает. Запросы в секунду >показывает нормально, а вот с другими - беда.
Число обработанных за период соединений надо брать из другого показателя, т.к. $total отображает число установленных соединений на момент запроса.
Предлагаю заменить
if (/^\s+(\d+)\s+(\d+)\s+(\d+)/) {
> $requests = $3;
> $connects = $1;
> }
Хранение реализовать аналогично хранению $requests, c типом хранилища ABSOLUTE.
(Добавить в RRDs::create
строку “DS:connects:ABSOLUTE:120:0:100000000″,)
Чтобы получать разницу в количестве обработанных соединений между запусками, предыдущее значение записывается в отдельный файл nginx.cns (аналогично хранению числа запросов в файле nginx.rqs).
Добавляемый код:
+my $connects=0;
….
+# get connects
+if (! -e “$rrd/nginx1.cns”) {
+ $cns = 0;
+} else {
+ open RQS, “;
+ close RQS;
+ $cns = $connects if ($cns $rrd/nginx1.cns”;
+print RQS $connects;
+close RQS;
Также мне не нравится поведение в случае, если новый счетчик меньше старого - это означает что он уже успел сброситься по какой-то причине. Но это не означает что его не стоит использовать.
$rqs = $requests if ($rqs
September 10th, 2006 at 1:22 pm
К сожалению не все в сообщении вставилось как ожидалось, но думаю основную идею донес.
February 1st, 2007 at 3:33 pm
So what does it mean if the graphs are never updating (i.e. stay blank). I’ve checked the .conf, nginx_status page as well as making sure the cron is running but the graphs are never being populated. I’ve tried a few things but can’t seem to get it to work.
user@machine ~> nginx -v
nginx version: nginx/0.5.10
user@machine ~> php -v
PHP 4.3.10-18 (cli) (built: Nov 3 2006 21:56:29)
[snip]
Thanks.
March 30th, 2007 at 7:33 pm
It’s possible to have statistic of traffic transfered via nginx?
PavelR: Can you paste all code ?
September 29th, 2007 at 4:31 am
Last version at http://nikolas.ru/nginx/
ex: http://nikolas.ru/nginx/nginx-rrd_new.pl
February 6th, 2008 at 11:21 pm
[…] Monitoring nginx Server Statistics With rrdtool :: Homo-Adminus Blog by Alexey Kovyrin As the result, I have created perl script, which uses RRDs perl module to create and manage rrd-database and very beautiful graphs. (tags: nginx monitoring perl scripts rrd) […]
April 21st, 2008 at 8:47 am
[…] En Debian Etch tuve que instalar la librería Perl libwww-perl y re-compilar nginx con el parámetro –with-http_stub_status_module, para habilitar el módulo ngx_http_stub_status_module. Para usar este módulo hay que añadir unas líneas en el fichero de configuración. Es muy simple, pero no voy a entrar en ello. Podéis leer más en la página del wiki del módulo (el enlace anterior) o en este otro enlace. […]