데비안 리눅스 시스템 MRTG 설치 방법

MRTG란 무엇인가?

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를 입력해 본다. 아파치 웹 서버가 정상적으로 동작하고 있고 방화벽 설정에 문제가 없다면, 아래와 같은 기본 화면이 나타날 것이다.

데비안의 Apache2 기본 웹 서버 페이지

MRTG 패키지 설치

아래의 명령어를 입력해 MRTG 패키지를 설치한다.

sudo apt-get install mrtg -y

여느 APT 패키지와 마찬가지로 설치가 진행되다가, 뭔가를 물어보는 창이 나타난다. MRTG가 사용할 웹서버 경로가 존재하지 않으니 새로 만들겠는가 물어보는 창이다. 그냥 YES를 선택해 주면 되겠다.

MRTG 설치 중 /var/www/html/mrtg 디렉터리 생성 여부를 묻는 설정 화면

창에서 빠져 나와 남은 패키지들을 다운로드 받고 설치를 계속 하게된다.

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 페이지

아직은 아무런 데이터도 수집하지 않았고, 그래프도 그려둔 것이 없다. 아무 그림이 표시되지 않는 것이 정상이다. 만약, 읽을 수 없다면, 인덱스메이커의 출력 경로가 잘못된 것이다.

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:~$

참고로, 끝까지 살아남아 있는 저 경고 메시지들은 다국어 설정과 관련된 경고이다. 한글을 사용하지 않는다면 문제 될 일은 없으니 무시해도 상관 없다. 그리고 다시 웹 브라우저를 통해 접근해 보면

MRTG 인덱스 페이지에 네트워크 트래픽 그래프 틀이 생성된 모습

드디어 뭔가 그럴듯 해 보이는 창이 나타났다! 예제의 그림에서는 필자가 시험용으로 사용하고 있는 WINDOWS PC의 랜카드들이 보이고 있다. (실제로는 cfgmaker가 에이전트의 OID를 제대로 구분하지 못한 관계로 4개 모두 같은 그래프가 표시되고 있다.)

Cron 등록

MRTG는 약 5분에 한번씩 에이전트의 데이터들을 수집해 그래프를 그린다. 이를 위해 Cron에 MRTG가 동작하도록 등록해 주어야 한다. 크론에 MRTG 를 추가하기 위해 cron 설정을 편집해 준다.

sudo nano /etc/cron.d/mrtg

아래의 내용을 복사해 넣어준 뒤 저장해 준다.

*/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을 통해 매일 5분 간격으로 MRTG가 실행된다. MRTG는 실행될 때 마다 SNMP 에이전트의 OID를 조회하고, 값을 읽어온 다음 마지막으로 읽어온 값과의 차이를 계산해 그래프를 업데이트 한다.

확인

약 10분정도 시간이 흐른 뒤, 웹 페이지를 다시 한번 갱신해 본다. 그래프에 변화가 생겼을 것이다.

데이터 수집 후 색상 변화가 보이는 MRTG 네트워크 트래픽 그래프 화면
그래프 좌측에 녹색 그래프가 보인다.

그래프의 구석에 조그마한 색깔이 보이면 MRTG가 정상적으로 동작하며 그림을 그리고 있는 것이다. 축하한다! 데비안 리눅스에 MRTG를 성공적으로 설치 했다!

데비안 리눅스 MRTG 설치 방법 요약

  1. Apache2 웹 서버와 SNMP·SNMPD 패키지를 설치하고 서비스를 활성화한다.
  2. 웹 브라우저로 서버 IP에 접속하여 Apache2 기본 페이지가 정상 출력되는지 확인한다.
  3. APT 패키지 관리자로 MRTG를 설치하고 /var/www/html/mrtg 디렉터리 생성 여부를 확인한다.
  4. /etc/snmp/snmpd.conf 파일에서 rocommunity 및 rouser 항목을 비활성화하여 데비안 서버가 SNMP Agent로 응답하지 않도록 설정한다.
  5. snmpwalk 명령으로 모니터링 대상 장비(Agent)의 SNMP 응답 여부를 확인한다.
  6. cfgmaker community@IP 명령을 실행해 mrtg.cfg 설정 파일을 자동 생성한다.
  7. indexmaker 명령을 실행하여 MRTG 웹 인덱스 페이지(index.html)를 생성한다.
  8. mrtg 명령을 수동으로 실행해 그래프 이미지 및 HTML 조각이 정상 생성되는지 확인한다.
  9. 약 10분 후 웹 페이지를 갱신하여 초기 트래픽 그래프가 표시되는지 확인한다.
  10. /etc/cron.d/mrtg 파일을 수정해 MRTG가 5분 간격으로 자동 실행되도록 Cron을 등록한다.

이어서 읽어볼 것

이 글은 데비안 리눅스 시스템에 MRTG를 설치하는 방법에 대해서만 설명 하고 있다. MRTG를 제대로 사용하기 위해서는 아래의 추가적인 사항들에 대한 공부가 필요하다.

하지만 뭐 어떻겠는가? 일단 우리는 MRTG를 돌리는데 성공했다. 나머지 것들은 필요할 때마다 조금씩 알아가면 되는 거다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다