ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Подсчет трафика динамически - интересная фишка



Игорь, подскажите пожалуйста, куда копать?
я может сам попробую...

я так понимаю это надо с r->connection->sent и b->last работать?



27.06.06, Alex Kitschkiruk <rusnginx@xxxxxxxxx> написал(а):
Привет всем!
Игорь, я тут придумал такую штучку...
подсчет трафика и вывод его для каждого server {} или location {}.
Идея в том, чтобы ввести переменную, которую можно было бы вставить в необходимый  server {} или location {}, а потом выводить эту статистику через /nginx_status
Это удобно тем, что позволяет динамически считать и наблюдать трафик от отдельной директории. Особенно интересно это там, где нет ведения логов: в картинках и файлах.
И не надо динамически логи парсить.
Что-то типа из формата логов $bytes_sent, только постоянно ссумируется (до обнуления).
Что-то типа подобного:

    location / {
            proxy_pass         http://111.111.111.111:8000/;
            access_log  /usr/local/nginx/logs/access_web.log  main;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            traffic_count $location[1] "Main directory"
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|swf|zip|rar|doc|xls|exe|pdf|ppt|txt|bmp|js)$ {
        root   /srv/www/htdocs/web1/html/obs;
        access_log   off;
        expires      30d;
        traffic_count $location[2] "Files"
    }

    location ^~ /swf/ {
            valid_referers  none  server_names  *.server.com/;
            if ($invalid_referer) {
                return   403;     }
        root   /srv/www/htdocs/web/html;
        autoindex    on;
        traffic_count $location[3] "SWF files"
        access_log   /usr/local/nginx/logs/access_web_swffiles.log   download;
    }



Для обнуления можно ввести глобальную переменную с форматом наподобие крона (минимальный интервал обнуления сделать не минуту, а час)
                               час день месяц
     traffic_count_zero   */3    *   *
обнуление каждые три часа


В статистике это выгладит примерно так (в байтах):

croesus:~# GET http://your-domain.com/nginx_status
Active connections: 1492
server accepts handled requests
 2124355 2124355 8278635
Reading: 6 Writing: 405 Waiting: 1081
Main directory: 111111
Files: 2223334
SWF files: 8888888


Или просто имена переменных выдавать, а там пусть сами разбираются

croesus:~# GET http://your-domain.com/nginx_status
Active connections: 1492
server accepts handled requests
 2124355 2124355 8278635
Reading: 6 Writing: 405 Waiting: 1081
location[1]: 111111
location[2]: 2223334
location[3]: 8888888

Еще это интересно там, где одновременно отдается "легкая" графика сайта и огромные файлы-архивы или видеофайлы, так как они качаются долго и в логи попадают не равномерно по времени.

Думаю это будет элегантным решением ;)

Что скажете?



 




Copyright © Lexa Software, 1996-2009.