MRTG란 무엇인가?

MRTG(Multi Router Traffic Graph)는 본래, 네트워크 라우터의 트래픽을 그래프 형태로 표현해 주기위해 만들어진 도구이다. 하지만, 숫자로 이루어진 데이터를 시각화 한다는 특징으로 인해 그 사용 방법이 무궁무진하게 확장되었다.
예를 들어 다음과 같이, 그래프로 표현할 수 있는 데이터라면 무엇이든 MRTG를 통해 시각화 할 수 있다.
- 네트워크 스위치 포트의 비트레이트
- PC의 메모리와 하드디스크 여유공간
- 방 안의 온도나 습도의 변화
- 시간대별 변기 사용후, 변기의 물통이 다시 채워지는데 걸리는 시간(… 응? …)
물론, 같은 용도로 발매되는 상용 도구들도 많이 있다. 그것도 아주 많이 있다. 요즘에는 MRTG쓴다고 하면, 이런 얘기도 듣는다.
PRTG 말씀하시는 거죠?
(내지는)
아직도 그걸 쓰세요?
하지만 MRTG만큼 가볍고, 설정이 쉬우며, 무엇보다 무료인 도구는 없다. 아직도 MRTG가 현역으로 당당히 돌아가는 이유라 생각된다. 또한, 폭 넓은 OS들을 지원한다. 윈도우, 리눅스, 유닉스, 네트웨어등, 듣도보도 못한 OS들에도 이식 되어 있고, 오랜 기간 사용 되면서 쌓인 수많은 문서들과 자료들이 도처에 널려 있어, 문제가 발생 하면 원인을 찾아 헤메는 게 좀 더 수월하다. (찾아 헤메지 않는다고는 말 안했다..)
데비안 리눅스 서버에 MRTG 설치하는 방법
사전준비 : 웹 서버와 SNMP 데몬 설치
MRTG는 SNMP를 이용해 수집한 ①데이터로 그래프를 그리고, ②그래프를 그림파일 형태로 만들어 준 다음, ③그림파일을 볼 수 있는 웹페이지를 생성한다. 그런고로 MRTG를 설치하기 전에 SNMP 데몬과 웹서버가 먼저 설치되어 있어야 한다.
웹 서버와 SNMP 데몬이 설치되어있지 않다면, 아래의 명령어를 입력해 설치를 진행한다. 본 글에서는 웹 서버로 아파치(apache)를 사용한다.
sudo apt-get install apache2 snmp snmpd -y뭔가가 좌라라락 올라가며 필요한 패키지들의 설치가 진행된다. 설치가 완료된 후, 서비스 활성화를 위해 아래의 명령을 입력해 주면 서비스가 실행된다.
sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start snmpd sudo systemctl enable snmpd
웹 서버까지 제대로 활성화 되었는지 확인하기 위해 외부의 PC에서 웹 브라우저를 열어 데비안 리눅스 시스템의 IP를 입력해 본다. 아파치 웹 서버가 정상적으로 동작하고 있고 방화벽 설정에 문제가 없다면, 아래와 같은 기본 화면이 나타날 것이다.

MRTG 패키지 설치
아래의 명령어를 입력해 MRTG 패키지를 설치한다.
sudo apt-get install mrtg -y여느 APT 패키지와 마찬가지로 설치가 진행되다가, 뭔가를 물어보는 창이 나타난다. MRTG가 사용할 웹서버 경로가 존재하지 않으니 새로 만들겠는가 물어보는 창이다. 그냥 YES를 선택해 주면 되겠다.

창에서 빠져 나와 남은 패키지들을 다운로드 받고 설치를 계속 하게된다.
SNMP 데몬 설정
SNMP 데몬의 설정을 진행해 줄 차례이다. SNMP 데몬의 설정 파일은 /etc/snmp/snmpd.conf 이며, 수정을 위해 sudo nano /etc/snmp/snmpd.conf
를 입력하고 엔터를 쳐 주면 SNMP 데몬의 설정 파일을 편집할 수 있다. 이 파일 안에는 SNMP 데몬에 대한 여러가지 설정 항목들이 있는데, 먼저 다음과 같이 수정해 주도록 한다.
...(생략)... # Read-only access to everyone to the systemonly view #rocommunity public default -V systemonly // #을 붙여 public 커뮤니티를 사용할 수 없게 한다. #rocommunity6 public default -V systemonly // #을 붙여 public 커뮤니티를 사용할 수 없게 한다. ...(생략)... # rouser: a SNMPv3 read-only access username # arguments: username [noauth|auth|priv [OID | -V VIEW [CONTEXT]]] #rouser authPrivUser authpriv -V systemonly // #을 붙여 사용할 수 없게 한다.
이 설정은 외부 SNMP 클라이언트가 데비안 리눅스 시스템의 정보를 요청하는 것을 차단한다. 데비안 리눅스 서버는 MRTG를 실행하는 역할만 수행하며, SNMP Agent로 동작하지 않아야 한다. 때문에 snmpd.conf에서 모든 rocommunity(읽기 전용 커뮤니티)와 rouser(읽기 전용 사용자) 항목을 비활성화해 외부 SNMP 요청에 응답하지 않도록 설정했다.
SNMP 에이전트 통신 확인
SNMP에서는, 데이터를 제공하는 (즉, 모니터의 대상이 되는)놈을 에이전트(Agent), 반대로 데이터를 수집하는 (즉, MRTG 같은 모니터 시스템)놈은 메니저(Manager)라고 부른다. 지금 우리가 MRTG를 설치하고 있는 데비안 리눅스 시스템은 메니저이고, 우리가 값을 가지고 올 타겟 시스템은 에이전트이다.
SNMP에 대한 설정이 끝났으니, 에이전트와의 통신을 확인해 볼 차례이다. SNMP OID 목록을 가지고 올 수 있는 snmpwalk 명령을 이용해 타겟이 되는 에이전트에 접근을 해 보자.
snmpwalk -v 1 -c public 192.168.xxx.yyy위 명령의 상세한 의미는 아래의 내용과 같다. (더 자세한 내용은 SNMPWALK에 대해 설명하고 있는 SNMP OID 구조와 SNMPWALK·MIB Browser로 OID 찾는 방법을 참고하기 바란다.)
snmpwalk- SNMP를 이용해 가지고올 수 있는 OID가 뭐뭐 있는지 한번 뒤져보렴
-v 1- SNMP 버전 v1 을 사용한다.
-c public- 사용할 커뮤니티 이름은
public를 사용한다. 192.168.xxx.yyy- 타겟 에이전트의 IP 주소는 192.168.xxx.yyy 이다.
에이전트 시스템의 설정이 정상으로 이루어졌고 방화벽등의 통신에 문제가 없다면, 타겟 에이전트에서 제공 가능한 OID 목록과 데이터들이 표시된다. (본 예에서는 SNMP v1을 사용했다. 실제 운영버전은 v2 이상을 사용할 것을 권장한다.)
cfgmaker를 이용한 mrtg.cfg 생성
mrtg.cfg 파일은 MRTG의 설정 파일이다. 처음 MRTG를 설치하고 나면 기본 설정파일이 생성되지 않는다. 때문에 처음부터 한줄 한줄 작성해 주어야 하는데, 그 작업을 대신 해 주는 프로그램이 있다.
MRTG 패키지를 설치할때 함께 딸려오는 cfgmaker라는 프로그램으로, 우리는 이 프로그램이 생성한 mrtg.cfg를 적당히 수정해 사용하면된다. 아래와 같이 입력해 주면 되며, 사용자 권한에 따라 실행할 때 약간의 차이가 있다.
cfgmaker public@192.168.xxx.yyy > /etc/mrtg.cfg // 루트 계정일 경우
sudo bash -c "cfgmaker public@192.168.xxx.yyy > /etc/mrtg.cfg" // 일반 사용자 계정일 경우
사용자 권한에 따른 bash 를 제외하고, 명령어와 각각의 옵션 파라미터들은 다음과 같은 의미를 가지고 있다.
cfgmaker- MRTG config 를 생성한다.
public@192.168.xxx.yyy- 타겟 IP는 192.168.xxx.yyy이고, 사용할 커뮤니티 이름은 public이다.
>- 출력 리디렉션 지시자
/etc/mrtg.cfg- 만든 파일을 /etc/mrtg.cfg 로 저장한다
mrtg.cfg 편집
cfgmaker을 이용해 작성된 mrtg.cfg는, 타겟 에이전트에서 사용 할 만한 것들을 전부 긁어온다. 때문에 필수적으로 필요한 것만 골라서 수정을 해 줘야 하는데, mrtg.cfg 파일의 구조와 타겟 장비의 OID를 알고 있어야 한다.
지금은 ‘설치’해 보는게 목적인 만큼, 생성된 파일을 그대로 사용하기로 한다.
indexmaker를 이용한 웹 페이지 생성
MRTG는 결과를 웹서버를 통해 볼 수 있도록 해 준다고 했다. 웹 페이지 역시 처음에는 생성이 되어 있지 않다. 앞의 cfgmaker를 통해 작성된 mrtg.cfg를 가지고 웹 페이지를 준비해 줘야 하는데, 이때 사용되는 프로그램이 indexmaker라는 놈이다.
cfgmaker를 실행하기 전, sudo mkdir /var/www/html/mrtg 명령을 통해 웹 페이지가 생성될 디렉토리를 생성해 주고 indexmaker를 실행시켜 준다.
indexmaker /etc/mrtg.cfg > /var/www/html/mrtg/index.html // 루트 계정일 경우
sudo bash -c "indexmaker /etc/mrtg.cfg > /var/www/html/mrtg/index.html" // 일반 사용자 계정일 경우
사용자 권한에 따른 bash 를 제외하고, 명령어와 각각의 옵션 파라미터들은 다음과 같은 의미를 가지고 있다.
indexmaker- MRTG HTML 인덱스 페이지를 만든다
/etc/mrtg.cfg/etc/mrtg.cfg파일을 참고해서 만든다>- 출력 리디렉션 지시자
/var/www/html/index.html/var/www/html/index.html파일로 저장해라.
별 다른 에러메시지가 나타나지 않고 프롬프트가 떨어지면, 인덱스메이커가 정상적으로 작동했다는 뜻이다. 웹 브라우저로 MRTG 루트를 열어보면 생성된 인덱스 페이지가 보일 것이다.

아직은 아무런 데이터도 수집하지 않았고, 그래프도 그려둔 것이 없다. 아무 그림이 표시되지 않는 것이 정상이다. 만약, 읽을 수 없다면, 인덱스메이커의 출력 경로가 잘못된 것이다.
MRTG 실행
이제, 실행을 위한 준비가 다 끝났다. 다음의 명령을 입력해 MRTG를 실행한다.
sudo env LANG=c /usr/bin/mrtg /etc/mrtg.cfg
newuser@debian:~$ sudo env LANG=c /usr/bin/mrtg /etc/mrtg.cfg
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "c"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.xxx.yyy_ethernet_32772
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.xxx.yyy_ethernet_32772 was invalid as well
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.xxx.yyy_ethernet_32772.log to 192.168.xxx.yyy_ethernet_32772.old updating log file
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.xxx.yyy_ethernet_2
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.xxx.yyy_ethernet_2 was invalid as well
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.xxx.yyy_ethernet_2.log to 192.168.xxx.yyy_ethernet_2.old updating log file
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.xxx.yyy_ethernet_3
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.xxx.yyy_ethernet_3 was invalid as well
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.xxx.yyy_ethernet_3.log to 192.168.xxx.yyy_ethernet_3.old updating log file
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.xxx.yyy_ethernet_4
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.xxx.yyy_ethernet_4 was invalid as well
2024-11-21 13:19:26, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.xxx.yyy_ethernet_4.log to 192.168.xxx.yyy_ethernet_4.old updating log file
newuser@debian:~$
기대를 가지고 엔터를 쳤지만 Rateup WARNING이라는 경고가 잔뜩 올라온다. 이는 최초에 MRTG가 실행하면서 기존 데이터를 읽어오는 과정에서 파일이 없기때문에 발생하는 에러 메시지이다. 마음 편하게 다시 한 번 같은 명령을 실행해 보면, 그 많았던 경고가 사라진 것을 볼 수 있다.
newuser@debian:~$ sudo env LANG=c /usr/bin/mrtg /etc/mrtg.cfg
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "c"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
newuser@debian:~$
참고로, 끝까지 살아남아 있는 저 경고 메시지들은 다국어 설정과 관련된 경고이다. 한글을 사용하지 않는다면 문제 될 일은 없으니 무시해도 상관 없다. 그리고 다시 웹 브라우저를 통해 접근해 보면

드디어 뭔가 그럴듯 해 보이는 창이 나타났다! 예제의 그림에서는 필자가 시험용으로 사용하고 있는 WINDOWS PC의 랜카드들이 보이고 있다. (실제로는 cfgmaker가 에이전트의 OID를 제대로 구분하지 못한 관계로 4개 모두 같은 그래프가 표시되고 있다.)
Cron 등록
MRTG는 약 5분에 한번씩 에이전트의 데이터들을 수집해 그래프를 그린다. 이를 위해 Cron에 MRTG가 동작하도록 등록해 주어야 한다. 크론에 MRTG 를 추가하기 위해 cron 설정을 편집해 준다.
아래의 내용을 복사해 넣어준 뒤 저장해 준다.
*/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ] && [ -d "$(grep '^[[:space:]]*[^#]*[[:space:]]*WorkDir' /etc/mrtg.cfg | awk '{ print $NF }')" ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; ficron을 통해 매일 5분 간격으로 MRTG가 실행된다. MRTG는 실행될 때 마다 SNMP 에이전트의 OID를 조회하고, 값을 읽어온 다음 마지막으로 읽어온 값과의 차이를 계산해 그래프를 업데이트 한다.
확인
약 10분정도 시간이 흐른 뒤, 웹 페이지를 다시 한번 갱신해 본다. 그래프에 변화가 생겼을 것이다.

그래프의 구석에 조그마한 색깔이 보이면 MRTG가 정상적으로 동작하며 그림을 그리고 있는 것이다. 축하한다! 데비안 리눅스에 MRTG를 성공적으로 설치 했다!
데비안 리눅스 MRTG 설치 방법 요약
- Apache2 웹 서버와 SNMP·SNMPD 패키지를 설치하고 서비스를 활성화한다.
- 웹 브라우저로 서버 IP에 접속하여 Apache2 기본 페이지가 정상 출력되는지 확인한다.
- APT 패키지 관리자로 MRTG를 설치하고 /var/www/html/mrtg 디렉터리 생성 여부를 확인한다.
- /etc/snmp/snmpd.conf 파일에서 rocommunity 및 rouser 항목을 비활성화하여 데비안 서버가 SNMP Agent로 응답하지 않도록 설정한다.
- snmpwalk 명령으로 모니터링 대상 장비(Agent)의 SNMP 응답 여부를 확인한다.
- cfgmaker community@IP 명령을 실행해 mrtg.cfg 설정 파일을 자동 생성한다.
- indexmaker 명령을 실행하여 MRTG 웹 인덱스 페이지(index.html)를 생성한다.
- mrtg 명령을 수동으로 실행해 그래프 이미지 및 HTML 조각이 정상 생성되는지 확인한다.
- 약 10분 후 웹 페이지를 갱신하여 초기 트래픽 그래프가 표시되는지 확인한다.
- /etc/cron.d/mrtg 파일을 수정해 MRTG가 5분 간격으로 자동 실행되도록 Cron을 등록한다.
이어서 읽어볼 것
이 글은 데비안 리눅스 시스템에 MRTG를 설치하는 방법에 대해서만 설명 하고 있다. MRTG를 제대로 사용하기 위해서는 아래의 추가적인 사항들에 대한 공부가 필요하다.
mrtg.cfg: MRTG의 가장 핵심적인 파일이다. 이 파일을 가지고 MRTG를 마음대로 주무를 수 있게된다.OID: SNMP를 통해 가지고 올 값들의 ID로, MRTG에 띄울 값을 찾는 방법을 알아야 한다.index.html: 인덱스메이커를 통해 생성된 인덱스 페이지로, 예쁜(?) MRTG페이지를 만드려면 이걸 건드려야 한다.
하지만 뭐 어떻겠는가? 일단 우리는 MRTG를 돌리는데 성공했다. 나머지 것들은 필요할 때마다 조금씩 알아가면 되는 거다!