Пятница, 17 Июль 2009
nginx: статус по url
Продолжаем хачить статус. Вот патч, который добавляет статистику по запрашиваемым url от пользователей.
Статистика собирается по URL которые пришли от пользователя, до всех rewrite, т.е. это именно то, что спросили клиенты. Статистика из памяти не удаляется и в один прекрасный момент наступит ситуация, что память кончилась и новая статистика появляться не будет. Для включения этой функциональности, после наложения патча, надо добавить --with-http_status_heap_module
в опции конфигурации.
Описание директив:
syntax: status_heap уникальный_ключ объем_памяти
default: отсутствует
context: server
Директива устанавливает размер памяти и ключ для подсчета статистики в этом сервере. Если в несколькоих серверах будет использоваться одинаковый ключ и размер — то статистика будет общей.
syntax: status_heap_show
default: отсутствует
context: location
Директива устанавливает, что этот location будет использоваться для отображения статистики для статистики, которая собирается в пределах этого сервера, только для url, который будет передан после имени этого location.
syntax: status_heap_show_all
default: отсутствует
context: location
Директива устанавливает, что этот location будет использоваться для отображения всей статистики для статистики, которая собирается в пределах этого сервера.
Пример использования
Допустим у нас будет конфиг вида:
server {
listen 8080 default;
status_heap default_status_heap 50m;
location / {
root /var/www;
}
}
server {
listen 127.0.0.1:8080;
status_heap default_status_heap 50m;
location /heap {
status_heap_show;
}
location /heap_all {
status_heap_show_all;
}
}
Соотвтесвенно, при запросе:
curl http://127.0.0.1:8080/heap/
мы получим, сколько раз у нас люди спрашивали /
. Просто число.
А при:
curl http://127.0.0.1:8080/heap_all/
мы получим выдачу, вида:
/ 1
/test.html 10
В качестве разделителя используется табуляция.
Для пимера вы можете посмотреть сюда и сюда.
Для хранения информации об 1 url требуется (для amd64, на i386 потребление будет ниже) 80 байт + длина uri. Т.е. можно выдать 50-100 мегабайт и забыть.
Комментарии
Пока выглядит вкусненько :)
Форма комментирования для «nginx: статус по url»
Вываливается с ошибкой:
ngx_http_status_heap_module.c:210: warning: ‘b’ may be used uninitialized in this function
исправляеся добавлением нуля:
ngx_buf_t *b = NULL;
undefined