Gnuplot을 사용하여 웹 페이지에 데이터 표시하기

[출처] http://www.ibm.com/developerworks/kr/library/au-gnuplot/index.html

David Tansley, System Administrator, Ace Europe

요약: Gnuplot을 사용하면 원시 데이터로 그래픽 이미지를 제공하여 시스템에서 웹 페이지를 동적으로 생성할 수 있습니다. 이 원시 데이터에는 일반적으로 시스템 성능, 스토리지 또는 데이터베이스 증가에 대한 MIS 관련 정보가 포함되어 있습니다.

원문 게재일: 2010 년 1 월 19 일
번역 게재일: 2010 년 3 월 09 일
난이도: 초급
영어로: 보기
페이지뷰: 4218 회
의견: 0 (보기 | 의견 추가 - 로그인)

평균 평가 등급 1 개 총 7표 평균 평가 등급 (7 투표수)
아티클 순위

소개

Gnuplot은 트렌드 및 그래프를 생성하는 데 사용되는 도구이다. Gnuplot은 일반적으로 시계열 기반 데이터 수집에 사용되지만 여기에 한정되지 않으며 정적 데이터도 사용할 수 있다. Gnuplot은 일괄처리로 실행되거나 작동 중에 실행될 수 있으며 그래픽 표시기 또는 웹 브라우저로 표시된다. 이 기사에서는 일괄처리 파일을 사용하여 sar 및 기타 데이터 소스에서 수집된 데이터를 생성하는 gnuplot을 사용하는 방법을 보여 준다. Gnuplot에는 집합 연산자를 사용하는 명령 옵션이 매우 다양하다. 하지만 선이나 상자를 사용하여 기본 그래프를 생성하려면 문서화에 대한 지식이 일부 있어야 한다.

이 데모를 위해 웹 서버를 사용하여 그래프를 제공한다.


Gnuplot 개요

Gnuplot은 원시 표 형식 데이터를 그래픽 파일 이미지로 변환한다. 자주 사용되는 형식은 png, pdf 및 jpeg이며 이러한 형식은 X 터미널, 웹 페이지 또는 일반 그래픽 표시기 유틸리티에 직접 또는 작동 중에 제공될 수 있다. 이미지도 문서로 가져올 수 있다. 'set' 명령을 사용하여 이미지가 형식화되고 표시되는 방법을 지정하여 gnuplot과 상호작용하는 데 명령 인터페이스가 사용된다. 일반적으로 여기에는 그래프의 크기, 사용할 색상, 배율, x,y 좌표 및 출력 이미지 이름이 포함된다. 그런 다음 plot 명령은 gnuplot 엔진을 사용하여 실제로 이미지를 생성하는 데 사용된다 3D 그래프 이미지를 그리는 splot 명령도 있다. 명령 인터페이스를 사용하여 명령을 대화식으로 실행할 수도 있지만 쉘 'here' 문서 메소드로 파일(필요한 경우)의 변수를 사용하여 재사용할 수 있기 때문에 구성 파일을 사용하는 것이 가장 좋다. 그런 다음 구성 파일은 gnuplot을 통해 연결되어 이미지 파일을 생성한다. 구성 파일에 오류가 있는 경우에는 이 프로세스 중에 이러한 오류가 표시되어 오류의 위치가 강조표시된다. 새로 생성된 그래픽 파일과 함께 이미지가 표시될 수 있다.

그래프를 생성하는 데 사용되는 데이터 수집 프로세스와 마찬가지로 gnuplot을 통해 연결하기 전에 수집된 데이터를 약간 수정해야 한다. 이 필터링에는 데이터 파일에서 헤더 또는 트레일러를 삭제하는 것도 포함되며 sed와 awk를 사용하면 텍스트 필터링 요구사항을 충족할 수 있다.


Gnuplot 설치하기

Gnuplot 버전 4.2는 AIX?? 5L Source Packages 웹 사이트(http://www.perzl.org/aix/index.php)에서 rpm으로 다운로드할 수 있다.

Gnuplot뿐만 아니라 이러한 데모에는 실행 중인 http 서버도 필요하다.

필요한 종속 라이브러리와 http 서버는 여기 또는 AIX 도구 상자 웹 사이트에서 다운로드할 수도 있다.

다음 rpm 라이브러리는 전제 조건이기 때문에 gnuplot을 설치하기 전에 설치되어 있어야 한다.

fontconfig-2.7.2-1.aix5.1.ppc.rpmexpat-2.0.1-2.aix5.1.ppc.rpm freetype2-2.3.9-1.aix5.1.ppc.rpmzlib-1.2.3-5.aix5.1.ppc.rpm libpng-1.2.40-1.aix5.1.ppc.rpmgd-2.0.35-4.aix5.1.ppc.rpmlibjpeg-7-1.aix5.1.ppc.rpmlibXpm-3.5.7-2.aix5.1.ppc.rpm  gettext-0.17-1.aix5.1.ppc.rpmglib2-2.20.5-1.aix5.1.ppc.rpm

설치된 rpm을 나열하려면 다음을 사용한다.

# rpm –qa

마지막으로 실제 gnuplot 패키지를 설치한다.

# rpm -ivh gnuplot-4.2.4-1.aix5.1.ppc.rpm 

테스트할 gnuplot을 실행한다. Gnuplot 인터페이스 명령이 제공된다(인터페이스를 종료하려면 quit 실행).

$ gnuplot      G N U P L O T        Version 4.2 patchlevel 4        last modified Sep 2008        System: 5.3        Copyright (C) 1986 - 1993, 1998, 2004, 2007, 2008        Thomas Williams, Colin Kelley and many others        Type `help` to access the on-line reference manual.        The gnuplot FAQ is available from http://www.gnuplot.info/faq/        Send bug reports and suggestions to <http://sourceforge.net/projects/gnuplot>Terminal type set to 'unknown'gnuplot>


SAR로 그래프 작성하기

SAR은 성능 데이터를 수집하는 가장 일반적인 방법이므로 SAR을 유일한 예제로 사용한다. Listing 1. sarx.txt에는 5시간 동안 매시간 간격으로 sar을 실행하여 얻은 필터링된 출력이 포함되어 있다.


Listing 1. sarx.txt
14:10:50        33  27    4     36      4.0015:10:50        29  14    3     28      4.0016:10:50        35  21    1     31      4.0017:10:49        38 29    2     39      4.0018:10:40        42  29    3     35      4.00

다음으로 그래프를 생성하는 데 필요한 모든 gnuplot 명령을 포함할 파일을 작성한다. 이 파일의 이름은 원하는 대로 지정할 수 있으며 이 데모에서는 sarx.conf라고 지정한다.

이미지를 생성하려면 그래픽 파일의 형식과 이 그래픽 파일의 시각적 표시를 gnuplot에 알려야 한다. Listing 2. sarx.conf에는 집합 연산을 발행할 구성 파일이 포함되어 있다. # 문자로 시작하는 행은 모두 주석으로 간주된다. Listing 2를 더 자세하게 살펴보자.

set terminal png truecolor

먼저 결과 이미지의 형식을 gnuplot에 알리는 터미널 유형이 설정된다. 이 기사에서는 PNG(Portable Network Graphics) 형식을 사용한다.

set output "sarimage.png"

그런 다음 실제 출력 이미지 파일 이름을 gnuplot에 알린다. 여기서는 이 파일을 sarimage.png라고 한다.

set autoscale

그래프 생성 시에는 데이터의 x축 및 y축 범위를 지정해야 한다. 이 예제에서는 gnuplot이 이러한 결정을 작성하고 범위 값을 계산하도록 한다. 하지만 나중에 설명되는 바와 같이 이는 대체될 수 있다.

set xdata timeset timefmt "%H:%M:%S"

이 예제에서는 날짜 값을 데이터의 참조 위치로 사용하므로 gnuplot에 이 값과 이 값의 형식을 알린다. Listing 1. sarx.txt에 포함된 예제에서 이 값의 형식은 다음과 같다.

Hour:Minute:Seconds

UNIX 날짜 표기법에 따라 날짜 변수를 큰따옴표로 묶는 것에 주의한다. 기타 일반적인 형식은 다음과 같다.

%d  - day of month 1 -31%m - month of year 1 -12%y  - year 0-99%b  - three character of month name , ie: jan ,feb%B  - name of month

Hour-Minute 형식의 날짜 열이 있는 경우에는

: set timefmt ″%H-%M″으로 표시된다.

set style data lines

그래프가 제공되면 표시되는 데이터는 부드러운 데이터 선이 되어야 한다. 기타 일반적인 그리기 형식은 점, 상자, 오차 막대, 촛대가 있다.

plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"

그런 다음 plot 명령을 사용하여 그래프가 실제로 그려지거나 생성된다. 먼저 데이터 입력 파일 이름이 제공된 후 그릴 열을 gnuplot에 알린다. 이 예제에서는 1열을 x축으로 사용하고 제목이 ″%user″인 2열 데이터를 그린 후 제목이 ″%sys″인 3열을 그린다. 제목 또는 레이블은 그래프의 오른쪽 상단에 표시된다. 2열 및 3열은 1열을 x 값 참조로 사용한다. plot 명령에 있는 각각의 'using' 명령문은 쉼표로 구분된다. 두 개의 작은 따옴표 사용에 대해서는 다음 섹션에서 설명한다.

이미지 파일을 생성하려면 형식이 다음과 같다.

cat < conf file> | gnuplot

이 데모에서는 다음을 사용한다.

$ cat sarx.conf | gnuplot

이제 sarimage.png 파일이 생성된다. 이미지를 보려면 웹 서버 파일 시스템의 htdocs 디렉토리로 파일을 복사한다.

그림 1. sarimage는 제공된 샘플 데이터를 사용하여 웹 브라우저에서 결과 출력을 보여 준다.


Listing 2. sarx.conf
#sarx.confset terminal png truecolorset output "sarimage.png"set autoscaleset xdata timeset timefmt "%H:%M:%S"set style data linesplot "sarx.txt" using 1:2 title "%user", '' using 1:3 title "%sys"


그림 1. sarimage


플롯 프리젠테이션

명령행의 간단한 방식을 plot 명령에 사용할 수 있다. 예를 들어, 초기 plot 명령 뒤에 옵션의 첫 번째 문자를 사용하여 plot 명령에 대한 추가 옵션이 축약될 수 있다. 하지만 이 데모에서는 입력 파일(sarx1.txt)을 다시 제공하는 대신 두 개의 작은따옴표를 사용하여 입력 파일만 축약한다. 다음은 이러한 설명을 보여준다. 첫 번째 예제는 이 데모에서 사용 중인 표기법이고 두 번째 예제는 축약된 표기법이며 세 번째 예제는 약어 없이 전체 명령문을 제공한다. 세 예제는 모두 동일한 출력을 생성한다.

plot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"plot "sarx1.txt" using 1:2 title "%user", '' u 1:3 t "%sys"plot "sarx1.txt" using 1:2 title "%user",\″sarx1.txt'' using 1:3 title "%sys"

다른 사용자에게 그래프를 표시하는 경우에는 주제를 쉽게 식별할 수 있도록 명확한 레이블 및 제목을 종종 포함하는 것이 좋다. x 및 y 레이블을 포함하려면 xlabel 및 ylabel 명령을 사용하고 텍스트를 따옴표로 묶는다.

set ylabel " y line info here"set xlabel " x line info here"

그래프의 제목 헤더를 포함하려면 title 명령을 사용한다.

set title "main title info here"

Gnuplot은 그래프 생성 시 고유의 기본 색상을 사용한다. 기본적으로 생성된 그래프는 흰색 배경 위에 있으며 이는 그래프가 인쇄될 수 있기 때문에 효과적이다. 하지만 문자 x가 접두부에 있는 16진 범위에 표시된 색상 코드를 사용하여 색상을 변경할 수 있다.

xrrggbb

Google에서 'hex color codes'를 검색하면 16진으로 된 전체 색상 범위가 생성된다.

Gnuplot의 기본 색상을 대체하는 색상의 순서는 다음과 같다.

backgroundborder XYplotting lines

16진으로 된 밝은 회색은 C9C9C9이다.

배경이 밝은 회색인 그래프를 생성하려면 다음을 사용할 수 있다.

set terminal png  xC9C9C9

위 명령에서는 gnuplot에서 사용하는 기본 색상을 대체하는 터미널 유형 png로 truecolour 옵션을 대체해야 했다는 것에 주의한다. 기본 설정을 대체할 색상을 더이상 지정하지 않았기 때문에 gnuplot은 그래프의 나머지 부분에 고유의 기본 색상을 사용한다.

그래프를 볼 때는 격자를 참조 위치로 유용하게 사용할 수도 있다. 격자 옵션을 사용하여 다음 명령은 그래프에 격자를 삽입하도록 gnuplot에 알린다.

set grid

내재적으로 x 및 y 좌표를 설정할 수 있지만 데이터의 폭보다 작은 범위를 지정하거나 그래프가 그려지지 않도록 해야 한다. Listing 1에 포함된 샘플 데이터를 사용하면 시간 x 좌표의 범위가 14:10:50 - 18:10:40 사이임을 알 수 있다.

14 - 50 사이의 Y 좌표 범위(2열 및 3열)

이 정보를 이용하여 자체 범위를 지정할 수 있다. 이 예제에서는 14:00 - 18:15 사이의 x 범위와 10 - 50 사이의 y 범위를 사용한다.

set xrange ["14:00:00" : "18:15:00"]set yrange ["10:00" : "50:00" ]

Listing 3에서는 이러한 변경사항을 사용하며 그래프 출력이 그림 2에 포함되어 있다.


Listing 3. sarx2.conf
#sarx2.confset terminal png  xC9C9C9set output "sarimage.png"set autoscaleset xdata timeset timefmt "%H:%M:%S"set ylabel "Performance"set xlabel "Time"set title "Sar Output Example"set xrange ["14:00:00":"18:15:00"]set yrange ["10:00" : "50:00" ]set gridset style data linesplot "sarx1.txt" using 1:2 title "%user", '' using 1:3 title "%sys"


그림 2. sarimage2


히스토그램이 포함된 Gnuplot

히스토그램 또는 상자도 데이터를 표시하는 데 사용할 수 있으며 일부 경우에는 정적 데이터를 사용하는 것보다 나은 시각적 표시를 제공한다. Listing 4는 AIX 애플리케이션 상자에서 가져온 전체 사용자 그룹 수가 포함되어 있다. 1열에는 실제 AIX 그룹 이름이 포함되어 있고 2열에는 전체 구성원이 포함되어 있다.


Listing 4. grpdata.txt
 staff   54apps    22sybgrp  12db2grp1 29dasdm   8dstage 21dsgrp  8batch  28db2prd 1

히스토그램을 사용하려면 히스토그램을 사용하여 그래프가 생성된다는 것을 gnuplot에 알리기만 하면 된다.

set style data histograms

생성되는 기본 히스토그램의 상자 테두리는 굵게 표시되지 않으며 상자가 색으로 채워지지 않는다. 하지만 경계를 지정하면 x축 선을 따라 상자 맨 아래에 굵은 이중 실선이 있을 수 있다(시각적으로 올바르게 표시되지 않음).

Gnuplot은 위쪽, 아래쪽, 왼쪽 및 오른쪽 순서로(각각의 값은 1, 2, 4, 8임) 상자의 경계를 그린다. 하나 이상의 테두리를 지우려면 해당 값의 합계를 제공한다. 이 예제에서는 아래쪽 테두리를 삭제해야 하므로 -1 옵션을 사용하여 아래쪽 테두리가 지워진다. 채우기 옵션을 지정하면 상자가 기본 색상으로 채워진다.

set style fill solid 1.00 border -1

X 좌표의 경우 시간 분포를 사용하는 대신 그룹 이름을 사용한다. xtic 옵션을 사용하면 데이터 레이블(1열)과 함께 tic을 x축을 따라 배치하도록 gnuplot에 지시한다. 이 경우에는 그룹 이름이다. 하지만 그래프의 tic 사이에 맞지 않는 xtic의 시간 형식 또는 다수의 문자가 포함된 레이블을 제공하는 경우도 있다. 레이블이 겹치게 된다. 이를 예방하려면 레이블을 90도 회전하여 세로로 만든다. 다음 명령을 사용하여 이를 수행할 수 있다.

set xtic rotate by 90

2열에 있는 데이터는 1열(x 데이터)을 참조로 사용한다.

 ( 2:xtic (1)

그래프 생성 시 데이터 제목으로 "apps groups numbers"를 제공한다.

plot "grpdata.txt" using 2:xtic(1) title "apps group numbers"

grpimage.png 이미지를 생성하려면 다음을 사용한다.

$ cat grphist.conf | gnuplot

Listing 5에는 아래의 그림 3에 표시되어 있는 이미지를 생성하는 데 필요한 gnuplot 명령이 포함되어 있다.


Listing 5. grphist.conf
# grphist.confset terminal png truecolorset output "grpimage.png"set gridset xtic rotate by 90set style data histogramsset style fill solid 1.00 border -1plot "grpdata.txt"  using 2:xtic(1) title "apps group numbers"


그림 3. grpimage

물론 sar 예제에서와 같이 히스토그램에는 둘 이상의 데이터 세트가 있을 수 있다. 이제 데이터의 다른 소스를 살펴보자. Listing 6에는 디스크 배열에 포함된 3개월 동안의 데이터 증가 및 감소를 반영하는 데이터가 포함되어 있다. 1열은 디스크 배열 이름이고 2열은 1개월 동안의 디스크 증가 사용량이고 3열은 다음 달의 디스크 증가 사용량이며 그 다음 달의 증가량이 4열에 포함되어 있다.


Listing 6. disk.txt
hdisk2 420 425 410hdisk3 700 780 760hdisk4 450 450 452hdisk5 680 702 690hdisk6 320 330 329hdisk7 530 515 514

데이터 생성에 필요한 conf 파일이 Listing 7에 포함되어 있다. Plot 명령을 면밀하게 살펴 x축 데이터의 gnuplot을 대체하려는 경우 xtic 명령을 다시 사용한다. 히스토그램 생성 시 2열, 3열 및 4열에서는 x축을 참조로 사용한다. 일단 x축을 참조하면 2열은 x축을 사용해야 한다.

2:xtic(1)

Gnuplot에서는 구성될 나머지 열도 x축을 참조한다고 가정하기 때문에 plot 명령 내에 xtic을 지정하지 않아도 된다.

plot "disk.txt"  using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "Nov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"

이미지를 생성하려면 다음을 사용한다.

$ cat diskhist.conf | gnuplot

결과 이미지가 그림 4에 표시된다.


Listing 7. diskhist.conf
# diskhist.confset terminal png truecolorset output "diskimage.png"set gridset style data histogramsset style fill solid 1.00 border -1plot "disk.txt"  using 2:xtic(1) title "Oct-09 data growth(gb)", '' using 3 title "Nov-09 data growth(gb)", '' using 4 title "Dec-09 data growth(gb)"


그림 4. diskimage


결론

Gnuplot은 여러 유형의 데이터로부터 서로 다른 그래프를 생성하는 데 사용할 수 있는 도구이다. 쉘 스크립트를 사용한 그래프 생성 프로세스는 작동 중에 gnuplot을 사용하여 그래프를 생성하는 데 사용할 수 있기 때문에 이 프로세스를 자동화하려면 'here' 문서 메소드를 사용하는 것이 좋다. 웹 서버의 그래프 캐싱을 중지하려면 스크립트에 적절한 HTML META 태그를 사용한다(예: 'no-cache'문).


참고자료

교육

토론

필자소개

author photo

David Tansley는 프리랜서 저자이다. UNIX 관리자로 15년 동안 근무했으며 마지막 8년 동안은 AIX를 사용했다. 배드민턴을 즐기고 F1을 시청하면서 휴식을 취하지만 무엇보다도 아내와 GSA 오토바이를 타고 여행하는 걸 좋아한다.

+ Recent posts