데비안 리눅스에 MRTG와 Apache2 웹 서버를 설치해 그래프를 생성하는 절차를 안내한다. SNMP 에이전트와의 통신을 확인하고, cfgmaker로 mrtg.cfg를 생성한 뒤, indexmaker로 웹 페이지를 만든 다음, MRTG를 수동으로 시험하고 cron에 등록하여 5분마다 데이터를 수집하고 그래프를 갱신하는 과정까지 알아본다.
MRTG란 무엇인가?
MRTG는 본래 네트워크 라우터의 트래픽을 그래프 형태로 표현해 주기 위해 만들어진 도구이다. 하지만 숫자로 이루어진 데이터를 시각화한다는 특징으로 인해 그 사용 방법이 무궁무진하게 확장되었다.

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

MRTG 패키지 설치
아래의 명령어를 입력해 MRTG 패키지를 설치한다.
sudo apt-get install mrtg -y여느 APT 패키지와 마찬가지로 설치가 진행되다가 뭔가를 물어보는 창이 나타난다. MRTG가 그래프와 웹 페이지를 저장할 기본 작업 디렉토리인 /var/www/html/mrtg가 존재하지 않으니 새로 만들겠느냐고 물어보는 창이다. 그냥 디렉토리 생성에 동의해 주면 되겠다.

선택을 완료하면 창에서 빠져나와 남은 패키지를 다운로드받고 설치를 계속하게 된다.
SNMP 에이전트 통신 확인
SNMP에서는 데이터를 제공하는, 즉 모니터의 대상이 되는 놈을 에이전트(Agent), 반대로 데이터를 수집하는, 즉 MRTG와 같은 모니터 시스템을 매니저(Manager)라고 부른다. 지금 MRTG를 설치하고 있는 데비안 리눅스 시스템은 매니저이고, 값을 가지고 올 타겟 시스템은 에이전트이다.
SNMP 명령줄 도구의 설치가 끝났으니 타겟과의 통신을 확인해 볼 차례이다. SNMP 타겟 장비의 OID 목록을 가지고 올 수 있는 snmpwalk 명령을 이용해 타겟이 되는 에이전트에 접근해 보자.
snmpwalk- SNMP를 이용해 가지고 올 수 있는 OID가 뭐뭐 있는지 한 번 뒤져보렴
-v 1- SNMPv1을 사용한다.
-c public- 사용할 커뮤니티 이름으로
public을 사용한다. 192.168.xxx.yyy- 타겟 에이전트의 IP 주소를 지정한다.
에이전트 시스템의 설정이 정상적으로 이루어졌고 방화벽 등의 통신에 문제가 없다면 타겟 에이전트에서 제공하는 OID 목록과 데이터가 표시된다. 본 예에서는 SNMPv1과 public 커뮤니티를 사용했지만, 실제 운영 환경에서는 적어도 SNMPv2c를 사용하고 인증과 암호화가 필요하다면 SNMPv3를 사용하는 것을 권장한다.
snmpwalk에 대한 자세한 설명은 SNMP OID의 의미와 SNMPWALK 사용 방법을 참고하기 바란다.
cfgmaker를 이용한 mrtg.cfg 생성
mrtg.cfg는 MRTG의 설정 파일이다. 현재 데비안 13(Trixie)의 MRTG 패키지는 기본 설정 파일인 /etc/mrtg/mrtg.cfg를 함께 설치하지만, 이 파일에는 우리가 모니터할 타겟 장비의 설정이 들어 있지 않다. 또한 구 버전의 데비안은 기본 설정 파일이 없다.
따라서 설정을 처음부터 한 줄 한 줄 작성하거나 수정해야 하는데, 그 작업을 대신해 주는 프로그램이 cfgmaker이다. 우리는 이 프로그램이 타겟 장비에서 수집한 인터페이스를 바탕으로 생성한 mrtg.cfg를 적당히 수정해 사용하면 된다. 기존 설정 파일이 존재한다면 cfgmaker를 실행하기 전에 별도로 백업해 두는 것이 좋다.
한 가지 기억해야 하는 것은 데비안의 버전과 MRTG 패키지 구성에 따라 mrtg.cfg의 경로가 다를 수 있다는 것이다. 현재 데비안 패키지는 /etc/mrtg/mrtg.cfg를 사용하고 구 버전의 데비안 패키지는 /etc/mrtg.cfg를 사용한다. 본 글에서는 구 버전을 기준으로 설명한다.
다음과 같이 cfgmaker를 실행한다. 사용자 권한에 따라 명령 실행 방법에 약간의 차이가 있다.
cfgmaker public@192.168.xxx.yyy > /etc/mrtg.cfg // 루트 계정일 경우
sudo bash -c "cfgmaker public@192.168.xxx.yyy > /etc/mrtg.cfg" // 일반 사용자 계정일 경우
사용자 권한에 따른 bash 사용 여부를 제외하면 명령어와 각각의 파라미터는 다음과 같은 의미를 가지고 있다.
cfgmaker- MRTG 설정 파일을 생성한다.
public@192.168.xxx.yyy- 타겟의 IP 주소는
192.168.xxx.yyy이고, 커뮤니티 이름은public이다. >- 명령의 출력 결과를 화면에 표시하지 않고 지정한 파일에 저장하는 출력 리디렉션 연산자이다.
/etc/mrtg.cfg- 생성된 설정을 저장할 파일의 경로이다.
mrtg.cfg 편집
cfgmaker는 타겟 에이전트에서 사용할 만한 OID 목록을 전부 긁어온다. 때문에 필요한 항목만 골라 설정을 수정해 주어야 한다. 이를 위해서는 mrtg.cfg 파일의 작성 방법과 타겟 장비의 OID를 알고 있어야 한다.
지금은 설치해 보는 게 목적인 만큼, 생성된 파일을 그대로 사용하기로 한다.
indexmaker를 이용한 웹 페이지 생성
MRTG는 결과를 웹 서버를 통해 볼 수 있도록 해 준다고 했다. MRTG가 생성한 각각의 그래프 페이지를 한 곳에서 확인하려면 그래프 목록을 모아 놓은 인덱스 페이지를 만들어 주어야 한다. 앞에서 cfgmaker를 통해 작성한 mrtg.cfg를 바탕으로 이 인덱스 페이지를 생성하는 프로그램이 indexmaker라는 놈이다.
indexmaker를 실행하기 전에 /var/www/html/mrtg 디렉토리가 생성되어 있는지 다시 한 번 확인한 다음, 아래의 명령을 실행해 준다.
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- 인덱스 페이지를 생성할 때 참고할 MRTG 설정 파일이다.
>- 명령의 출력 결과를 지정한 파일에 저장하는 출력 리디렉션 연산자이다.
/var/www/html/mrtg/index.html- 출력할 인덱스 페이지 파일의 경로와 이름
별다른 오류 메시지가 나타나지 않고 프롬프트가 떨어지면 인덱스메이커가 정상적으로 작동했다는 뜻이다. 웹 브라우저로 MRTG 루트를 열어 보면 생성된 인덱스 페이지가 보일 것이다.

아직 아무런 데이터도 수집하지 않았고 그래프도 그려 둔 것이 없으므로, 인터페이스 항목만 표시되고 그래프 이미지가 나타나지 않는 것이 정상이다. 인덱스 페이지 자체가 열리지 않는다면 indexmaker의 출력 경로를 확인해야 한다.
MRTG 실행
이제 실행을 위한 준비가 다 끝났다. 다음 명령을 입력해 MRTG를 실행한다.
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
아래는 본 필자가 시험 당시 LANG=C를 소문자 LANG=c로 잘못 입력해 실행했던 실제 기록이다. 이 때문에 MRTG의 초기 로그 파일 경고와 함께 Perl의 로케일 경고도 표시되었다.
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
newuser@debian:~$ sudo env LANG=c /usr/bin/mrtg /etc/mrtg.cfg 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_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 newuser@debian:~$
이제 다시 웹 브라우저를 통해 MRTG 페이지에 접근해 보면 다음과 같은 그래프가 나타난다.

드디어 뭔가 그럴듯해 보이는 창이 나타났다! 예제의 그림에는 본 필자가 시험용으로 사용하고 있는 Windows PC의 랜카드들이 보이고 있다. 본 필자의 시험 환경에서는 cfgmaker가 에이전트의 인터페이스를 제대로 구분하지 못한 관계로 네 개 모두 같은 그래프가 표시되고 있다.
cron 등록
MRTG는 한 번 실행되고 끝나는 프로그램이므로, 에이전트의 데이터를 계속 수집하려면 일정한 간격으로 반복해서 실행해 주어야 한다. 일반적으로 사용하는 수집 간격은 5분이다. 자동 실행을 등록하는 여러 방법이 있으나, 본 예에서는 cron을 사용하도록 하겠다.
만약 mrtg.service를 사용하고 있거나 mrtg.cfg에 RunAsDaemon: Yes가 설정되어 있다면 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 ; fi이제 cron을 통해 MRTG가 5분마다 실행된다. MRTG는 실행될 때마다 SNMP 에이전트의 OID를 조회하고 값을 읽어온다. 네트워크 트래픽과 같은 카운터 유형의 데이터는 이전에 읽은 값과 현재 값의 차이를 이용해 전송률을 계산한 다음 그래프를 업데이트한다.
MRTG 동작 확인
약 10분 정도가 흐른 뒤 웹 페이지를 다시 한 번 갱신해 본다. 5분 간격으로 실행되는 MRTG가 값을 두 차례 이상 수집했고 그동안 네트워크 트래픽이 발생했다면 그래프에 변화가 생겼을 것이다.

그래프의 왼쪽 구석에 조그마한 녹색이나 파란색 영역이 보이면 MRTG가 정상적으로 데이터를 수집하며 그래프를 그리고 있는 것이다. 네트워크 트래픽이 발생하지 않았다면 그래프가 계속 0으로 표시될 수 있으므로, 이 경우에는 타겟 장비에서 실제로 통신을 발생시킨 다음 다시 확인해 본다. 축하한다! 데비안 리눅스에 MRTG를 성공적으로 설치했다!
이어서 알아볼 것
이 글은 데비안 리눅스 시스템에 MRTG를 설치하는 방법까지만 설명했다. MRTG를 제대로 활용하려면 mrtg.cfg의 구성과 키워드를 이해하고, OID를 찾아 원하는 데이터를 수집하는 방법도 알아야 한다. 필요하다면 index.html을 수정해 MRTG 페이지의 모습도 직접 꾸밀 수 있다.
하지만 뭐 어떻겠는가? 일단 우리는 MRTG를 돌리는 데 성공했다. 나머지 것들은 필요할 때마다 조금씩 알아가면 되는 거다!
FAQ
- 무료 오픈 소스 NMS 프로그램에는 어떤 것이 있는가?
- MRTG 외에도 LibreNMS, Zabbix, Nagios Core, Icinga와 같은 프로그램이 있다. MRTG는 설정이 단순하고 가벼운 그래프 생성 도구에 가깝고, LibreNMS나 Zabbix는 장비 검색, 대시보드, 장애 알림과 사용자 관리 등을 포함하는 종합 모니터링 시스템에 가깝다. 관리할 장비의 수와 필요한 기능에 따라 적절한 도구를 선택하면 된다.
- MRTG를 이용해 네트워크 트래픽 이외의 것도 모니터할 수 있는가?
- 가능하다. MRTG는 본래 네트워크 트래픽을 표시하기 위해 만들어졌지만, 숫자로 읽어올 수 있는 값이라면 메모리 사용량, 디스크 여유 공간, CPU 부하, 온도와 습도 등도 그래프로 만들 수 있다. SNMP OID나 외부 스크립트를 이용해 두 개의 수치를 MRTG에 전달하면 된다.
- PRTG와 MRTG의 차이는 무엇인가?
- MRTG는 무료 오픈 소스 프로그램으로, 설정 파일을 직접 작성하여 수집할 값과 그래프를 구성하는 가벼운 도구이다. 반면 PRTG는 Paessler가 제공하는 상용 모니터링 프로그램으로, 웹 기반 설정 화면과 자동 검색, 알림, 보고서 및 다양한 센서를 제공한다. 이름은 비슷하지만 서로 다른 프로그램이며 PRTG가 MRTG의 신버전인 것은 아니다.
- SNMP 에이전트와 매니저의 차이는 무엇인가?
- SNMP 에이전트는 장비의 상태와 데이터를 제공하는 쪽이고, SNMP 매니저는 에이전트에 값을 요청해 수집하는 쪽이다. 이 글의 구성에서는 모니터링 대상인 라우터나 PC가 에이전트이고, MRTG가 설치된 데비안 리눅스 서버가 매니저가 된다.
- MRTG 서버에도 SNMP 데몬을 설치해야 하는가?
- 다른 장비의 정보만 수집한다면 MRTG 서버에
snmpd를 설치할 필요는 없다. 조회 시험에 사용하는snmpwalk등의 명령줄 도구만 있으면 된다. MRTG 서버 자체도 다른 매니저의 모니터링 대상이 되어야 한다면 그때snmpd를 설치하고 에이전트로 구성하면 된다. - 웹 페이지는 표시되는데 MRTG 그래프가 나타나지 않는 이유는 무엇인가?
indexmaker는 그래프 목록을 보여 줄 인덱스 페이지를 만들 뿐, 수집 데이터와 그래프 이미지까지 생성하지는 않는다. 먼저mrtg명령을 실행해야 하며, 설정 파일의WorkDir, 웹 서버의 문서 경로, 파일 권한 및 SNMP 통신 상태도 함께 확인해야 한다.- MRTG를 처음 실행할 때 Rateup WARNING이 나타나는 것은 오류인가?
- 최초 실행에서는 비교할 이전 로그 파일이 존재하지 않기 때문에 Rateup WARNING이 나타날 수 있다. 같은 설정으로 MRTG를 다시 실행했을 때 경고가 사라지고 로그와 그래프 파일이 생성된다면 정상적인 초기 동작이다. 반복 실행 후에도 같은 경고가 계속되면 작업 디렉토리와 파일 권한을 확인해야 한다.
- MRTG 그래프에 데이터가 바로 표시되지 않는 이유는 무엇인가?
- MRTG는 일정한 간격으로 값을 반복해서 수집하여 이전 값과 비교한다. 처음 실행했을 때는 비교할 데이터가 부족하므로 그래프가 비어 있거나 아주 작은 선만 표시될 수 있다. 5분 간격으로 실행하도록 설정했다면 적어도 두세 번 수집한 뒤 웹 페이지를 다시 확인하는 것이 좋다.
cfgmaker와indexmaker는 어떤 차이가 있는가?cfgmaker는 SNMP 장비의 인터페이스 정보를 읽어 MRTG 설정 파일을 만드는 프로그램이고,indexmaker는 완성된 설정 파일을 읽어 여러 타겟의 그래프를 모아 보여 줄 HTML 인덱스 페이지를 만드는 프로그램이다. 두 프로그램은 서로 다른 파일을 생성한다.- MRTG의 데이터 수집 간격을 5분보다 짧게 줄일 수 있는가?
- 기본 로그 형식을 사용하는 MRTG의 최소 수집 간격은 5분이다. 5분보다 짧게 수집하려면 RRDtool을 데이터 저장 방식으로 사용하고
mrtg.cfg의Interval을MM:SS형식으로 설정해야 한다. 예를 들어Interval: 1:00은 1분 간격을 의미한다. 이때 실제 MRTG 실행 주기도 동일하게 설정해야 하며, 1분 미만의 실행은 일반적인 cron 대신 MRTG 데몬 모드나 systemd 타이머 등을 사용하는 것이 적합하다. 기존 RRD 데이터베이스는 생성 당시의 해상도를 유지하므로 수집 간격을 변경하려면 데이터베이스를 새로 생성해야 할 수 있다.
갱신 내역
- — 최초 게시
- — 수정 및 주소 이전 (https://www.DectENG.com/)
- — 수정 및 주소 이전 (https://www.EQMaker.kr/)