호스팅을 받는 수준이 아닌, 기업수준에서의 웹서비스라면 별도의 DNS(:12) 서버를 필요로 할 것이다. DNS는 Domain 주소에 대한 IP:::Address(:12)를 되돌려주는 일을 하므로, 만약 DNS 서버가 죽어 버린다면 서비스가 정지 상태가 되어 버릴 것이다. 단순히 죽는 것 뿐만 아니라 응답시간이 느려지는 경우도 문제가 될 것이다. DNS 서비스는 DOS(:12), DDOS(:12) 공격에 노출되는 경우가 많으므로 특히 주의해서 관리해야할 필요가 있다.
만약 실패한다면, 다음과 같은 결과가 나온다. dns.server.name 에 문제가 있음을 알 수 있다.
# nslookup google.co.kr dns.server.name
;; connection timed out; no servers could be reached
시간측정은 time(1)을 이용할 경우 쉘스크립트 만으로도 측정 가능할 것이다. C(:12)를 이용한다면, popen(3)을 통해서 실행시킨다음 gettimeofday(2)를 이용해서 종료될때까지의 시간을 측정하면 된다. 측정된 데이터는 RRD(:12)등을 통해서 통계자료로 만들면, 모니터링 가능한 정보가 될 것이다.
RRD 생성
다음과 같이 RRD Database를 생성했다. 단지 Reply Time만 저장하도록 했다.
nslookup 이용
RRD 생성
RRD Update
#include <sys/time.h> #include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { FILE *fp; char buf[256]; struct timeval ftime, stime; int rtime = 0; int i = 1; char rrd[80]; char command[256]; sprintf(rrd, "%s", argv[1]); if (access(rrd,F_OK) != 0) { printf("rrd not found!!\n"); return 1; } while(1) { gettimeofday(&ftime, NULL); fp = popen("nslookup www.linux.com 218.234.19.87 -sil", "r"); while(fgets(buf, 254, fp)) { } fclose(fp); gettimeofday(&stime, NULL); rtime += (stime.tv_sec - ftime.tv_sec)*1000000+(stime.tv_usec - ftime.tv_usec); printf("rtime %d\n", rtime); if ((20*i)%300 == 0) { sprintf(command, "%s update /usr/local/rrddata/dnsrtime.rrd %d:%d", rrd, stime.tv_sec, rtime/15000); printf("Command : %s\n", command); rtime = 0; } sleep(20); i++; } }RRD 그래프
Recent Posts
Archive Posts
Tags