17강 / 20강
로그 — 서버가 남긴 일기
무슨 일이 있었는지는 항상 기록에 남아 있습니다
"사이트가 안 돼요!" 라는 연락을 받았습니다. 무엇부터 해야 할까요?
초보자는 서버를 재부팅합니다. 관리자는 로그를 읽습니다.
리눅스 서버는 모든 일을 기록으로 남깁니다. 누가 접속했는지, 어떤 요청이 왔는지, 무엇이 실패했는지. 읽는 법만 알면 대부분의 문제는 5분 안에 원인이 나옵니다.
서버의 일기장들이 모여 있는 곳
bash
내 가상 Ubuntu 서버에서 실행
/var/log/syslog시스템 전반온갖 것이 다 들어옴/var/log/auth.log로그인·sudo 기록보안 점검의 출발점/var/log/nginx/access.log누가 뭘 요청했나모든 방문 기록/var/log/nginx/error.lognginx 오류502 의 진짜 이유journalctl -u 서비스서비스별 로그systemd 가 모아 둔 것세 가지 읽기 방법
① tail — 가장 최근 것부터 (거의 항상 이걸로 시작합니다)
bash
내 가상 Ubuntu 서버에서 실행
② grep — 찾는 것만 골라서
bash
내 가상 Ubuntu 서버에서 실행
③ journalctl — 서비스별로 모아서 (systemd 의 선물)
bash
내 가상 Ubuntu 서버에서 실행
🎮 로그 분석 실습실
진짜 문제를 드립니다. 파이프를 조립해서 답을 찾아보세요. 10강에서 배운 것이 여기서 무기가 됩니다.
실전 · 세 가지 질문에 답해 봅시다
쇼핑몰 관리자에게 아침마다 필요한 정보입니다.
① 어제 방문이 몇 건이었나
bash
내 가상 Ubuntu 서버에서 실행
② 없는 페이지를 찾은 요청은? — 오타인가, 공격인가
bash
내 가상 Ubuntu 서버에서 실행
③ 가장 많이 들어온 IP 세 개
bash
내 가상 Ubuntu 서버에서 실행
1등이 45.148.10.72 입니다.
그런데 이 IP가 요청한 주소를 보면 /admin.php, /wp-login.php, /.env.
우리 쇼핑몰에는 있지도 않은 주소들이죠.
워드프레스나 PHP 사이트의 흔한 취약점을 무작정 찔러 보는 자동 스캐너입니다. 전 세계 서버가 매일 겪는 일이에요. 20강에서 이 IP를 막아 봅니다.
웹으로도 찔러 보고, SSH 로도 찔러 봤습니다
bash
내 가상 Ubuntu 서버에서 실행
500 오류의 진짜 원인 찾기
접속 기록에 500 이 하나 보였습니다. 서버 잘못이라는 뜻이에요.
어디가 잘못됐는지는 앱의 로그에 있습니다.
nginx 는 '500이 났다'만 알고, 앱 로그가 '왜'를 압니다
bash
내 가상 Ubuntu 서버에서 실행
sqlite3.OperationalError: no such table: review
범인을 찾았습니다. review 라는 표가 데이터베이스에 없는데
app.py 41번째 줄이 그 표를 읽으려 했어요.
로그 한 줄이 코드 한 줄을 정확히 가리킵니다.
🤔 확인 문제
사이트가 안 된다는 연락을 받았을 때 가장 먼저 할 일은?
해설 재부팅은 원인을 지워 버립니다. 게다가 원인이 그대로면 곧 다시 죽어요.
systemctl status → journalctl -u → error.log 순서로 읽는 것이 정석입니다.🤔 확인 문제
nginx 접속 기록에
500 이 보일 때 원인을 찾으려면 어디를 봐야 하나?해설 nginx 는 앱이 준 상태 코드를 그대로 적을 뿐입니다. 왜 500이 났는지는 앱만 알아요. 그래서
journalctl -u shop 이나 앱 로그에서 Traceback 을 찾습니다.🤔 확인 문제
tail -f 가 특별히 유용한 상황은?해설 -f 는 follow. 로그를 띄워 놓고 브라우저에서 문제를 재현하면, 그 순간 남는 기록을 바로 볼 수 있습니다. 디버깅에서 가장 강력한 습관 중 하나입니다.