커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 시스템 관리 / 서버운영 도움말
검색 : 사이트 WHOIS 웹서버 종류

최적화 / 튜닝 / 성능개선 (6, 글 1, 자료 3)
디스크 쿼터(quota) (3, 글 1, 자료 3)
디스크 관리 / 파일시스템 / mount (34, 글 13, 자료 12)
백업(backup) / 시스템 복구 (14, 글 6, 자료 11)
서버운영 (8, 글 2, 자료 9)
프린터 관리 / 프린팅 (7)
패키지 관리 / 패치 / rpm (10, 글 5, 자료 1)
부팅, boot / LILO / GRUB (10, 글 5, 자료 9)
서버 모니터링 (10, 글 5, 자료 2)
로그인 / 로그아웃 (1)
로그(log) / syslog (5, 글 3, 자료 3)
메모리, 스왑(swap), 램디스크(ramdisk) (3, 글 2)
사용자 관리(계정 관리) (1, 자료 1)

  gnuplot을 이용한 통계 그래프 생성 예 작성일 : 2003/10/20 23:13
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 14627
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2003.10.20(월)

    gnuplot은 수학함수와 데이터를 이용하여 2차, 3차원의 그래프로 표해주는 GNU 툴이다.
    커피닉스의 메인화면에는 gnuplot을 이용하여 통계 그래프를 출력하고 있다.
    이런 그래프를 만드는 방법을 소개할 필요성을 오래전부터 하려고 했는데 미루다가,
    얼마전 이에 대한 설명을 요청한 분이 계셔서 글을 시작한다.



    1. 개념 잡기

    필요한게 무엇이 있는가?

    - gnuplot 프로그램
    - gnuplot에서 사용할 명령 파일 (text 파일)
    - 데이터 파일 (text 파일, 여러 개일 수 있음)

    gnuplot을 실행하면 다음과 같은 명령어 입력 mode ( gnuplot> 프롬프트)로 들어가게 된다.
    plot sin(x)를 입력해보자!


    $ gnuplot
    ... 중략 ...
    gnuplot> set title "sin(x) test"
    gnuplot> set grid
    gnuplot> plot sin(x)

    gnuplot> exit


    단순한 형태의 sin함수 그래프를 볼 수 있다.
    plot '데이터 파일명'을 입력하면 해당 파일의 데이터를 읽어 그래프를 그려준다.

    위와 같은 일련의 gnuplot에서 실행해야할 명령을 파일로 저장한후 다음과 같이하면
    통계 그래프를 생성할 수 있다.

    $ gnuplot 명령 파일


    이제 감은 잡았는가?

    2. gnuplot 명령 파일과 데이타 파일 형식은?

    커피닉스에서 사용한 명령 파일을 살펴보자.
    아래 파일 내용을 gnuplot> 프롬프트 상에서 차례로 실행하도 똑같은 결과를 얻을 수 있다.


    # ------------------------------
    # coffeenix 통계용
    # ------------------------------
    set term png small color
    set size 0.28, 0.25
    set output 'coffeenix_status.png'
    set key left top
    set grid

    #
    # X,Y label 설정
    #
    set xlab "date"       6.5,0.5
    set ylab "the number" 0.8,-1

    #
    # X축을 시간으로 (중요한 부분)
    #
    set xdata time
    set timefmt "%m/%d"
    set ytics 0, 1, 5
    set xtics "10/15", 86400, "10/19"
    set format x "%d"
    #
    #
    #
    plot \
    'data_site.txt' using 1:2 title "site" with linespoints, \
    'data_file.txt' using 1:2 title "data" with linespoints


    set 으로 시작하는 것은 만들 그래프에 세부적인 설정을 위한 것이다.
    하나씩 알아보자. (굵은 글씨는 필수. 나머지는 부가적 효과를 위한 것)

    set term생성할 이미지 형식
    set size그래프 크기. 1를 기준으로 작게 크게
    set output그래프를 파일로 생성하거나 지정 장치로 보낸다. 파일명 지정
    set keyX, Y 좌표에서 사용한 키를 출력할 위치. left top은 좌상에 표시.
    기본적으로 오른쪽 상단에 표시됨
    set grid바둑판 처럼 격자 무늬를 표시
    set ylab "축이름" x,y
    set xlab "축이름" x,y
    각각 x축과 y축명을 붙이고 축 이름을 표시할 위치를 지정한다.
    디폴트 위치를 0으로 하여 x,y 위치를 지정
    set xdata time날짜별 통계에서는 필수 항목이라 생각된다.
    X좌표의 데이터 형식이 날짜임을 뜻한다.
    즉, 30 31 1 2 3 과 같은 좌표가 나올 수 있다.
    또한 28 28.5 29 29.5 30과 같은 날짜에서는 존재하지 않는 소수점을 표시하는 일도 없다.
    set timefmt "%m/%d"읽어들일 데이터 파일내의 날짜 형식이 월/일임을 나타낸다.
    set ytics 최소값,간격, 최대값
    set xtics 최소값,간격, 최대값
    Y,Y 촤표의 범위를 지정한다.
    위에서는 Y축은 0~5까지 1간격으로, X축은 10.15일~19일까지 1일(86400초)간격으로
    ※ 즉, 매번 하루마다 이 값은 달라짐
    set format x "%d"X좌표의 표시할 날짜형식을 일(day)만 표시한다.
    plot "파일명" ...데이터 파일을 읽어들인다. 결과는 set output에서 지정한 파일로.
    with linespoints는 꺽은선 그래프(line)로 표시하되, 해당 값에 점(point)을 찍어준다.
    with lines, with points, with impulses, with dots... 등이 있다.


    gnuplot에 대한 자세한 글은 참고 문서로 소개한 글을 읽어보기 바란다.

    data_site.txt의 형식을 보자. 설명안해도 바로 이해할 것이다.


    10/15 4
    10/16 5
    10/17 3
    10/18 4
    10/19 2



    $ gnuplot 명령 파일명

    과 같이 실행하면 현재 디렉토리에서 data_site.txt, data_file.txt 데이터를 읽어
    coffeenix_status.png를 생성할 것이다.

    3. 명령 파일과 데이터 파일은 어떻게 생성하는가?

    생성에 사용한 언어는 DB와 연동도 쉽고 쉘 스크립트 처럼 사용할 수 있는 php를 이용했다.
    php 스크립트에서 하는 일은 무엇인가?

    1) data file을 만든다. ( fopen(), fwrite(), fclose() 사용 )
       DB에서 최근 5일간의 자료를 날짜별로 계산하여 data파일을 만든다.
    2) gnuplot 명령 파일을 만든다. (위와 동일)
       gnuplot 명령 파일을 별도 파일로 미리 만들어두면 좋겠지만 X,Y좌표 값이 매일 바뀌므로
       set ytics, set xtics에서 사용할 값을 구하여 명령 파일을 만든다.
    3) gnuplot을 실행한다. ( system() 사용 )
       system("$binpath/gnuplot $cmdfile");

    자~ 그럼 마지막으로 할 일은 자정에 cron으로 이 php 스크립트를 실행하는 일 뿐이다.


    # crontab -e
    59 23 * * * cd $HOME/경로; /usr/local/php4/bin/php -q ./파일명.php > /dev/null 2>&1


    4. 참고한(할만한) 자료

    * 수학함수식등을 이용하여 그래프를 그려주는 gnuplot (글 신동원)
      http://coffeenix.net/doc/KoreanDoc/html/GnuPlot-KLDP/index.html
    * gnuplot Simple Manual (글 야옹고양이)
      http://coffeenix.net/doc/gnuplot/gnuplot.html
    * gnuplot (set 명령에 대해 잘 나온 글)
      http://www.comnets.rwth-aachen.de/doc/gnu/gnuplot37/gnuplot.html
    * gnupot 튜토리얼
      http://www.duke.edu/~hpgavin/gnuplot.html
    * PHP 매뉴얼
      http://coffeenix.net/go.php?site_code=91&go=http://www.php.net/manual/kr/
    * [기초] 작업 자동화, cron 설정 (글 좋은진호)
      http://coffeenix.net/board_view.php?bd_code=97
      커피닉스 카페 최근 글
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~