美文网首页
nginx cache查看缓存命中率

nginx cache查看缓存命中率

作者: FMD彩虹 | 来源:发表于2018-03-23 17:57 被阅读153次

    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 cache查看缓存命中率

          本文链接:https://www.haomeiwen.com/subject/kewxcftx.html