작성자 : 손도환님(NTFAQ 회원)

L4 단에서 동적으로 웹 서버의 상태를 체크해서 분배를 해주는 경우는 이 프로그램이 필요 없습니다.(혹 사용하셔도 좋고요)
예을들어 라운드 로빈 방식이나 윈도우 2000 계열에 NLB 방식을 쓰는 경우는 동적으로 모니터링 해서 문제가 발생 시 바로 서비스를 보내지 않기 때문에 간혹 문제를 모르고 계속 방치 하는 경우가 발생하게 된다. 그럴 경우 그 서버를 모니텅링 할 수 있는 툴이 필요 할 것인데 아래 사항을 참조 하면 도움이 될 것이다.

단, 소수의 웹 서버가 동적 분배 없이 동작되는 경우 서버가 정상적으로 동작하는지 모니터링 할 수 있는 방법이 없고, 그렇다고 서버 관리자나 프로그래머가 항상 Web을 모니터링 할 수가 없어서 이 프로그램을 만들었습니다. 이 프로그램은 크게 각각의 웹 서버에 접속해서 접속한 첫 번째 페이지를 통으로 가져오는 작업밖에 하지 않습니다. 하지만 웹 서버에 이상이 있다면 접속자체가 안될 것이고, 웹 서버가 정상 동작하지 않는다면 첫 페이지가 정상적으로 가져와 지지 않을 것입니다. 그리고,첫 번째 호출하는 페이지에 웹 서버에서 사용되는 모든 DLL에 대한 호출을 만들어 놓는다면 DLL중 하나만 이상이 발생해도 정상적인 응답이 안 될 것입니다. 특정 URL을 호출한 후 정상적인 응답이 없다면 무조건 SMS를 발송하게 한다면 웹 서버를 체크할 수 있습니다.

// ServerName은 서버에 접속할 URL 을 준다 물론 개별 서버여야 된다.
// 예 ) http://www1.a.com/test.asp
// http://www2.a.com/test.asp
// 뒤의 파일명을 안 넣은 경우는 Web서버가 지정한 페이지로 접속됨.
// 웹서버에 이상이 있으면 false를 리턴하고 Exception에 에러를 담아 리턴한다. 이 함수를
// 콜한함수에서 Exception 처리를 해주고 SMS 나 메일을 발송하면 된다.

public static bool ServerState(string ServerName)
{
try
{
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(ServerName);
// 서버 이름으로 웹서버에 접속한다.
httpRequest.Method = "GET";

// 요청한 결과를 HttpWebResponse로 받는다.

HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();

Stream receiveStream = httpResponse.GetResponseStream();
StreamReader readStream = new StreamReader( receiveStream,System.Text.Encoding.Default);

// 접속한 스크립트 페이지의 전체 페이지를 읽어온다.
// 전체 사이트의 DLL을 콜한경우 죽어있는 DLL이 있으면 타임오버나 기타 오류발생

string strHTML = readStream.ReadToEnd();
readStream.Close();

if ( strHTML.Length < 3 )
return false;
else
return true;
}
catch(Exception e)
{
throw e;
}
}


Posted by NTFAQ

트랙백 주소 :: http://ntfaq.co.kr/trackback/3308 관련글 쓰기

댓글을 달아 주세요