질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

쉘스크립트(서버로드값관련해서 관리자에게 메일발송하는 스크립트를 만들고 싶습니다

작성자 정보

  • 도리 작성
  • 작성일

컨텐츠 정보

본문

서버관리지망생 님의 글


질문내용은 다음과 같습니다.

FTP서버가 10대, 웹서버, DB서버 이렇게 세가지 서버가 있고 이들 서버는
적절히 필요한 값들을 주고받는 관계이며(예를 들면 모니터링을 위한 값 참조 : MRTG이용한다고 가정)

각 FTP서버의 부하율이 정수값 10을 넘으면
(쉘에서 w 명령을 치거나 cat /proc/loadavg 를 치면 나오는 로드값입니다)
관리자에게 메일이 발송되게 하는 스크립트를 만들고 싶습니다.

첫째, DB서버에서 스크립트를 만들어 각FTP서버로부터 받은 로드값으로 처리할 것인가
둘째, 웹서버에서 스크립트를 만들어 각FTP서버로부터 받은 로드값으로 처리할 것인가
셋째, 각FTP서버에서 직접 로드값을 체크해서 처리할 것인가

아무래도 세번째 방법으로 처리하는 편이 가장 확실한 방법이겠죠?

[root@ftp]# w | grep load | cut -f 3-6 -d,
1 user,  load average: 6.62, 6.50, 7.56

로드값을 필요한 형태로 추출하는 방법까진 알겠는데 여기서 메일을 보내는 부분까지
연결이 안되서 고심하고 있습니다. IF문이나 case 문을 써서 어떻게 하면 될 것 같은데
아무래도 쉘스크립트는 초짜라 생각이 잘 안 나네요.
좋은 생각 있으신 분 답변 바랍니다. ^_^ㆀ




음... 목적은?? 로드 발란싱인가요??

아님.. 관리이인가요??

일단... snmp 를 이용하여, mib 값을 받아서 처리하는것이 가장 현명한 방법이구요..

꼭... 쉘스크립을 써야 한다면...음...

[root@fileserver root]# uptime
 12:26:51  up 11 days, 18:48,  3 users,  load average: 0.00, 0.00, 0.00

## 위와같이 나오는 결과에서 .. 뒷부분 3개중에서 하나를 때어내고 싶죠?

[root@fileserver root]# uptime | sed "s/.*load average: //"
0.00, 0.00, 0.00

##이렇게 해서 앞에 부분을 잘라 내어버립니다.
그런다음. 3값은 각각 1분 , 5분 15분의 평균 부하 이므로 .. 처음 나오는 1분것만 필요하다면,

 

[root@fileserver root]# uptime | sed "s/.*load average: //" | sed "s/,.*//g"
0.00

이렇게 해서 값을 구합니다.

그런다음 조건을 검사하고 10이 넘음 메일을 보냄 되죠..

장...

#!/bin/bash
while ( true ) ; do
loadavg=`uptime | sed "s/.*load average: //" | sed "s/,.*//g"`
if [ $loadavg -gt 10 ] ; then
 echo "#1번 ftp 서버에 부하가 많습니다. " | mail -s "제목" 메일주소
fi
sleep 10
done

이렇게 하심 되죠^^;

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,132 명
  • 현재 강좌수 :  36,168 개
  • 현재 접속자 :  395 명