inflearn logo
강의

講義

知識共有

システムエンジニアが教えるLinux実戦編 Bash Shell Script

2-2. Webサーバーのトラブルシューティングのためのシェルスクリプト

ls -al /var/log/nginx

解決済みの質問

17

devnovsoo6731

投稿した質問数 19

0

선생님 안녕하세요...
강의를 따라하고 있는 학생입니다


다름이 아니라 웹 트러블 슈팅을하는데

강의 영상은 ls -al /var/log/nginx 하면 에러가 떠야 트러블 슈팅을 하던가 하는데


제 실습환경은 너무 잘 돼서요... 제가 뭘 잘못따라가고 있는걸까요?

감사합니다 사진첨부할게요

image.png

버추얼박스로 실습중이고
마우스 통합이 불편해서 윈도우 cli 로 ssh 걸어서 실습중입니다



+)

image.png

df -h 도 선생님은 100%인데
저는 11%요서 트러블 상황이 안만들어집니다


감사합니다

linux shell-script

回答 2

0

devnovsoo6731

긴 답변 감사합니다
더미 파일을 추가 해서 용량이 늘어나는것까지 확인했습니다

그래서 다음 실습인 인덱스 페이지 리로드 할때마다 모니터링 하려는거 실습하려고하는데
http://172.18.1.91/www/index.html

접속이 안되는데 혹시 문제가 있을까요?

cent1 서버 ip addr 사진 첨부하겠습니다 감사합니다


image.png


0

bashbomb

먼저 첨부해주신 ip addr 결과를 보면 네트워크는 정상입니다. eth1 이 172.18.1.91, eth2 가 10.18.1.91 로 둘 다 UP 이라 설정에는 문제가 없습니다.

접속이 안 되는 원인은 지난번에 만드신 더미 파일일 가능성이 높습니다. 루트 파티션이 꽉 찬 상태에서는 웹 서버가 정상적으로 응답하지 못합니다. 제가 지난 답변에서 실습 끝나면 반드시 지워달라고 말씀드린 이유가 바로 이것입니다.

cent1 에서 아래 순서대로 확인하고 정리해주세요.

df -h
rm -f /var/log/nginx/testfile_delete_me
df -h

두 번째 df -h 에서 사용률이 원래대로 돌아왔는지 확인하신 다음, 브라우저에서 다시 접속해보세요. 여기서 해결되면 그대로 다음 실습으로 넘어가시면 됩니다.

만약 디스크를 정리했는데도 접속이 안 되면, 그때는 서버 자체가 문제인지 윈도우에서 서버까지 가는 구간이 문제인지 쪼개야 합니다. 브라우저는 이 둘을 구분해주지 못하니까요. cent1 에서 아래 한 줄이면 갈립니다.

curl -I http://localhost/www/index.html

결과별로 이렇게 판단하시면 됩니다.

HTTP/1.1 200 OK 가 나온 경우

서버는 정상이니 윈도우 명령 프롬프트에서 ping 172.18.1.91 을 쳐보세요. 응답이 없으면 호스트 전용 어댑터 문제이니 가상머신 설정에서 어댑터 2와 3이 순서대로 연결되어 있는지 확인하시면 됩니다. 응답이 오는데도 브라우저만 안 되면 같은 창에서 curl -I http://172.18.1.91/www/index.html 로 한 번 더 확인해보세요.

Connection refused 가 나온 경우

nginx 가 떠 있지 않습니다. systemctl status nginx 로 상태를 보고 systemctl restart nginx 로 다시 올리세요.

404 Not Found 가 나온 경우

nginx 는 정상인데 파일이 그 경로에 없는 것입니다. ls -al /usr/share/nginx/html/www/index.html 로 확인해보시고, 파일이 없으면 알려주세요.

위에 없는 결과가 나온 경우

그 한 줄만 그대로 붙여서 알려주시면 짚어드리겠습니다.

그리고 다음에 하시려는 모니터링 실습에 대해 미리 알려드릴 것이 하나 있습니다. 강의에서 감시하는 로그는 VWS.access.log 인데, 이 파일은 가상호스트 이름으로 접속했을 때만 기록됩니다. IP 로 접속하면 nginx 의 기본 서버가 응답하고 기록은 access.log 쪽으로 갑니다. 그래서 IP 로 아무리 새로고침해도 VWS.access.log 는 0 바이트인 채로 보입니다.

http://172.18.1.91/www/index.html 로 접속하면 기본 서버가 응답하고 access.log 에 기록됩니다.

http://vws.tmpcompany.com/index.html 로 접속하면 가상호스트가 응답하고 VWS.access.log 에 기록됩니다.

두 번째 방식으로 하시려면 윈도우의 C:\Windows\System32\drivers\etc\hosts 파일을 메모장 관리자 권한으로 열어 아래 한 줄을 추가하시면 됩니다.

172.18.1.91 vws.tmpcompany.com

이때 주소에서 /www/ 는 빼야 합니다. 가상호스트 쪽은 문서 루트가 이미 www 디렉터리를 가리키고 있어서, /www/ 를 붙이면 www 안의 www 를 찾다가 404 가 납니다.

hosts 파일 수정이 번거로우시면 감시 대상을 넓혀서 하셔도 학습 내용은 같습니다.

watch -n 3 'ls -al /var/log/nginx'

이렇게 디렉터리 전체를 보시면 새로고침할 때 어느 로그가 늘어나는지 눈으로 확인하실 수 있고, 오히려 기본 서버와 가상호스트의 차이를 이해하시는 데 도움이 됩니다.

감사합니다.

0

bashbomb

안녕하세요, 강민구입니다.

결론부터 말씀드리면 잘못 따라오신 게 아닙니다. 지금 화면이 정상이고, 오히려 환경 구축을 제대로 하신 상태입니다.

2-2는 "웹 로그가 하룻밤 사이에 디스크를 다 채워버린 상황"을 전제로 원인을 추적해 나가는 회차입니다. 그런데 이 장애 상태는 강의를 녹화하기 전에 제가 미리 만들어 둔 것이고, 수강생 환경에 자동으로 만들어지지는 않습니다. 실전편에는 장애를 자동으로 발생시키는 시나리오 스크립트가 따로 없기 때문입니다. 즉 여러분의 서버는 로그가 몇백 바이트밖에 안 되는 깨끗한 상태라, 로그 확인이 잘 되는 게 당연합니다.

그래서 이 회차에서 가져가셔야 할 건 "에러를 똑같이 재현하는 것"이 아니라, 원인을 좁혀 들어가는 명령의 흐름입니다.

df -h 로 어느 파티션이 찼는지 본다

cd / 후 du -h --max-depth=1 2>/dev/null | grep G 로 범인 디렉터리를 한 단계씩 좁힌다

마지막에 ls -alh 또는 du -sh * 로 파일 단위까지 확인한다

이 흐름을 지금 상태에서 그대로 쳐보시면, 결과는 다르지만 각 명령이 무엇을 보여주는지는 똑같이 익히실 수 있습니다.

그래도 영상과 같은 상황을 직접 만들어보고 싶으시다면, 아래처럼 일부러 디스크를 채워보셔도 좋습니다. 사실 2-3에서 감시 스크립트를 테스트할 때 이 방법을 그대로 사용합니다.

df -h 

cd /var/log/nginx

dd if=/dev/zero of=testfile_delete_me bs=1M count=5000

df -h 

count 값은 df 결과에서 남은 용량보다 조금 크게 잡으시면 됩니다. 이 상태에서 강의 순서대로 df -h 부터 따라가시면 영상과 같은 흐름을 경험하실 수 있습니다.

다만 한 가지만 꼭 지켜주세요. 루트 파티션이 100%가 되면 그 상태에서는 파일 쓰기가 전부 실패하기 때문에, 실습이 끝나면 반드시 더미 파일을 지워주셔야 합니다.

rm -f /var/log/nginx/testfile_delete_me

df -h 

안 지우고 넘어가시면 이후 실습에서 계속 발목을 잡습니다.

참고로 마우스 통합이 불편해서 윈도우 터미널에서 SSH로 접속해 실습하시는 방식은 전혀 문제없고, 오히려 실무 환경에 더 가까운 좋은 방법입니다. 그대로 진행하셔도 됩니다.

혹시 영상에서 나온 에러 메시지가 위 설명과 다르게 기억되신다면, 몇 분쯤 장면인지 알려주시면 그 부분을 짚어서 다시 설명드리겠습니다.

감사합니다.

0

devnovsoo6731

답변감사합니다 선생님 그럼 선생님 말씀은 지금 제 서버는 아직 아무것도 한게 없기에 클린한게 정상이며 잘 못 된게 없고? 선생님은 일부로 용량 꽉차게 만들었으며,

이럴때 어떤 명령어를 사용하라 정도로만 학습을 하면 될까요?


만약 제가 좀 용량을 채우고 싶으면
dd if=/dev/zero of=tesfile_delete_me bs=1m count=5000
요걸 쓰는거구요?

0

bashbomb

네, 세 가지 다 맞게 이해하셨습니다.

지금 서버가 깨끗한 게 정상이고, 강의 화면의 꽉 찬 상태는 제가 촬영 전에 일부러 만들어 둔 것입니다. 잘못 따라오신 게 없습니다.

학습 포인트도 말씀하신 대로입니다. 다만 "이럴 때 이 명령어"로 외우기보다, 범위를 좁혀 들어가는 순서 자체를 손에 익히시는 걸 권합니다.

df -h 로 어느 파티션이 찼는지 → du -h --max-depth=1 로 범인 디렉터리를 한 단계씩 좁히기 → ls -alh 또는 du -sh * 로 파일 단위 확인

실무에서는 범인이 nginx 로그가 아니라 애플리케이션 로그나 오래된 백업, 코어 덤프인 경우가 훨씬 많습니다. 그때도 위 순서는 그대로 통하고, 마지막에 나오는 파일 이름만 달라집니다. 그래서 명령어보다 순서가 남는 게 중요합니다.

dd 명령은 방향은 맞는데 두 군데만 고쳐주세요.

## 잘못된 예
dd if=/dev/zero of=tesfile_delete_me bs=1m count=5000

고친 것

## 올바른 예 
cd /var/log/nginx
dd if=/dev/zero of=testfile_delete_me bs=1M count=5000

첫째, testfile 에서 t 가 하나 빠져 있습니다. 파일명이 달라지면 나중에 지우는 명령과 안 맞아서 지웠다고 생각했는데 용량이 그대로인 상황이 생깁니다.

둘째, bs 단위는 대문자 M 이어야 합니다. 소문자 m 을 쓰면 dd: invalid number: '1m' 에러가 나고 파일이 만들어지지 않습니다. GNU dd 는 K, M, G 만 1024 단위 접미사로 인식합니다.

여기서 count 값은 제 강의 화면 숫자를 그대로 쓰시면 안 되고, 본인 서버의 남은 용량에 맞춰서 정하셔야 합니다. bs=1M 이므로 count 는 그대로 MB 개수가 됩니다.

먼저 df -h 를 치고 루트 파티션 행의 Avail 열을 보세요. 그 값이 실제로 채워야 할 양입니다.

Avail 이 4.0G 면 4 x 1024 = 약 4096, 그보다 조금 크게 count=4300

Avail 이 20G 면 20 x 1024 = 약 20480, 그보다 조금 크게 count=21000

Avail 보다 작게 잡으면 100% 가 안 돼서 강의와 같은 상황이 안 만들어지고, 너무 크게 잡아도 어차피 꽉 찬 지점에서 멈추니 손해는 없습니다. 다만 Avail 이 수십 기가면 그만큼 쓰는 데 시간이 걸리니 여유를 크게 잡을 필요는 없습니다.

중간에 No space left on device 가 뜨면 실패가 아니라 의도한 상태에 도달한 것이니, 그대로 df -h 를 다시 쳐서 100% 를 확인해 보세요.

그리고 실습이 끝나면 반드시 지워주세요. 루트 파티션이 100% 인 상태로 두면 이후 실습에서 파일 쓰기가 전부 실패합니다.

rm -f /var/log/nginx/testfile_delete_me
df -h

df -h 로 사용률이 원래대로 돌아온 것까지 확인하고 다음 강의로 넘어가시면 됩니다.

이번강의

0

13

2

버추얼박스 오류

0

19

1

텔레그램 봇 메세지 전송기능을 여러 서버에 이용하려면

0

205

2

컨테이너에서 다른 컨테이너 접속시

0

172

2

실습 주소에 172.18.1.91를 접속하니 접속이 되지 않습니다

0

175

2

atlassian 접속이 안됩니다

0

262

2

docker 컨테이너로 가상환경 구축 시 init.sh 관련 에러 로그

0

298

2

백업 쉘스크립트 3 질문있어요

0

137

1

telegram 문자보내기 오류

0

264

1

2-2 초기 셋팅 질문드려요!

0

381

3

Linux top 커맨드에 대한 질문

0

188

1

2-0. 진행 후 웹사이트 접속이 안됩니다.

0

336

2

커리큘럼-강의교안

0

347

3

web_backup.sh 실행 시 mount.nfs No host to mount

0

387

1

환경설정 압축파일 해제 불가

0

351

1

SecureCRT 접속 오류

0

885

1

강의에서 로그를 쌓게 하는 vws.tmpcompany.com 이제 접속이 안되는건가요?

0

416

1

강의에서 보여주시는 컨플이나 자료 따로 있을까요?

0

353

1

vagrant up 명령어 실행시

1

408

1

vagrant ssh 접속 에러

0

593

2

서버 구축시 문제 발생

0

475

2

버츄얼박스 설치에러

0

336

1

스크립트 실행 결과 미표시

0

335

1

맥북 지원

0

395

1