nginx cache查看缓存命中率

nginx提供了$upstream_cache_status这个变量来显示缓存的状态,我们可以在配置中添加一个http头来显示这一状态,达到类似squid的效果。

  • nginx location 中加入 add_header Nginx-Cache "$upstream_cache_status";
image.png

通过nginx 日志或者curl 查看

image.png
  • $upstream_cache_status包含以下几种状态:
·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答

nginx cache命中率统计

即然nginx为我们提供了$upstream_cache_status函数,自然可以将命中状态写入到日志中。具体可以如下定义日志格式:

gth" "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time" "$upstream_cache_status" "$upstream_addr"
  • 命中率统计方法:用HIT的数量除以日志总量得出缓存命中率:
awk '{if($NF==""HIT"") hit++} END {printf "%.2f%",hit/NR}' access.log
  • 了解了原理以后,也可以通过crontab脚本将每天的命中率统计到一个日志中,以备查看
# crontab -l
9 0 * * * /opt/shell/nginx_cache_hit.sh  >> /usr/local/nginx/logs/hit
  • 脚本内容
#!/bin/bash
LOG_FILE='/data/logs/nginx/logs/access.log'
LAST_DAY=$(date +%F -d "-1 day")
awk '{if($NF==""HIT"") hit++} END {printf "'$LAST_DAY': %d %d %.2f%n", hit,NR,hit/NR}' $LOG_FILE
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、安装Nginx: 1、解决依赖关系 yum groupinstall "Development Tools" ...
    不排版阅读 882评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,962评论 19 139
  • (创建于2017/12/21) 1.引用是变量的别名 2.指针和引用的比较 3.复杂数据类型的引用 4.引用的本质...
    任振铭阅读 217评论 0 0
  • 傍晚家中停电,寻一只软枕,卧在窗下,借着将暗未暗的天光,一本随手抄起的书,读至此篇,甚觉有趣,抄录来与君分享,愿同...
    月未圆时阅读 1,044评论 0 1
  • 一,再次相遇 大家好! 我是静。 大一寒假的情人节,我最刻骨铭心。这一天,是我们高考分别之后的第一次见面。 ...
    琦小鬼阅读 465评论 0 0