05.Nginx日志管理

一. 访问日志

变量说明:

名称 说明
$remote_addr 客户端地址
$remote_user 客户端用户名称
$time_local 访问时间和时区
$request 请求的URI和HTTP协议
$http_host 请求地址,即浏览器中你输入的地址(IP或域名)
$status HTTP请求状态
$upstream_status upstream状态
$body_bytes_sent 发送给客户端文件内容大小
$http_referer url跳转来源
$http_user_agent 用户终端浏览器等信息
$ssl_protocol SSL协议版本
$ssl_cipher 交换数据中的算法
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址
$request_time 整个请求的总时间
$upstream_response_time 请求过程中,upstream响应时间
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址

配置示例:

user                nobody;
worker_processes    1;

events {
    worker_connections  1024;
}

#全局错误日志
error_log log/error.log debug;

http {
    log_format          fmt_main1 '$remote_addr $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
    log_format          fmt_main2 '[$remote_addr] [$request] [$status] [$http_user_agent]';
    log_format          fmt_json ' {
      "@timestamp":      "$time_local", '
    '"remote_addr":    "$remote_addr", '
    '"referer":        "$http_referer", '
    '"request":        "$request", '
    '"status":         $status, '
    '"bytes":          $body_bytes_sent, '
    '"agent":          "$http_user_agent", '
    '"x_forwarded":    "$http_x_forwarded_for", '
    '"up_addr":        "$upstream_addr",'
    '"up_host":        "$upstream_http_host",'
    '"up_resp_time":   "$upstream_response_time",'
    '"request_time":   "$request_time"'
    '
}';
    
    #方式1:默认日志路径
    access_log          /data/logs/nginx/access.log fmt_main1;

    server {
        listen             80;
        server_name        localhost www.demo.com;

        #方式2:针对项目指定日志文件
        access_log         /data/logs/nginx/demo_access.log fmt_json;

        location / {
            root              /data/www/demo;
            index             index.html;
        }
        error_page         404 /error.html;
    }
}

二. 错误日志

  • 格式error_log path(存放路径) level(日志等级),可设置全局块,http块,server块
  • 级别:debug|info|notice|warn|error|crit|alert|emerg
error_log log/error.log debug;
error_log /dev/null; #可以关闭日志

三. 日志切割

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/data/logs/logs_backup/$year$month" #日志存储路径

logs_path="/data/logs/" #要切割的日志路径
logs_access="access" #要切割的日志
logs_error="error"
pid_path="/var/run/nginx.pid" #nginx的pid

[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y%m%d`
for i in `ls -al ${logs_path} | grep "^-" | awk '{print $9}' `
do
   #echo ${i}
   mv ${logs_path}${i} ${logs_backup_path}/${i}_${rq}.bak
done
#mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
#mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
kill -USR1 $(cat /var/run/nginx.pid)
crontab –e
59 23 * * * bash /usr/local/nginx/shell/cut_ngnix_log.sh   #每天23:59分开始执行;

四. 日志统计

1. IP统计

统计IP访问量: 独立ip访问数量

awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的IP访问量(4-5点)

grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l  

查看访问最频繁的前100个IP

awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100

查看访问100次以上的IP

awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

查询某个IP的详细访问情况,按访问频率排序

grep '127.0.01' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100

2. 页面统计

查看访问最频的页面(TOP100)

awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100

查看访问最频的页面([排除php页面】(TOP100)

grep -v ".php" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100 

查看页面访问次数超过100次的页面

cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

查看最近1000条记录,访问量最高的页面

tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less

3. 按时统计

统计每秒的请求数,top100的时间点(精确到秒)

awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100

统计每分钟的请求数,top100的时间点(精确到分钟)

awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100

统计每小时的请求数,top100的时间点(精确到小时)

awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100

4. 性能分析

列出传输时间超过 3 秒的页面,显示前20条

cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20

列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条

cat access.log|awk '($NF > 1 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

5. 爬虫统计

统计蜘蛛抓取次数

grep 'Baiduspider' access.log |wc -l

统计蜘蛛抓取404的次数

grep 'Baiduspider' access.log |grep '404' | wc -l

6. 连接统计

查看当前TCP连接数

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

参考:
https://www.cnblogs.com/gouge/p/7089939.html (统计)
https://cloud.tencent.com/developer/article/1397738 (Json日志)
https://blog.csdn.net/Felix_CB/article/details/86614062 (切割)
https://blog.51cto.com/jinlong/2055173 (ELK输出)

发布了49 篇原创文章 · 获赞 29 · 访问量 4907
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览