Nginx|2021Nginx => 日志解析与实战( 小白入门篇3)

日志的格式与命令 日志模块:ngx_http_log_module
日志的格式:log_format

  • 【Nginx|2021Nginx => 日志解析与实战( 小白入门篇3)】访问日志:access_log
  • 错误日志:error_log
  • 日志缓存(生产环境不建议开启):open_log_file_cache
    • open_log_fil_cache off; #默认禁止
    • open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
    • 设置缓存中最大的描述符数量 i
    • nactive: 20秒内的访问FD
    • min_uses: 20秒内小于3次访问的FD,就给你清掉,结合inactive的20秒 v
    • alid:设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默认时间为 60秒。
    • 总结: 缓存最多1000个,到了极限; 每分钟开始清除掉 20秒内小于3次的文件FD。
    • off:禁止使用缓存


一、日志的配置详解
查看日志格式配置文件 vim /etc/nginx/nginx.conf < log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ? $remote_addr=> 远程地址,记录客户端IP地址 ? $remote_user=> 远程用户,记录客户端用户的名称(默认匿名访问,启用身份验证时显示) ? [$time_local]=> 服务器的本地时间及时区 ? $request=> 请求:记录请求的URL与HTTP协议#GET /(获取/目录的文件) ? $status=> 状态:记录请求的状态(状态码) ? $body_bytes_sent => 发送给客户端的字节数,不包括响应头的大小(用户申请内容的体积) ? $http_referer=> 记录从哪个页面访问过来的(超链接) ? $http_user_agent => 记录客户端浏览器(代理器)相关信息 ? $http_x_forwarded_for => 代理器的IP地址 ? 192.168.178.1 - - [23/Jul/2021:05:37:37 +0800] "GET /2.html HTTP/1.1" 200 4 "http://pengtong.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0" "-"



二、个性化404
mkdir /peng#往里面加图片 vim /etc/nginx/conf.d/pt.conf # error_page 404 /404.html; location =/404.html { root /peng; }#真实计算机做好域名解析 192.168.178.1(虚拟机IP)pt.com ? #访问 http://pt.com/404.html


三、Nginx 轮转/切割格式
1.查看源码编译配置:rpm -ql nginx|grep log ? 2.vim/var/log/nginx/ /var/log/nginx/*.log {//日志轮转的位置 daily//天(轮转的周期) missingok//丢失不提示 rotate 52 //默认保留52份 compress//压缩(节省服务器的空间) delaycompress//延时压缩(与轮转时间分开) notifempty//空文件,不轮转 create 640 nginx adm// 创建一个新的文件640 以nginx主 adm组的新的日志轮转文件 sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript//在切割完日志后进行重启 } USR1信号量被nginx定义,为重新打开日志; 当kill命令发送USR1时,nginx会重新打开日志文件,并重新创建进程; ? 3. 查看nginx日志程序:rpm -ql nginx | grep log 启动轮转: /usr/sbin/logrotate-s /var/lib/logrotate/logrotate.status/etc/logrotate.conf


实战案例 百度网盘
链接:https://pan.baidu.com/s/1jzBNX9xILeYXxZmB-EMiVQ
提取码:help
因为测试时,大量的日志才能体现出结果
-----------------统计2021年4月25日的PV(访问量)/8点到9点------------------
1. grep '25/Apr/2021'access.log | wc -l ? 2. grep '25/Apr/2021:08'access.log | wc -l ? 3. awk '$4>="[25/Apr/2021:18" && $4<="[25/Apr/2021:20" {print $0} 'access/log |wc -l#将18点到20点的行打印出来进行统计#-------------------------------------------------------- ? awk'$4>"[01/Sep/2017:00:00:00" && $4<="[10/Sep/2017:23:59:59" {print $0}'* |wc -l #将1号到10号之间的PV量统计


-----------------统计2021年4月25日 一天访问最多的10个IP地址-----------------
1. grep '25/Apr/2021'access.log | awk '{ips[$1]++} END{for (i in ips){print i,ips[i]}}' | sort -k2(第二列) -rn(倒序) | head -10 # ips[192.168.178.1]+=1#---------------------------------------------------------- ? awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}' * |sort -k2 -rn |head -10 #对所有日志统计,把访问量最大的前10个IP及访问次数搜出来


------------------统计2021年4月25日 一天内访问数量大于100的IP----------------
1. grep '25/Apr/2021' access.log |awk ' {ips[$1]++} END{for (i in ips) {if(ips[i]>=100) {print i ips[i]}}}' ? #------------------------------------------------- awk'{page[$7]++}END{for(i in page){print i,page[i]}}'*|sort -k2 -rn |head -10 #对所有日志访问量大的10个页面进行统计


------------------统计2021年4月25日网站访问次数最多的网页-------------------
1. grep '25/Apr/2021' access.log | awk '{urls[$7]++} END {for (i in urls) {print i urls[i]}}' | sort -k2 -rn |head -1 ? #--------------------------------------------------------- grep '05/Sep/2017' www.goodprogrammer.org.log | awk'{page[$1" "$7]++}END{for(i in page){print page[i],i}}' |sort -k1 -rn|head -10 #统计一天访问同一个页面最多的IP地址


------------------统计2021年4月25日每个URL访问的字节数总大小----------------
1. grep '25/Apr/2021' access.log | awk '{urls[$7]++; size[$7]+=$10} END {for (i in urls) {print urls[i],size[i],i}}'|sort -k1 -rn ? 2. cat access.log | awk'{type[$9]++; size[$9]+=$9} END {for (i in type) {print type[i]" " size[i]" "i}}' ? #------------------------------------------------------cat * |awk 'BEGIN{OFS="|"}{urls[$7]++; size[$7]+=$10}END{for(i in urls){print i,urls[i],size[i]}}'|sort -t "|" -k3 -rn |head -10 #统计所有的文件的网页总大小


----------------统计2017年9月5日 每个IP访问状态码数量($status)-----------------
grep '05/Sep/2017' cd.mobiletrain.org.log|awk '{status[$1" "$9]++}END{for(i in status){print i,status[i]}}' |sort -k3 -rn|head -10


----------------统计一天IP状态码为404及出现的次数---------------
1. grep '05/Sep/2017' cd.mobiletrain.org.log |awk '{if($9=="404"){status[$1" "$9]++}}END{for(i in status){print status[i],i}}'|sort -k1 -rn|head -10 ? 2. grep '05/Sep/2017' cd.mobiletrain.org.log |awk '{status[$1" "$9]++}END{for(i in status){print status[i],i}}'|grep "404"|sort -k1 -rn|head -10


----------------统计前一分钟的PV量---------------------
1. cat/var/log/nginx/access.log |awk '$4>="[23/Jul/2021:10:20:00" && $4<="[23/Jul/2021:10:21:00" {print $0} ' |wc -l ? 2. date1=$(date -d '-1 minute' +%Y:%H:%M); awk -v date2=$date1 '$0 ~ date2 {i++} END{print i}'/var/log/nginx/access.log

    推荐阅读