Nginx 로그 파일 접근 IP 통계

3299 단어 linux
문제 설명
Nginx 접근 로그 파일 내용 은 다음 과 같 습 니 다.
10.9.40.134 - - [01/Aug/2016:06:29:42 +0800] "POST / HTTP/1.1" 302 0 "-" "python-requests/2.4.3 CPython/2.7.9 Linux/3.16.0-4-amd64"
10.9.40.134 - - [01/Aug/2016:06:29:42 +0800] "GET /monitor.html?id=d00 HTTP/1.1" 200 8472 "-" "python-requests/2.4.3 CPython/2.7.9 Linux/3.16.0-4-amd64"

레 퍼 런 스
어떻게 명령 행 을 통 해 방문 로그 의 ip 수 를 통계 하고 배열 합 니까?
linux sort, uniq, cut, wc 명령 상세 설명
Python
해결 방안
awk sort
$1 은 빈 칸 을 분할 문자 로 하 는 첫 번 째 일치 항목, 즉 파일 의 ip 주 소 를 표시 합 니 다.sort 를 사용 하여 결과 정렬, 유 니 크 - c 기술 을 진행 합 니 다. 마지막 으로 sort - n 은 '숫자' 로 정렬 하고 통 계 된 방문 횟수 에 따라 정렬 합 니 다.
awk '{print $1}' access.log.1 |sort|uniq -c|sort -n

awk for
기본 변 수 는 0 입 니 다. 각 줄 의 $1 을 key, cnct 배열 + 로 하여 ip 의 수 를 실현 합 니 다.계산 이 끝 난 후 엔 디.그리고 결 과 를 인쇄 하고 마지막 으로 sort - n 은 '숫자' 로 정렬 합 니 다.
awk '{cnt[$1]++;}END{for(i in cnt){printf("%s\t%s
"
, cnt[i], i);
}}' access.log.1|sort -n

Python
ip 주소 와 일치 하 는 정규 표현 식 을 사용 하여 ip 이 나타 나 는 횟수 를 사전 으로 저장 합 니 다.
import re
mydict = {}
with open('/var/log/nginx/access.log.1') as f:
        for line in f:
                match = re.match(r'([0-9]{1,3}\.){3}[0-9]{1,3}', line)
                if match:
                        ip = match.group()
                        if ip in mydict.keys():
                                mydict[ip] += 1
                        else:
                                mydict[ip] = 1

print mydict

좋은 웹페이지 즐겨찾기