>  기사  >  백엔드 개발  >  순전히 수동으로 Nginx 로그를 가지고 플레이하세요.

순전히 수동으로 Nginx 로그를 가지고 플레이하세요.

WBOY
WBOY원래의
2016-08-08 09:22:34791검색
Nginx 로그는 대부분의 사람들에게 알려지지 않은 보물입니다. 이전에 로그 분석 시스템을 구축한 경험을 요약하여 Nginx 로그의 순수한 수동 분석 방법을 공유하고 싶습니다. Nginx 로그 관련 구성에는 access_log와 log_format 두 곳이 있습니다. 기본 형식:
access_log <span>/</span>data<span>/</span>logs<span>/</span>nginx<span>-</span>access<span>.</span><span>log</span><span>;</span>log_format old <span><em>'$remote_addr [$time_local] $status $request_time $body_bytes_sent '</em></span><span><em>'"$request" "$http_referer" "$http_user_agent"'</em></span><span>;</span>
Nginx를 사용해 본 대부분의 사람들은 기본 Nginx 로그 형식 구성과 로그 내용에 익숙할 것이라고 생각합니다. 그러나 기본 구성과 형식은 읽을 수는 있지만 계산하기는 어렵습니다. Nginx 로그 플러시 관련 전략을 구성할 수 있습니다. 예를 들어 버퍼가 가득 찬 경우에만 버퍼를 설정하고 디스크를 플러시합니다. 버퍼가 5초 미만인 경우 구성은 다음과 같습니다. 강제 플러시의 경우
access_log <span>/</span>data<span>/</span>logs<span>/</span>nginx<span>-</span>access<span>.</span><span>log</span> buffer<span>=</span><span><em>32k</em></span> flush<span>=</span><span><em>5s</em></span><span>;</span>
로그를 실시간으로 볼 수 있는지 여부와 로그가 디스크 IO에 미치는 영향을 결정합니다. 기본 구성에는 나타나지 않지만 Nginx 로그에 기록할 수 있는 변수가 많이 있습니다. 예: 요청 데이터 크기: $request_length
반환 데이터 크기: $ bytes_sent
요청 시간: $request_time
사용된 연결 일련 번호: $connection
현재 연결에 대한 요청 수: $connection_requestsNginx의 기본 형식은 계산할 수 없습니다. 이를 계산 가능한 형식으로 변환하는 방법을 찾아야 합니다. 예를 들어 제어 문자 ^A(Mac에서는 Ctrl+V Ctrl+A 입력)를 사용하여 각 필드를 구분합니다. log_format의 형식은 다음과 같습니다.
log_format new <span><em>'$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A'</em></span><span><em>'$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent'</em></span><span>;</span>
그 후 일반적인 Linux 명령줄 도구를 통해 분석할 수 있습니다.
  • 가장 찾기 자주 액세스하는 URL 및 시간:

    cat access.log | awk -F '^A' '{print $10}' | sort | uniq -c

  • 500 오류 액세스에 대한 현재 로그 파일을 찾습니다.

    cat access.log | awk -F '^A' '{if($5 == 500) print $0}'

  • 현재 로그 파일에서 500개 오류 수를 찾습니다.

    cat access.log | awk -F '^A' '{if($5 == 500) print $0}' | wc -l

  • 특정 분 수량 내에 500개의 잘못된 액세스 찾기 :

    cat access.log | awk -F '^A' '{if($5 == 500) print $0}' | grep '09:00' | wc-l

  • 소비량 찾기 1초를 초과하는 느린 요청:

    tail -f access.log | awk -F '^A' '{if($6>1) print $0}'

  • 특정 비트만 보려면 다음을 수행하세요.

    tail -f access.log | awk -F '^A' '{if($6>1) print $3″|”$4}'

  • 가장 많은 502개의 URL을 찾으세요. 오류:

    cat access.log | awk -F '^A' '{if($5==502) print $11}' | sort | uniq -c

  • 200개의 빈 페이지 찾기

    cat access.log | awk -F '^A' '{if($5==200 && $8 < 100) 인쇄 $3″|”$4″|”$11″|”$6}'

  • 실시간 로그 데이터 스트림 보기

    tail -f access.log | cat -e

    또는

    tail -f access.log | tr '^A' '|'

  • 요약이 아이디어를 기반으로 가장 많이 액세스한 UA, 요청 시간이 많이 소요되는 IP 분석, 등. 대규모 웹 로그 분석 시스템의 프로토타입입니다. 이 형식은 이후의 대규모 일괄 처리 및 스트리밍 계산에도 매우 편리합니다.

    위 내용은 다양한 측면을 포함하여 Nginx 로그를 수동으로 플레이하는 방법을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.