神器 awk

最近想研究下两大神器 awk/sed,先学习了 awk,看了这篇 AWK 简明教程,写的不错,推荐一下。

awk 分析 nginx 日志

于是实践下,正好想知道 nginx_proxy_cache 模块的命中状态,于是写了这样一条命令来分析当天日志里面的命中率:

awk '{if($NF=="\"HIT\"") hit++; else if($NF=="\"MISS\"") miss++; else if($NF=="\"EXPIRED\"") expired++; else other++} END {printf "KU.IO Nginx Cache Status:\n\nHit Rate: %.2f%\nMiss Rate: %.2f\nExpired Rate: %.2f%\nOther Rate: %.2f%\n",hit/NR*100,miss/NR*100,expired/NR*100,other/NR*100}' /var/log/nginx/ku.io.access.log

把 /var/log/nginx/ku.io.access.log 修改为你的日志文件路径即可复用。

当然,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"';

其中 Other Rate 包含两项:

  • UPDATING
  • STALE

感觉这两项意义不大,就没单独输出了。

Happy Hacking~ :)