MRTG 설정 파일 mrtg.cfg 작성 가이드

mrtg.cfg는 MRTG가 수집할 장비와 OID, 데이터 처리 방식 및 그래프 출력 형태를 정의하는 핵심 설정 파일이다. 이 글에서는 WorkDir와 Options, SNMP Target과 Per Target 설정의 의미를 살펴보고, SNMPv1·v2의 차이와 OID 사칙연산 방법을 설명한다. 또한 Windows의 가상 메모리와 물리 메모리 사용률을 계산해 일간·주간·월간·연간 그래프로 표시하는 실제 설정 사례를 소개한다.

mrtg.cfg 파일의 구성과 역할

mrtg.cfg는 MRTG가 동작하는 데 필요한 설정을 담고 있는 파일이다. 기본 작업 디렉토리, 그래프 표현 방식, 데이터를 읽어 오는 방법 등이 모두 이 파일에 정의되어 있다. mrtg.cfg는 다음의 규칙에 따라 작성되어야 한다.

  • 빈 줄은 무시하며, #으로 시작하는 줄은 주석으로 처리한다.
  • 모든 키워드는 줄의 맨 앞에서 시작해야 한다.
  • 키워드로 시작한 줄 다음에 공백으로 시작하는 줄이 이어지면, 앞줄의 내용이 계속되는 것으로 처리한다.

mrtg.cfg의 설정 내용은 다음 세 부분으로 나눌 수 있다.

  • Global Config Options : MRTG 전체의 동작을 정의하는 부분
  • Target : 값을 읽어 올 장비와 읽어 올 값을 정의하는 부분
  • Per Target Options : Target에서 읽어 온 값을 해석하는 방법과 그래프를 그리는 방식을 정의하는 부분

mrtg.cfg의 설정 방법

cfgmaker를 통해 생성된 mrtg.cfg 파일을 열어 보면 많은 설정 항목이 존재한다. 각각 어떤 의미가 있으며 어느 용도로 사용되는지 정리해 본다.

Global Config Options

mrtg.cfg 파일에서 가장 먼저 등장하는 부분으로, MRTG의 출력 경로와 작업 디렉토리, 전체 동작에 적용되는 옵션 등을 정의한다.

WorkDir

mrtg.cfg 파일에서 가장 먼저 등장하는 것은 WorkDir 항목이다. MRTG가 HTML 파일과 그래프 이미지를 생성하고 수집한 데이터를 저장할 경로를 지정한다. 생성된 기본 설정 파일에는 운영체제별 설정 예시가 #으로 주석 처리되어 있다. 이 중 웹 서버를 통해 접근할 수 있는 경로를 지정해 주면 된다. 아래는 데비안 리눅스 환경에서 사용하는 예로, for Debian 아래 줄의 WorkDir 앞에 있던 주석을 삭제한 모습이다.

# Created by 
# /usr/bin/cfgmaker Decteng@192.168.123.123

### Global Config Options

#  for UNIX
# WorkDir: /home/http/mrtg

#  for Debian
WorkDir: /var/www/html/MRTG

#  or for NT
# WorkDir: c:\mrtgdata
(이하 생략)

HTML과 그래프 이미지, 로그 데이터를 각각 다른 디렉토리에 저장하고 싶다면 WorkDir를 주석 처리하고 다음과 같이 개별 경로를 지정할 수 있다.

# WorkDir: /var/www/html/mrtg
		
# HTML이 저장될 경로
HtmlDir: /www/mrtg/

# 그래프 이미지가 저장될 경로
ImageDir: /www/mrtg/images/

# 로그 데이터가 저장될 경로
LogDir: /www/mrtg/logs/

WorkDir가 활성화되어 있으면 해당 설정이 HtmlDir, ImageDir, LogDir보다 우선한다. 따라서 저장 경로를 각각 분리하려면 WorkDir를 주석 처리하거나 삭제해야 한다.

Options[_]

이어서 ### Global Defaults 행 아래로 MRTG가 수집한 값을 해석하고 그래프로 표현하는 방식을 설정하는 옵션 항목이 나온다. 다음은 본 필자가 운영 중인 MRTG의 옵션 부분이다.

...(전략)...
### Global Defaults

		#  to get bits instead of bytes and graphs growing to the right
		Options[_]: growright, bits

		EnableIPv6: no
...(생략)...

Options 뒤에 붙은 대괄호 안의 _는 아래에서 정의할 Target에 적용할 기본값을 의미한다. 특정 Target에 별도의 Options[이름]을 지정하지 않으면 Options[_]의 설정이 기본으로 적용된다.

생성된 설정에서 해당 줄이 주석 처리되어 있다면 #을 지워 활성화하고, 사용할 옵션을 쉼표(,)로 구분해 입력한다. 예를 들면 다음과 같다.

Options[_]: growright, bits

이 경우 이후에 정의되는 Target에 growright와 bits를 기본으로 적용한다. MRTG 공식 문서에는 26개의 Options 항목이 정의되어 있으며, 그중 자주 사용되는 옵션은 다음과 같다.

growright
그래프의 과거 값을 왼쪽에, 현재 값을 오른쪽에 표시한다.
bits
수집한 값을 8배 하여 바이트 단위 대신 비트 단위로 표시한다.
noinfo
생성된 웹페이지에 Target 장비의 가동 시간과 장비 이름을 표시하지 않는다.
nopercent
허용 최댓값 대비 현재 값의 사용률을 표시하지 않는다.
transparent
생성되는 그래프 이미지의 배경을 투명하게 만든다.
integer
그래프 아래의 요약값을 쉼표와 소수점이 없는 정수로 표시한다.
dorelpercent
첫 번째 변수의 값을 두 번째 변수에 대한 상대 백분율로 계산해 그래프에 추가한다. 표시 범위는 0~100%이며 첫 번째 값이 두 번째 값보다 크면 100%로 표시된다.
gauge
수집한 값을 누적 카운터가 아닌 현재 상태의 측정값으로 취급한다. 디스크 사용량, 프로세서 사용률, 온도와 같은 값을 표시할 때 사용한다.
absolute
값을 읽은 다음 초기화되는 카운터형 데이터에 사용한다. 이전 값과 현재 값의 차이는 계산하지 않지만, 수집한 값을 두 측정 사이의 경과 시간으로 나누므로 gauge와는 동작이 다르다.
unknaszero
알 수 없는 데이터를 이전 값으로 반복해 기록하는 대신 0으로 기록한다.
withzeroes
평균 전송 속도를 계산할 때 0인 값도 포함한다.
noi
첫 번째 변수인 I의 그래프를 그리지 않고, 생성되는 HTML 페이지에서도 해당 변수를 숨긴다. 수집한 데이터 자체는 계속 기록한다.
noo
두 번째 변수인 O의 그래프를 그리지 않고, 생성되는 HTML 페이지에서도 해당 변수를 숨긴다. 수집한 데이터 자체는 계속 기록한다.

일반적인 활용 환경에서는 growright와 gauge의 조합이 자주 사용된다. 이 밖에도 Options와는 별도의 설정 지시어를 이용해 SNMPv3, IPv6 사용, MIB 파일의 OID 이름 읽기, 수집 주기, 다국어 출력, 외부 로깅 서버로의 데이터 전송 등을 설정할 수 있다. 자세한 내용은 MRTG 공식 문서를 참고하기 바란다.

SNMP Target 설정

mrtg.cfg에서 가장 중요한 부분이 바로 여기다. 데이터를 읽어 올 대상과 방법을 지정해 준다. Target 설정을 건드리기 전에 다음 두 가지를 반드시 기억해야 한다.

  • 하나의 타겟은 무조건 두 개의 변수 값을 읽어 와야 한다.

    도대체 왜? 라고 묻는다면 본 필자도 할 말이 없는 게, MRTG의 매뉴얼에 이렇게 사용하고 적혀 있다. 만든 이가 이렇게 만들었다. 만약 CPU 온도처럼 하나의 값만 읽어 오고 싶다면 변수 두 개에 CPU 온도 OID를 동일하게 넣어 주어야 한다는 소리다.

  • Target의 첫 번째 변수는 입력(In), 두 번째 변수는 출력(Out)으로 처리된다.

    이는 MRTG가 네트워크 트래픽 감시를 목적으로 만들어지면서 정해진 기본 구조다. CPU 온도나 메모리 사용량처럼 네트워크 트래픽이 아닌 데이터를 수집하더라도 첫 번째 값과 두 번째 값은 각각 In과 Out의 위치에 대응한다.

SNMPv1 Target

가장 기본적인 Target은 다음과 같은 형식으로 표현할 수 있다. SNMPv1을 이용해 192.168.123.123 장비에서 두 개의 OID를 읽어 오도록 지정한 예다.

Target[SERVER1_MEM]: 1.1.1.1&2.2.2.2:eqblogdemo@192.168.123.123
Target[]
수집할 대상을 선언하는 키워드
SERVER1_MEM
Target의 이름이다. 사용자가 임의로 지정할 수 있으며, 동일한 설정 파일 안에서는 다른 Target과 구분되는 이름을 사용해야 한다.
1.1.1.1
첫 번째 변수로 읽어 올 OID다. MRTG에서는 입력(In) 데이터로 처리된다.
&
첫 번째 OID와 두 번째 OID를 구분한다.
2.2.2.2
두 번째 변수로 읽어 올 OID다. MRTG에서는 출력(Out) 데이터로 처리된다.
eqblogdemo
SNMP 에이전트에 접근할 때 사용하는 커뮤니티 문자열이다.
192.168.123.123
데이터를 읽어 올 Target 장비의 IP 주소 또는 호스트 이름이다.

SNMPv2 Target

SNMPv1에서 사용하는 일반적인 트래픽 카운터는 32비트 Counter32 형식이다. 기가비트급 네트워크 포트처럼 값이 빠르게 증가하는 환경에서는 다음 수집 주기가 되기 전에 카운터가 최댓값을 넘어 다시 0부터 시작하는 카운터 래핑이 발생할 수 있다.

이런 경우에는 64비트 Counter64를 지원하는 SNMPv2와 ifHCInOctets·ifHCOutOctets 같은 고용량 카운터를 사용하는 것이 좋다. SNMPv2를 사용하려면 다음과 같이 Target 주소 뒤에 :::::2를 추가한다.

Target[SERVER1_MEM]: 1.1.1.1&2.2.2.2:eqblogdemo@192.168.123.123:::::2

다만 :::::2를 추가한다고 모든 OID의 값이 자동으로 64비트로 바뀌는 것은 아니다. 해당 장비와 OID가 Counter64를 지원해야 하며, 지원하지 않는 장비에서는 기존 32비트 카운터를 사용해야 한다.

OID의 사칙연산

MRTG는 여러 Target 정의와 상수를 조합한 사칙연산을 지원한다. 이를 이용하면 수집한 원본 값으로 사용률이나 합계와 같은 새로운 값을 계산할 수 있다.

Target[SERVER1_USAGE]: AAA&BBB:eqblogdemo@192.168.123.123:::::2 / CCC&DDD:eqblogdemo@192.168.123.123:::::2 * 100

위와 같이 설정하면 첫 번째 변수는 AAA ÷ CCC × 100, 두 번째 변수는 BBB ÷ DDD × 100으로 계산된다. 결과적으로 두 데이터 계열의 사용률을 백분율 그래프로 표시할 수 있다.

이처럼 OID에서 읽어 온 값끼리 더하거나 빼고, 곱하거나 나눌 수 있으며 상수를 계산식에 포함하는 것도 가능하다. 디스크나 메모리의 사용량을 전체 용량으로 나누어 사용률을 구할 때 자주 활용되는 방식이다. 단, 나누는 값인 CCC 또는 DDD가 0이 되지 않는 OID를 사용해야 한다.

Per Target 설정

Per Target 설정은 Target에서 받아 온 수치를 어떻게 해석하고, 어떤 형태의 그래프로 표현할지 지정한다. 기본 형식은 다음과 같다. 아래는 SERVER1_MEM Target에서 생성하는 HTML 페이지의 제목을 설정한 예다.

Title[SERVER1_MEM]: Memory Usage - Server 1
Title
적용할 설정 키워드다.
SERVER1_MEM
Target 설정에서 선언한 Target의 이름이다.
Memory Usage - Server 1
해당 키워드에 할당할 설정값이다.

Per Target 설정에는 상당히 많은 키워드가 존재한다. 그중 자주 사용되는(이라고 쓰고, 본 필자가 사용해 본 것이라고 읽는다.) 키워드는 다음과 같다.

MaxBytes
두 Target 변수에 허용할 최댓값을 설정한다. 이 값을 초과하는 값은 무시한다. 자동 축척을 해제한 그래프에서는 Y축의 최댓값을 결정하는 기준으로도 사용된다.
두 변수의 최댓값이 서로 다르면 MaxBytes1과 MaxBytes2를 사용한다.
Title
생성될 그래프에 표시할 그래프 이름
Unscaled
그래프 자동 축척을 사용하지 않는다. d(ay), w(eek), m(onth), y(ear)의 인자를 사용하며 yd yw ym yy와 같이 그래프와 기간을 지정한다.
XSize
그래프 영역의 가로 픽셀 크기
YSize
그래프 영역의 세로 픽셀 크기
YLegend
그래프의 Y축에 표시할 라벨
LegendI
그래프에 표시할 첫 번째 변수(In)의 라벨
LegendO
그래프에 표시할 두 번째 변수(Out)의 라벨
Legend1
그래프 페이지 아래쪽 색상 범례에 표시할 첫 번째 변수의 라벨.
Legend2
그래프 페이지 아래쪽 색상 범례에 표시할 두 번째 변수의 라벨.
PageTop
생성되는 상세 페이지의 그래프 위쪽에 삽입할 내용을 설정한다. 일반 문자열뿐 아니라 제목과 설명을 구성하는 HTML 태그도 포함할 수 있다.

mrtg.cfg 설정 예시

마지막으로 본 필자가 직접 구축해 사용 중인 MRTG 모니터의 설정 파일과 이를 통해 생성된 페이지의 모습을 공개한다.

Windows PC에서 전체 가상 메모리와 사용 중인 가상 메모리, 전체 물리 메모리와 사용 중인 물리 메모리 값을 각각 가져온다. 이후 사용 중인 용량을 전체 용량으로 나누어 가상 메모리 사용률과 물리 메모리 사용률을 계산하고 백분율 그래프로 표시한다. MRTG와 mrtg.cfg의 동작을 이해하는 데 조금이나마 도움이 되길 바란다.

Windows 가상 메모리와 물리 메모리 사용률을 계산하도록 Target과 그래프 옵션을 작성한 mrtg.cfg 화면
Windows 메모리 사용률을 수집하는 mrtg.cfg 설정 예

이 설정을 실행하면 첫 번째 변수인 가상 메모리 사용률은 녹색으로, 두 번째 변수인 물리 메모리 사용률은 파란색으로 표시된다. MRTG는 수집한 데이터를 이용해 일간·주간·월간·연간 그래프와 각 기간의 최대·평균·현재 사용률을 자동으로 생성한다.

MRTG 서버 메모리 사용률 페이지에 가상 메모리와 물리 메모리의 일간·주간·월간·연간 그래프가 표시된 화면
서버 메모리 사용률 그래프

FAQ

MRTG에서 메모리나 디스크 사용률과 같은 비율을 표시할 수 있는가?
가능하다. 사용량 OID를 전체 용량 OID로 나눈 다음 100을 곱하면 백분율을 구할 수 있다. 첫 번째 변수와 두 번째 변수에는 각각 대응하는 사용량과 전체 용량 OID를 배치해야 한다. Target[usage]: USED1&USED2:community@host / TOTAL1&TOTAL2:community@host * 100 이렇게 계산한 Target에는 보통 gauge를 적용하고 MaxBytes를 100으로 설정한다.
트래픽 그래프가 갑자기 0으로 떨어지는 이유는 무엇인가?
SNMPv1의 32비트 트래픽 카운터가 최댓값을 넘어 0부터 다시 시작하는 카운터 래핑이 원인일 수 있다. 특히 기가비트급 이상의 포트에서는 다음 수집 주기가 오기 전에 카운터가 한 바퀴 돌아 비정상적인 값이나 0이 기록될 수 있다. 장비가 지원한다면 SNMPv2와 ifHCInOctets·ifHCOutOctets 같은 64비트 카운터를 사용하는 것이 좋다. 다만 통신 실패, 장비 재부팅, 잘못된 MaxBytes 설정도 그래프가 0이 되는 원인이 될 수 있다.
SNMPv2를 사용하면 모든 OID가 자동으로 64비트가 되는가?
아니다. Target 뒤에 :::::2를 추가하면 SNMPv2로 조회하지만, 실제 값의 크기는 해당 OID의 데이터 형식에 따라 결정된다. 64비트 값을 사용하려면 장비와 OID가 Counter64를 지원해야 한다.
두 네트워크 포트의 비트레이트를 하나의 그래프로 합칠 수 있는가?
가능하다. 두 포트를 각각 Target으로 지정하고 + 연산자로 더하면 입력 트래픽끼리, 출력 트래픽끼리 합산된다. Target[TOTAL_TRAFFIC]: 1:community@router + 2:community@router 여러 회선을 묶은 논리 링크나 두 포트의 전체 트래픽을 하나의 그래프로 확인할 때 사용할 수 있다.
MRTG의 Target에서 사용할 수 있는 사칙연산의 범위는?
Target 정의와 숫자 상수를 대상으로 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)을 사용할 수 있으며 괄호를 이용해 계산 순서를 지정할 수도 있다. 여러 Target의 합계, 두 값의 차이, 단위 변환과 사용률 계산 등에 활용할 수 있다. 계산식에 포함된 각 Target 정의의 앞뒤에는 공백을 두는 것이 중요하다.
Target 계산식에서 0으로 나누면 어떻게 되는가?
분모로 사용한 OID가 0을 반환하면 정상적인 사용률을 계산할 수 없다. 전체 용량처럼 0이 되지 않는 값을 분모로 사용해야 하며, 장비가 초기화되는 동안 일시적으로 0을 반환할 가능성도 확인해야 한다.
하나의 OID 값만 그래프로 그리고 싶을 때도 OID를 두 개 지정해야 하는가?
그렇다. MRTG의 Target은 기본적으로 두 개의 데이터 계열을 사용한다. 하나의 값만 필요한 경우 동일한 OID를 두 번 지정하고, noi 또는 noo 옵션으로 필요하지 않은 한쪽 그래프를 숨기면 된다.
gauge 옵션은 언제 사용해야 하는가?
CPU 사용률, 메모리 사용률, 디스크 사용량, 온도처럼 조회 시점의 현재 상태를 나타내는 값을 수집할 때 사용한다. gauge를 지정하지 않으면 MRTG는 기본적으로 값을 계속 증가하는 카운터로 취급하고 이전 값과 현재 값의 차이를 시간으로 나누어 처리한다.
MaxBytes를 실제 값보다 작게 설정하면 어떻게 되는가?
MaxBytes를 초과한 수집값은 비정상적인 값으로 판단되어 무시될 수 있다. 트래픽을 감시할 때는 포트의 최대 전송 속도를 바이트 단위로 환산해 설정하고, 백분율 그래프라면 일반적으로 100으로 설정한다.
특정한 그래프에만 다른 설정을 적용하는 방법은?
Options[_]는 이후에 선언되는 Target에 적용할 기본 옵션이다. 특정 Target에만 다른 설정을 적용하려면 Options[SERVER1_MEM]처럼 해당 Target의 이름을 지정한다. Target별 설정이 있으면 그 Target에는 지정된 옵션이 적용된다.

갱신 내역

  • — 최초 게시
  • — 블로그 이전 및 수정 (https://www.DectENG.com/)
  • — 수정 및 주소 이전 (https://www.EQMaker.kr/)