Оригинал статьи тут, себе копирую, чтоб не потерять.
Объявляем новый log_format в nginx.conf:
log_format rt_cache '$remote_addr - $upstream_cache_status [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
в server разделе вашего vhost:
И замените
access_log /var/log/nginx/example.com.access.log;
На вот такое:
access_log /var/log/nginx/example.com.access.log rt_cache;
Или можно поступить как-то так.
access_log /var/log/nginx/example.com.access.log;
access_log /var/log/nginx/example.com.cache.log rt_cache;
обратите внимание, что в разных логах различаются имена файлов.
Анализируем логи:
HIT vs MISS vs etc
Можно посмотреть статистику из access.log:
awk '{print $3}' access.log | sort | uniq -c | sort -r
Sample output:
800 HIT
779 -
392 BYPASS
19 EXPIRED
14 MISS
Важно: тире (“-“) означает прочие коды return 403, return 444, и возможно всякие файлы, что не попали к нам в локейшин в котором действует кэш.
Посмотреть список уролов с MISS
awk '($3 ~ /MISS/)' access.log | awk '{print $7}' | sort | uniq -c | sort -r
BYPASS Requests URLs
awk '($3 ~ /BYPASS/)' access.log | awk '{print $7}' | sort | uniq -c | sort -r
MISS v/s BYPASS
MISS – Это промахнулись мимо кэша, возможно это первое обращение, после которого кэш создаётся.
BYPASS – это пропуск к бэкэнду минуя кэн nginx например для залогиненных пользователей.