从nginx日志中统计nginx缓存命中率

问题背景

很多动态页面,都可以通过 nginx 进行缓存,从而提高访问速度,并减小对 banckend 的服务负载,通常可以通过 proxy_cache_path 来解决,但是如何判断缓存命中率呢

解决方案

面对以上问题,可以通过两种方式来解决:

  • 方式一: 通过浏览器中的 response 中的 Nginx-Cache 字段来判断
  • 方式二: 通过 Nginx 的 access 日志来标记

今天我们介绍方式二:

要统计nginx的缓存,前提肯定是你已经配置了nginx的缓存,然后需要在日志中输出缓存的状态,如下日志格式配置:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"'
                  '"$upstream_cache_status"';

可以看到日志中最后一个项是缓存状态。

统计方法:用HIT的数量除以日志总量得出缓存命中率:

awk '{if($NF=="\"HIT\"") hit++} END {printf "%.2f%",hit/NR}' access.log

从nginx日志中统计nginx缓存命中率

展开剩余53%