[C_prg][shell] 아파치 트래픽 분석 방법

——————————————————————————

##쉘 스크립트와 간단한 c프로그램을 이용한 아파치 트랙픽 분석(웹 호스팅 관리)##

——————————————————————————

1.아파치 로그화일(httpd.conf)의 LogFormat 부분에 아래의 내용을 삽입후 아파치를

  재실행하면 /usr/local/apache/logs를 확인해 보면 설정한 형식데로 로그화일이

  생성되어 있음을 확인할 수 있다.

~~~~~

LogFormat %h %{%m%d}t %b => 설정은 관리자가 필요한 부분을 삽입하면 된다.

~~~~

CustomLog “/usr/local/apache/logs/logfilename” “anyfilename”

~~~~

<VirtualHost xxx.xxx.xxx.xxx>  ===> 각 호스트 설정 부분 마다 삽입

   ServerAdmin webmaster@seti-school.co.kr

   DocumentRoot /home/kbacus/www

   ServerName seti-school.com

   CustomLog “/usr/local/apache/logs/logfilename” “anyfilename”

   ServerAlias seti-school.com www.seti-school.com

</VirtualHost>

2.아래 C프로그램 소스를 컴파일 한다.

#gcc -o logtest logtest.c

3.cron을 이용 하루 호스트별 아파치 화일 전송량을 확인한다.

1)쉘 스크립트 화일을 만든다.

#!/bin/sh

cat /usr/local/apache/logs/log2 | sed -e s/-/0/g | sort -u > /usr/local/apache/logs/log3 && /home/kobis/www/logmail/traflog > logdata

mail -s “서버 살려~~~~” jinee@kobis.net < logdata

> /usr/local/apache/logs/log2

> /usr/local/apache/logs/log3

2)crontab에 실행하고자 하는 시간을 설정 한다.

0 6 * * * /bin/sh /home/kobis/www/logmail/logmail

===>매일 호스트별로 용량을 체크해 메일로 보내준다.(간단하죠…)

——————————————————————————

/*

  ############ 간단한 아파치 로그 트래픽 분석기 ##############

  ############    (C) jinee  2001/06/09         ##############

  ############    mail:jinee97@lycos.co.kr

  누구나 자유롭게 수정 배포를 하셔도 됩니다.

  참고로 이 프로그램은 책의 일부소스를 변형하여 작성하였음을

  밝힙니다.

*/

#include <stdio.h>

#include <stdlib.h>

#include <sys/time.h>

#include <sys/wait.h>

#define LOG_FILE “/usr/local/apache/logs/log3” /* 분석 로그 화일*/

/*항시 로그 화일은 sorting이 되어 있어야만 한다.(전송량 합산 엉뚱한 결과나옴)*/

typedef struct{

        char iname[30];

        char iday[6];

        double inbyte;

}T;

T ilog[200000];

struct tm *get; /* 시간 확인 위한 설정*/

char name[30];

char day[6];

int nbyte;

time_t t;

FILE *fp;

main(void)

{

  int i,last=0;

  t=time(0);

  get=localtime(&t);

  fp=fopen(LOG_FILE, “rt”);

  while(!feof(fp)){  /* 로그화일이 EOF일때까지 */

   fscanf(fp,”%30s %s %d”,&name,&day,&nbyte);

    count_bn(&last); /* 로그화일의 last값 */

  }

  fclose(fp);

  puts(“ns11번 서버 트래픽”);

  puts(“=====================================================================”);

  print(last);

  puts(“=====================================================================”);

  printf(“총 %d개의 도메인 검색\\n”,last); /* 중복을 제외한 호스트명 수*/

  printf(“기록일시 : %02d월 %02d일 %02d시 %02d분 %02d초\\n”,get->tm_mon+1,get->tm_mday,get->tm_hour, get->tm_min, get->tm_sec);

}

count_bn(int *p)

{

  int i,c=0;

  for(i=0;i<=*p;i++)

    if(strcmp(name,ilog[i].iname)==0){ /* 중복되는 호스트가 있는지 확인 */

            /*호스트 명이 같으면  같은 구조체 첨자배열을 갖는다. */

        c=i;

        break;

  }

  if(c==0){

        (*p)++;

        c=*p;

  }

  strcpy(ilog[c].iname,name);

  ilog[c].inbyte+=nbyte; /* 같은 첨자배열을 합한다. */

}

print(int k) /* 구조체 첨자 배열값 */

{

  int i;

  for(i=1;i<=k;i++){

    if(ilog[i].inbyte>=500000000) /* 제한하고자 하는 트래픽량(byte) */

    printf(“%30s %13.1fM : 트래픽 오버\\n”,ilog[i].iname,ilog[i].inbyte/1048576);

    else printf(“%30s %13.1fM\\n”,ilog[i].iname,ilog[i].inbyte/1024000);

  }

}

~                  

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.