RRD¿Í À¥·Î±×¸¦ ÀÌ¿ëÇÑ Trend ºÐ¼®
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¼Ò°³

°³ÀÎÀûÀ¸·Î À¥·Î±×ÀÇ ºÐ¼®À» À§Çؼ­ webalizer¸¦ »ç¿ëÇϰí ÀÖ´Ù. ±×·°Àú·° ±¦ÂúÀº°Å °°Áö¸¸ Trend¸¦ º¸¿©Áֱ⿡´Â ºÎÁ·ÇÔÀÌ »ó´çÈ÷ ¸¹Àº ÅøÀÌ´Ù. º¯È­·®Àº º¸¿©ÁÙ ¼ö ÀÖÁö¸¸ ±×·¡ÇÁÀÚü°¡ °íÁ¤µÇ¾î Àֱ⠶§¹®¿¡, À̹øÁÖ¿Í Áö³­ÁÖÀÇ ºñ±³¿Í °°Àº º¯È­ÃßÀÌ Trend¸¦ º¸¿©ÁÖ´Â ±â´ÉÀÌ ºüÁ®Àֱ⠶§¹®ÀÌ´Ù.

ÃÖ±Ù¿¡ QOS °ü·ÃµÈ ¾÷¹«¸¦ ½ÃÀÛÇϸ鼭, À¥¼­ºñ½ºÀÇ Trend¸¦ ºÐ¼®ÇÒ ¼ö ÀÖ´Â ÅøÀÇ Çʿ伺À» ´À³¢°Ô µÇ¾ú´Ù. ÃÖÃÊ¿¡´Â Webalizer°ú °°Àº ÇÁ·Î±×·¥À» »ç¿ëÇØº¼±î ÇÏ°í »ý°¢ÇßÁö¸¸, À§ÀÇ ¹®Á¦·Î ÃæºÐÇÏÁö ¾Ê´Ù°í ÆÇ´ÜµÇ¾î¼­ ¼±Åÿ¡¼­ Á¦¿ÜÇÏ°Ô µÇ¾ú´Ù. ¶Ç´Ù¸¥ ¹æ¹ýÀ¸·Î google analytics¿Í °°ÀÌ ºÐ¼®ÇϰíÀÚ ÇÏ´Â ¸ðµç ÆäÀÌÁö¿¡ ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ ½É¾î¼­ µ¥ÀÌÅ͸¦ ¼öÁýÇÏ°í ºÐ¼®ÇÏ´Â ¹æ½ÄÀ» »ý°¢Çغ¸¾Ò´Ù. ÀÌ ¹æ¹ýÀº È®½ÇÈ÷ ÁÁÀº °á°ú¸¦ º¸¿©ÁÖ±â´Â ÇÏÁö¸¸ ¹®Á¦´Â °³¹ßÇØ¾ß µÉ°Í°ú °í·ÁÇØ¾ß µÉ»çÇ×ÀÌ ³Ê¹« ¸¹´Ù´ÂÁ¡.

  1. µ¥ÀÌÅÍ ¸¶ÀÌ´× ¼öÁØ¿¡¼­ ÀڷḦ ºÐ¼®ÇÏ´Â ÅøÀ» ¸¸µé¾î¾ß ÇÑ´Ù.
  2. ÀÚ¹Ù ½ºÅ©¸³Æ®µîÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ® Á¤º¸¸¦ º¸³»´Âµ¥, À̵é Á¤º¸¸¦ ¹Þ´Â ¼­¹ö ÇÁ·Î±×·¥¿¡ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. °ü¸® Æ÷ÀÎÆ®°¡ Çϳª ´Ã¾î³­´Ù´Â ¾ê±âÀε¥, ÀÌ´Â ²Ï ½É°¢ÇÑ À̽´°¡ µÉ ¼ö ÀÖ´Ù. ±¸±Û °°Àº °æ¿ì¸¸ ºÁµµ analytics ¹®Á¦ ¶§¹®¿¡, ¼­ºñ½º ÀÚü°¡ ´À¸®°Ô ¶ß´Â °æ¿ì¸¦ ½É½ÉÂú°Ô º¼ ¼ö ÀÖ´Ù. ºñµ¿±âÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¹Þ¾Æ¼­ ¹é±×¶ó¿îµå¿¡¼­ ó¸®ÇÏ´Â µîÀÇ ¹æ½ÄÀ» »ý°¢Çس»¸é µÇ°ÚÁö¸¸, °ñÄ¡¾ÆÇ ¹®Á¦°¡ µÇ¸®¶õ°Ç ¿¹»óÇÒ ¼ö ÀÖ´Ù.

±×·¡¼­ °£´ÜÈ÷ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ¹æ¹ýÀ» ã°Ô µÇ¾ú°í, Æò¼Ò »ç¿ëÇÏ´ø RRD·Î ºÎÅÍ ÇØ°áÃ¥À» ¾ò°Ô µÇ¾ú´Ù. RRD¸¦ ÀÌ¿ëÇϸé, ÀúÀåµÈ µ¥ÀÌÅÍ·Î ºÎÅÍ ¼Õ½±°Ô TrendÁ¤º¸¸¦ ¾ò¾î³¾ ¼ö ÀÖ´Ù. ÇØ¼­ °â»ç°â»ç À¥·Î±×¸¦ Àо 1ºÐ´ÜÀ§·Î countingÇÑ Á¤º¸¸¦ RRD¿¡ ³Ö¾î¼­ À¥¼­ºñ½ºÀÇ ½Ã°£´ë/¿äÀϺ° Æ®·£µå¸¦ ºÐ¼®Çϱâ À§ÇÑ ÅøÀ» ¸¸µé¾îº¸¾Ò´Ù.

RRD »ý¼º

´ÙÀ½°ú °°Àº DS/RRA·êÀ» ¸¸µé¾ú´Ù. Æ®·£µå ºÐ¼®ÀÇ °æ¿ì °¢ ¿ùÀÇ ÁÖ°£´ÜÀ§ ºñ±³µîÀÌ °¡´ÉÇØ¾ß Çϱ⠶§¹®¿¡, °¡´ÉÇÑ ¿À·£½Ã°£µ¿¾È RAW µ¥ÀÌÅ͸¦ ½×¾ÆµÑ Çʿ䰡 ÀÖ´Ù. 1ºÐ, 5ºÐ, 30ºÐ, 2½Ã°£, 2ÀÏÀÇ µ¥ÀÌÅ͸¦ 1³â°£ À¯ÁöÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. µ¥ÀÌÅÍÀÇ ¾çÀÌ Á» Ä¿Áö±ä ÇϰÚÁö¸¸, ±×·¡ºÃÀÚ 80M ¹Ì¸¸À¸·Î 1³â¿¡ ÀÌÁ¤µµ¸é, ±×¸® ºÎ´ã°¡Áö ¾Ê´Â Å©±âÀÎµí ½Í´Ù.

´ÙÀ½Àº Á¤ÀÇµÈ DS, RRA·êÀÌ´Ù. ÀúÀå °£°ÝÀº 60ÃÊ·Î °áÁ¤Çß´Ù. ÇöÀç ÀúÀåµÈ À¥·Î±×¸¦ º¸´Ï, °¡Àå ¿À·¡µÈ°Ô 2007/07/31 ÀÌ¿´´Ù. ÇöÀç ½Ã°£ÀÌ 2007/9/6ÀÏÀÌ´Ï, start ½Ã°£À» ´ë·« ¿À´Ã-40 À¸·Î Àâ¾Ò´Ù.
# rrdtool create webhits.rrd --start 1185608570 -s 60 \ 
DS:hits:GAUGE:120:U:U \ 
RRA:AVERAGE:0.5:1:525600 \ 
RRA:AVERAGE:0.5:5:105120 \ 
RRA:AVERAGE:0.5:30:17520 \ 
RRA:AVERAGE:0.5:120:1440 \ 
RRA:AVERAGE:0.5:1440:730 \ 
RRA:MAX:0.5:30:17520 \ 
RRA:MAX:0.5:1440:730 
 

À¥·Î±× Counting ÇÁ·Î±×·¥ ÀÛ¼º

apache ·Î±×¸¦ ÀоîµéÀÎ ´ÙÀ½ ºÐ´ÜÀ§·Î counting ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. apache·Î±×ÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
38.99.13.124 - - [31/Jul/2007:18:05:43 +0900] \ 
"GET /modules/moniwiki/wiki.php/data_structure_stack?action=edit HTTP/1.0" 200 10181 
 
ÀÌ ·Î±×¸¦ ºÐ¼®Çؼ­ ·Î±× »ý¼º½Ã°£À» ¾Ë¾Æ³»°í, 60ÃÊ ½Ã°£´ÜÀ§·Î Ä«¿îÆÃÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù.
#include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <time.h> #include <stdio.h> #include <string.h> const char date[13][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""}; int getTimeStemp(char *strdate) { struct tm tm_ptr; char seps[] = "/: "; char *tr; int idx = 0; tr = strtok(strdate, seps); while(tr != NULL) { switch(idx) { case 0: tm_ptr.tm_mday = atoi(tr); break; case 1: tm_ptr.tm_mon =dayIdx(tr); break; case 2: tm_ptr.tm_year = atoi(tr) - 1900; break; case 3: tm_ptr.tm_hour = atoi(tr); break; case 4: tm_ptr.tm_min = atoi(tr); break; case 5: tm_ptr.tm_sec = atoi(tr); break; } idx++; tr = strtok(NULL, seps); } return mktime(&tm_ptr); } int main(int argc, char **argv) { char *fname = argv[1]; FILE *fp = NULL; char buf[1024]; char *sp; char *ep; char date[80]; int curtime = 0; int prevtime = 0; int logcount = 0; fp = fopen(fname, "r"); if (fp == NULL) { perror("Error :"); return 1; } while(fgets(buf, 1024, fp)) { sp = strstr(buf,"["); if (sp == NULL) continue; ep = strstr(buf, "]"); if (ep == NULL) continue; snprintf(date, ep - sp, "%s", sp+1); curtime = getTimeStemp(date); if (!prevtime) prevtime = curtime; if ((curtime - prevtime) > 60) { printf("%d %d\n", curtime, logcount); logcount = 0; prevtime = curtime; } else { logcount++; } } } int dayIdx(char *str) { int i; for (i = 0; i < 13; i++) { if(strcmp(str, date[i]) == 0) return i; } return -1; }
°á°ú´Â Ç¥ÁØÃâ·ÂµÈ´Ù. À̰ÍÀ» ÆÄÀÏ·Î ÀçÁöÇâÇϰí, ÀçÁöÇâµÈ ÆÄÀÏÀ» ¾Æ·¡ÀÇ perl ½ºÅ©¸³Æ®·Î Àоîµé¿©¼­ rrd update ½Ã۸é, web trend ºÐ¼®À» À§ÇÑ µ¥ÀÌÅͼÂÀÌ ¿Ï¼ºµÈ´Ù.
#!/usr/bin/perl 
 
print  $ARGV[0]; 
 
open(FD, $ARGV[0]) || die ("Cannot open File $ARGV[0]"); 
 
$count = 0; 
while($line = <FD>) 
{ 
    $line =~ s/ /:/; 
    $line =~ s/\n//; 
    system("/usr/local/bin/rrdtool update /usr/local/mutihost/joinc/modules/rrd/webhits.rrd $line"); 
    print $count++,"\n"; 
} 
 

ÀÌÁ¦ rrdtool graph¸¦ ÀÌ¿ëÇØ¼­, À̹øÁÖ¿Í Áö³­ÁÖÀÇ trend¸¦ ºñ±³Çϱâ À§ÇÑ ±×·¡ÇÁ¸¦ ¸¸µé¾ú´Ù.
rrdtool graph webhits.png -s "-1 week" \ 
DEF:hits=webhits.rrd:hits:AVERAGE \ 
DEF:lastweek=webhits.rrd:hits:AVERAGE:start="-2 weeks":end="start + 1week" \ 
SHIFT:lastweek:604800 \ 
LINE1=lastweek#00FF00:"last week" LINE1:hits#FF0000:"this week" 
 
http://www.joinc.co.kr/modules/rrd/webhits.png

ÀÌ·¸°Ô ÇØ¼­ ¸¸µé¾îÁø ±×·¡ÇÁ´Â ºÐ¼®µÈ µ¥ÀÌÅ͸¦ Á¤È®ÇÏ°Ô º¸¿©ÁÖ±â´Â ÇÏÁö¸¸, Trend¸¦ º¸¿©Áֱ⿡´Â ³Ê¹« µéÂß³¯Âß ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. Trend¸¦ Á» ´õ ¸íÈ®ÇÏ°Ô º¸¿©ÁÖ±â À§Çؼ­´Â Log ±×·¡ÇÁÈ­ ½Ãų Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ graph¸¦ »ý¼ºÇß´Ù.
# rrdtool graph webhits2.png -s "-1 week" -t "Web Server Hits - This week vs Last week" -v "hitss/minute" \ 
DEF:hits=webhits.rrd:hits:AVERAGE:start="-8 days":end="start + 8days" \ 
DEF:lastweek=webhits.rrd:hits:AVERAGE:start="-15 days":end="start + 8 days" \ 
SHIFT:lastweek:604800 \ 
CDEF:t_hits=hits,86400,TREND \ 
CDEF:t_lastweek=lastweek,86400,TREND \ 
LINE1:lastweek#CCFFCC:"last week" LINE1:hits#FFCCCC:"this week" \ 
LINE1:t_lastweek#00FF00:"last week" LINE1:t_hits#FF0000:"this week" 
 
¿©±â¿¡´Â 2°³ÀÇ CDEF °¡ Ãß°¡µÇ¾î ÀÖ´Ù. À̰ÍÀº 86400ÃÊ(ÇÏ·ç)´ÜÀ§·Î Æ®·£µå¸¦ º¸¿©ÁÖ±â À§ÇÑ ¿ëµµ·Î »ç¿ëµÈ´Ù. ÀÌ·¸°Ô CDEFÀÇ TREND·Î ´Ù½Ã °è»êÇÔÀ¸·Î½á, ¾Æ·¡¿Í °°ÀÌ ÀÏÁÖÀϰ£ÀÇ Æ®·£µå¸¦ º¸¿©ÁÖ´Â ±×·¡ÇÁ¸¦ ¿Ï¼ºÇß´Ù.
http://www.joinc.co.kr/modules/rrd/webhits2.png

À§ÀÇ ±×·¡ÇÁ´Â óÀ½ ±×·¡ÇÁ¿Í ÇÔ²² º¸¿©ÁÜÀ¸·Î½á ½ºÄÉÀÏÀ» ¸ÂÃß±â À§Çؼ­, ÃÖ±Ù Trend µ¥ÀÌÅͰ¡ ¸íÈ®È÷ Ç¥½ÃµÇÁö ¾Ê´Â´Ù. ÇØ¼­ ÃÖÃÊ ±×·¡ÇÁ¸¦ Á¦È¸Çϰí, ÃÖ±Ù ±×·¡ÇÁ¸¸ »Ì¾Æ¼­ º¸±â·Î Çß´Ù.
# rrdtool graph webhits2.png -s "-1 week" -t "Web Server Hits - This week vs Last week" -v "hitss/minute" \ 
DEF:hits=webhits.rrd:hits:AVERAGE:start="-8 days":end="start + 8days" \ 
DEF:lastweek=webhits.rrd:hits:AVERAGE:start="-15 days":end="start + 8 days" \ 
SHIFT:lastweek:604800 \ 
CDEF:t_hits=hits,86400,TREND \ 
CDEF:t_lastweek=lastweek,86400,TREND \ 
LINE1:t_lastweek#00FF00:"last week" LINE1:t_hits#FF0000:"this week" 
 
http://www.joinc.co.kr/modules/rrd/webhits3.png

Áö³­ÁÖ¿Í À̹øÁÖÀÇ Trend º¯È­¸¦ Á»´õ Á÷°üÀûÀ¸·Î ¹Ù¶óº¼ ¼ö ÀÖ´Â ±×·¡ÇÁ°¡ ¸¸µé¾îÁ³À½À» ¾Ë ¼ö ÀÖ´Ù.

ÇÏ´Â ±è¿¡ ¿ùº° Æ®·£µåµµ ¸¸µé¾î º¸¾Ò´Ù.
# rrdtool graph webhitsmon.png -s "-1 month" -t "Web Server Hits - Trend" -v "hits/minute" \ 
DEF:hits=webhits.rrd:hits:AVERAGE CDEF:t_hits=hits,86400,TREND \ 
CDEF:tt_hits=hits,604800,TREND \ 
LINE1:t_hits#00FF00:"Trend/Day" LINE1:tt_hits#FF0000:"Trend/week" 
 
TREND¸¦ À§ÇÑ 2°³ÀÇ CDEF¸¦ ¸¸µé¾ú´Ù. Çϳª´Â sliding windowsÀÇ Å©±â¸¦ ÇÏ·ç, ´Ù¸¥ Çϳª´Â sliding windowsÀÇ Å©±â¸¦ ÀÏÁÖÀÏ·Î Çß´Ù.

http://www.joinc.co.kr/modules/rrd/webhitsmon.png

¾Æ·¡´Â ÀÏÁÖÀÏ´ÜÀ§·Î TREND¸¸À» ³ªÅ¸³½ ±×·¡ÇÁÀÌ´Ù.

http://www.joinc.co.kr/modules/rrd/webhitsmon2.png

¿ù°£ Æ®·£µåÀÇ º¯È­¸¦ È®½ÇÈ÷ ¾Ë ¼ö ÀÖ´Ù. 33ÁÖ°¿¡ log hits°¡ ÁÙ¾îµç°Ç, ¿¬ÈÞ (±¤º¹Àý)ÀÌ ³¢¾îÀÖ¾ú±â ¶§¹®ÀÌ´Ù.

ÅÂ±× :

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.