2021Nginx => 日志解析与实战( 小白入门篇3)
Posted 自信即使巅峰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021Nginx => 日志解析与实战( 小白入门篇3)相关的知识,希望对你有一定的参考价值。
日志的格式与命令
日志模块:ngx_http_log_module
日志的格式:log_format
访问日志: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_format main '$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
以上是关于2021Nginx => 日志解析与实战( 小白入门篇3)的主要内容,如果未能解决你的问题,请参考以下文章
7.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 日志收集与分析
Docker小白到实战之Dockerfile解析及实战演示,果然顺手
大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白的入门实战篇