05. Nginx 로그 관리

19984 단어 Nginx
글 목록
  • 1. 방문 로그
  • 2. 오류 로그
  • 3. 로그 절단
  • 4. 로그 통계
  • 1. IP 통계
  • 2. 페이지 통계
  • 3. 정시 통계
  • 4. 성능 분석
  • 5. 파충류 통계
  • 6. 연결 통계
  • 방문 로그
    변수 설명:
    명칭.
    설명 하 다.$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. 페이지 통계
    가장 자주 방문 하 는 페이지 보기 (TOP 100)
    awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100
    

    가장 자주 방문 하 는 페이지 보기 ([php 페이지 제외] (TOP 100)
    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. 시간 에 맞 춰 통계 한다
    초당 요청 수, top 100 의 시간 점 (초 까지 정확) 을 통계 합 니 다.
    awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100
    

    분당 요청 수, top 100 의 시간 점 (분 까지 정확) 을 집계 합 니 다.
    awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100
    

    시간 당 요청 수, top 100 의 시간 점 (시간 까지 정확) 을 집계 합 니 다.
    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 출력)

    좋은 웹페이지 즐겨찾기