05. Nginx 로그 관리
19984 단어 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. 페이지 통계
가장 자주 방문 하 는 페이지 보기 (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 출력)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux2에 nginx 설치설치 가능한 nginx를 확인하고, 해당 nginx를 설치한다. localhost 혹은 해당 ip로 접속을 하면 nginx 화면을 볼 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.