GnuPlot For System Admin

Bookmark and Share

수많은 오픈소스 프로젝트 중, 고전에 속하는 것 중 하나가 GNU Plot 이다. GNU Plot은, 일련의 수치 데이터 등을 이용하여, 이것을 간단한 (또는 조금 복잡한) 그래프로 시각화하는 도구이다. 수치 데이터를 다루는 과학기술 분야에서 두루 쓰이는데, 우리 시스템 관리자 역시 가끔 수치를 다룰 일이 있으니, 그 기초를 알아두면 도움이 될 것 같다.

참고로, GNU Plot 외에도 다음과 같은 오픈소스 소프트웨어가 수치 데이터나 시각화 영역에서 많이 사용되고 있다.

뭐 쎄고 쎘는데… 관련된 것 중심으로 생각나는 것들.

SAR Data를 시각화하자

첨부의 Tarball을 풀면, 다음과 같은 파일이 들어있다.

sysstat.sh 하나의 설정에 대하여, 서버로부터 SAR 데이터를 받아오고, 그림을 그리는 스크립트
all.sh 모든 설정(env.*)에 대하여 systat.sh을 돌리는 스크립트
sa.plot 실제로 그림을 그리는, 오늘의 주인공
sar.rhel6 RHEL6 용 sar 명령어
env.mia 예시 서비스 군에 대한 설정파일

이것을 적당한 곳에 풀고, env.my_service 파일을 하나 만들어서 돌려주면 graph 라는 경로 아래에 다음과 유사한 그래프가 생성된다.

sa--skcc-miapdb1--2014-07-29.png

사용법

사용법은 간단하다. 기본적으로, 그냥 스크립트를 돌려보면, 다음과 같이 용법 설명이 표시된다.

$ ./sysstat.sh 
usage: ./sysstat.sh env.service [drawonly]
$

그래서, 다음과 같이 설정을 만든다.

servers="server-one server-two server-three"
version="rhel6"
network="25"

servers 는 대상 서버의 IP나 Hostname을 죽 적어주고, version은 해당 서버들의 OS 버전을 적는다. 이 버전은 해당 버전의 sar binary를 선택하는 기준이 된다. 위 예에서는 rhel6 라고 설정이 되어 있으므로 현재 디렉터리의 sar.rhel6가 선택된다. network 값은 네트워크 사용량을 어느 기준으로 그릴지 선택한다.

설정이 되었으며, 다음과 같이 명령을 수행하면 된다.

$ ./sysstat.sh env.my_service
...
$

서비스 군을 여러 개 정한 경우에는 간단하게 다음과 같이…

$ ./all.sh
...
$

쉽다. :-)

현재의 sysstat.sh은 servers에 열거된 서버들에 scp 로 접속하여 파일을 가져온다. 그러니, 그 방식이 맘에 들지 않으면 스크립트를 바꾸면 된다. 나는 마음에 든다. (여기까지가 나의 몫)

그래프의 해석

딱 보면 무슨 뜻인지 알 수 있어야 시각화인데, 그래프를 그렇게 잘 그렸을지 모르겠다. 아무튼, 내겐 유용한데, 전반적으로 읽은 방법은 아래와 같다.

CPU

100%를 기준으로 User, System, I/O Wait 등을 누적 그래프로 그린 것이다. 대체로 사용자 부분이 두드러질 것이나, 어딘가 두 선의 간격이 넓은 곳이 있다면 System이나 Wait 등의 값이 높은 것이다.

Memory

역시 100%를 기준으로 하고 있으니, 절대량은 Label에 표시된 전체 메모리 용량을 참고해야 한다. 역시 누적 그래프이고, 푸른 색의 사용자 부분을 중심으로 보면 될 것 같다.

Network

나가고 들어오는 양이다 보니 이것은 100%라는 개념이 없고, 위의 설정에 따라 Y 축의 높이가 정해진다. 그리고 RX/TX 각각의 절대량 개념이므로 누적의 개념이 없다.

Disk

Network와 유사하게 해석하면 된다.

끝내며

별거 아닌데, 글로 쓰려니 장황하다. 이 글은 단지 GNU Plot을 이용하여 만든 SAR 데이터 시각화 스크립트와 그 사용법에 대한 내용이지만, 하고 싶은 얘기는 따로 있다.

오픈소스 도구 또는 GNU 도구의 특성이란 것이, 이렇게 평소 눈여겨 보지 않았던 마치 다른 영역의 것처럼 여겼던 것이, 가끔 이렇게 썩 유용한 내 손 안의 맥가이버 칼이 된다는 것이다. (어쩌면 그 태동에서 비롯되었겠지만 유닉스 철학과도 닿아 있는 부분이 있다.)

참 접근하기 쉬운데도 우리가 놓치고 있는, 수 많은 간단하지만 쓸만한, 내 주머니의 돈을 아껴주면서 가려운 부분을 적당히 긁어주는, 그런 도구를 많이 들 발견하여 사용했으면 좋겠다.

아! 시간이 되면 Graphviz에도 관심을 가져보시라. 난 이것을 이용하여, netstat을 주기적으로 돌리거나 iptables 로그로부터 추출한 데이터로, 어떤 서버가 어떤 서버에 얼마나 많이 접근을 하는지 "서버 간 관계도"를 자동으로 그려봤는데, 서버 분리/이전 프로젝트에서 IP 변경에 따른 영향도를 분석하는 데 매우 유용하게 사용되었다.

Bookmark and Share


따로 명시하지 않는 한에서 이 사이트의 모든 콘텐츠는 다음의 라이선스를 따릅니다: Creative Commons Attribution-NonCommercial 3.0 License