소개
이 프로젝트에서는 Nginx 서버의 액세스 로그에 대한 로그 분석을 수행하는 방법을 배우게 됩니다. 로그에서 액세스 횟수가 가장 많은 IP 주소, 서버에 최소 10 번 이상 액세스한 IP 주소, 가장 많이 액세스된 요청, 404 상태의 요청 주소 등과 같은 귀중한 정보를 검색합니다.
🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
- 특정 날짜의 액세스 횟수가 가장 많은 5 개의 IP 주소를 검색하는 방법
- 주어진 날짜 범위 내에서 서버에 최소 10 번 이상 액세스한 모든 IP 주소를 찾는 방법
- 정적 파일 및 리소스를 제외하고 로그 파일에서 가장 많이 액세스된 10 개의 요청을 검색하는 방법
- 로그 파일에서 404 상태의 모든 요청 주소를 작성하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- Nginx 액세스 로그에서 의미 있는 정보를 분석하고 추출합니다.
- 쉘 스크립팅을 사용하여 로그 분석 작업을 자동화합니다.
- 필터링, 정렬 및 계산과 같은 일반적인 로그 분석 기술을 이해하고 적용합니다.
- 분석 결과를 구조화된 방식으로 관리하고 구성합니다.
2015 년 4 월 10 일, 가장 많은 액세스를 기록한 5 개의 IP 주소 검색
이 단계에서는 2015 년 4 월 10 일의 access.log 파일에서 액세스 횟수가 가장 많은 5 개의 IP 주소를 검색하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
- 터미널을 열고
/home/labex/project디렉토리로 이동합니다. - 다음 명령을 사용하여 2015 년 4 월 10 일의 액세스 횟수가 가장 많은 5 개의 IP 주소를 검색합니다:
grep '10/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 | awk '{print $2}' > output1
이 명령은 다음을 수행합니다:
grep '10/Apr/2015' access.log: 로그 파일을 필터링하여 2015 년 4 월 10 일의 줄만 포함합니다.awk '{print $1}': 각 로그 줄에서 IP 주소 (첫 번째 필드) 를 추출합니다.sort: IP 주소를 정렬합니다.uniq -c: 각 IP 주소의 발생 횟수를 계산합니다.sort -rn: IP 주소를 횟수별로 내림차순으로 정렬합니다.head -5: 상위 5 개의 IP 주소를 선택합니다.awk '{print $2}': 정렬되고 계산된 출력에서 IP 주소 (두 번째 필드) 를 추출합니다.> output1: 출력을output1파일로 리디렉션합니다.
output1파일의 내용을 확인하여 2015 년 4 월 10 일의 액세스 횟수가 가장 많은 5 개의 IP 주소가 한 줄에 하나의 IP 주소로, 빈 줄 없이 포함되어 있는지 확인합니다.
216.244.66.249
216.244.66.231
140.205.225.185
140.205.201.39
140.205.201.32
2015 년 4 월 11 일, 서버에 최소 10 번 이상 액세스한 모든 IP 주소 찾기
이 단계에서는 2015 년 4 월 11 일 사이에 서버에 최소 10 번 이상 액세스한 모든 IP 주소를 찾는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
- 다음 명령을 사용하여 2015 년 4 월 11 일 사이에 서버에 최소 10 번 이상 액세스한 모든 IP 주소를 찾습니다:
grep '11/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | awk '$1 >= 10 {print $2}' > output2
이 명령은 다음을 수행합니다:
grep '11/Apr/2015' access.log: 로그 파일을 필터링하여 2015 년 4 월 11 일의 줄만 포함합니다.awk '{print $1}': 각 로그 줄에서 IP 주소 (첫 번째 필드) 를 추출합니다.sort: IP 주소를 정렬합니다.uniq -c: 각 IP 주소의 발생 횟수를 계산합니다.awk '$1 >= 10 {print $2}': 횟수가 10 이상인 IP 주소를 필터링하고 IP 주소 (두 번째 필드) 를 출력합니다.> output2: 출력을output2파일로 리디렉션합니다.
output2파일의 내용을 확인하여 2015 년 4 월 11 일 사이에 서버에 최소 10 번 이상 액세스한 모든 IP 주소가 한 줄에 하나의 IP 주소로, 빈 줄 없이 포함되어 있는지 확인합니다.
108.245.182.93
123.127.3.30
140.205.201.39
216.244.66.231
216.244.66.249
218.75.230.17
로그 파일에서 가장 많이 액세스된 상위 10 개 요청 검색
이 단계에서는 정적 파일, 이미지 또는 유사한 리소스를 제외하고 access.log 파일에서 가장 많이 액세스된 10 개의 요청을 검색하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
- 다음 명령을 사용하여 로그 파일에서 가장 많이 액세스된 10 개의 요청을 검색합니다:
grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10 | awk '{print $2}' > output3
이 명령은 다음을 수행합니다:
grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log:/robots.txt,.js,.css, 또는.png를 포함하는 줄을 제외하도록 로그 파일을 필터링합니다.awk '{print $7}': 각 로그 줄에서 요청 주소 (일곱 번째 필드) 를 추출합니다.sort: 요청 주소를 정렬합니다.uniq -c: 각 요청 주소의 발생 횟수를 계산합니다.sort -rn: 요청 주소를 횟수별로 내림차순으로 정렬합니다.head -10: 상위 10 개의 요청 주소를 선택합니다.awk '{print $2}': 정렬되고 계산된 출력에서 요청 주소 (두 번째 필드) 를 추출합니다.> output3: 출력을output3파일로 리디렉션합니다.
output3파일의 내용을 확인하여 로그 파일에서 가장 많이 액세스된 10 개의 요청이 한 줄에 하나의 요청 주소로, 빈 줄 없이 포함되어 있는지 확인합니다.
/
/j_acegi_security_check
/favicon.ico
400
/xref/linux-3.18.6/
/pmd/index.php
/pma/index.php
/phpMyAdmin/index.php
/phpmyadmin/index.php
check.best-proxies.ru:80
로그 파일에서 404 상태의 모든 요청 주소 기록
이 단계에서는 access.log 파일에서 404 상태의 모든 요청 주소를 output4 파일에 쓰는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
- 다음 명령을 사용하여 로그 파일에서 404 상태의 모든 요청 주소를
output4파일에 씁니다:
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq > output4
이 명령은 다음을 수행합니다:
grep ' 404 ' access.log: 404 상태 코드를 포함하는 줄만 포함하도록 로그 파일을 필터링합니다.awk '{print $7}': 각 로그 줄에서 요청 주소 (일곱 번째 필드) 를 추출합니다.sort: 요청 주소를 정렬합니다.uniq: 중복된 요청 주소를 제거합니다.> output4: 출력을output4파일로 리디렉션합니다.
output4파일의 내용을 확인하여 로그 파일에서 404 상태의 모든 요청 주소가 한 줄에 하나의 요청 주소로, 중복 없이 포함되어 있는지 확인합니다.
/about/
/cgi?2
/cgi-bin/cgiSrv.cgi
/clusters.jsf
/dfshealth.jsp
/dnieyraqcvtu
/favicon.ico
/ganglia/index.php
/hadoop/dfshealth.jsp
/history/linux-3.18.6/arch/ia64/include/asm/processor.h
/history/linux-3.18.6/arch/m68k/amiga/
/history/linux-3.18.6/arch/m68k/kernel/
/history/linux-3.18.6/arch/s390/include/asm/lowcore.h
/history/linux-3.18.6/arch/s390/kernel/entry64.S
/history/linux-3.18.6/arch/tile/kernel/intvec_64.S
/history/linux-3.18.6/arch/unicore32/include/asm/thread_info.h
/history/linux-3.18.6/arch/unicore32/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/include/asm/processor.h
/history/linux-3.18.6/arch/x86/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/kernel/entry_64.S
...
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



