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的云原生微服务网关 --- 日志收集与分析

给小白看的:Nginx 从入门到实战

Docker小白到实战之Dockerfile解析及实战演示,果然顺手

大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白的入门实战篇

docker-compose中加入nginx 日志和部署下载

Canal实时解析mysql binlog数据实战