안녕하세요. 비전 IDC 기술팀입니다.
여러 대의 서버를 운영하다 보면 CPU, 메모리, 디스크, 네트워크 사용량이 언제부터 늘어났는지 한눈에 비교할 수 있는 그래프가 필요해집니다. Munin은 각 서버의 자원 사용량을 주기적으로 수집해 RRDtool 기반 그래프로 보여 주는 오픈소스 모니터링 도구로, 구성이 단순해 소규모 서버 환경에서 부담 없이 사용할 수 있습니다.
이 문서에서는 CentOS 7에서 EPEL 저장소를 이용해 Munin 마스터(수집·그래프 생성 서버)와 munin-node(수집 대상 서버)를 설치하고, 호스트 등록, 접근 허용 설정, 방화벽, Apache 웹 인증, 동작 확인까지 순서대로 설명합니다.
적용 환경
- 운영체제: CentOS Linux 7 (Munin 마스터 서버와 수집 대상 서버 모두)
- 패키지 저장소: EPEL (
epel-release) - 마스터 서버 패키지:
munin,munin-node,httpd - 수집 대상 서버 패키지:
munin-node - 통신 포트: TCP 4949 (마스터 → 각 노드), 웹 화면은 TCP 80
- 예시 구성: 마스터
monitor.example.com(192.168.10.10), 대상web01.example.com(192.168.10.21),db01.example.com(192.168.10.22)
1. Munin 동작 구조 이해
Munin은 수집 방향이 일반적인 에이전트 방식과 반대라는 점을 먼저 이해하면 설정이 쉬워집니다.
- munin-node: 각 서버에서 데몬으로 실행되며 TCP 4949 포트로 대기합니다. 요청이 오면 플러그인을 실행해 현재 값을 돌려줍니다.
- Munin 마스터: cron으로 주기적으로
munin-cron을 실행해 설정 파일에 등록된 모든 노드의 4949 포트에 접속하고, 값을 가져와 RRD 파일에 저장한 뒤 HTML 그래프를 생성합니다. - 웹 서버: 마스터가 생성한 HTML과 그래프 이미지를 브라우저로 보여 주는 역할만 합니다.
즉 방화벽은 마스터에서 각 노드의 TCP 4949로 들어가는 연결을 허용해야 하며, 노드에서 마스터로 데이터를 보내는 구조가 아닙니다. 마스터 서버 자신도 모니터링하려면 마스터에도 munin-node를 설치합니다.
| 역할 | 호스트명 | IP | 설치 패키지 |
|---|---|---|---|
| Munin 마스터 | monitor.example.com | 192.168.10.10 | munin, munin-node, httpd |
| 수집 대상 1 | web01.example.com | 192.168.10.21 | munin-node |
| 수집 대상 2 | db01.example.com | 192.168.10.22 | munin-node |
호스트명과 IP는 문서용 예시이므로 실제 환경에 맞게 바꿔 적용합니다.
2. 마스터 서버에 Munin 설치
Munin 패키지는 CentOS 기본 저장소가 아닌 EPEL 저장소에서 제공됩니다. 마스터 서버에서 EPEL 저장소를 추가한 뒤 필요한 패키지를 설치합니다.
sudo yum install -y epel-release
sudo yum install -y munin munin-node httpd
설치된 패키지와 주요 설정 파일 위치를 확인합니다.
rpm -q munin munin-node httpd
ls -l /etc/munin/
ls -l /etc/httpd/conf.d/munin.conf
/etc/munin/munin.conf는 마스터 설정 파일, /etc/munin/munin-node.conf는 노드 설정 파일입니다. /etc/httpd/conf.d/munin.conf는 패키지가 제공하는 Apache 설정으로, 웹 화면 경로와 인증 방식이 정의되어 있습니다.
3. munin.conf에 모니터링 대상 등록
변경 전 원본 설정 파일을 백업합니다.
sudo cp -a /etc/munin/munin.conf /root/munin.conf.backup
기본 경로 설정을 확인합니다. 특별한 이유가 없다면 기본값을 그대로 사용합니다.
grep -E '^[[:space:]]*(dbdir|htmldir|logdir|rundir|includedir)' /etc/munin/munin.conf
dbdir은 RRD 데이터, htmldir은 웹에 표시할 HTML과 그래프가 저장되는 경로입니다. 설정 파일을 편집해 파일 아래쪽의 호스트 트리 영역에 모니터링 대상을 추가합니다.
sudo vi /etc/munin/munin.conf
호스트는 대괄호 안에 그룹명;호스트명 형식으로 적고, 그 아래에 접속할 주소를 지정합니다. 그룹명을 생략하면 도메인 부분을 기준으로 자동 분류됩니다.
# 마스터 서버 자신
[example.com;monitor.example.com]
address 127.0.0.1
use_node_name yes
# 웹 서버
[example.com;web01.example.com]
address 192.168.10.21
use_node_name yes
# DB 서버
[example.com;db01.example.com]
address 192.168.10.22
use_node_name yes
address는 마스터가 실제로 접속할 IP 또는 호스트명이며, use_node_name yes는 노드가 응답하는 자신의 이름을 그대로 사용하겠다는 의미입니다. 기본 설정 파일에 [localhost] 항목이 이미 있다면 위의 마스터 서버 항목과 중복되지 않도록 둘 중 하나만 남깁니다.
4. 수집 대상 서버에 munin-node 설치
모니터링할 각 서버(예: web01, db01)에서 EPEL 저장소를 추가하고 munin-node만 설치합니다.
sudo yum install -y epel-release
sudo yum install -y munin-node
Munin에서 수집할 항목은 /etc/munin/plugins/ 디렉터리에 있는 플러그인 심볼릭 링크로 결정됩니다. 현재 활성화된 플러그인 목록을 확인합니다.
ls -l /etc/munin/plugins/
목록이 비어 있거나, 이후 Apache·MySQL 등 서비스를 추가로 설치했다면 서버 환경에서 사용 가능한 플러그인을 다음 명령으로 확인할 수 있습니다.
sudo munin-node-configure --suggest
결과에서 yes로 표시되지만 아직 활성화되지 않은 플러그인은 필요한 것만 골라 /usr/share/munin/plugins/의 원본을 /etc/munin/plugins/에 심볼릭 링크로 연결한 뒤 munin-node를 재시작하면 됩니다.
5. munin-node.conf 접근 허용 설정
munin-node는 기본적으로 로컬(127.0.0.1) 요청만 허용합니다. 각 수집 대상 서버에서 마스터 서버의 IP를 허용 목록에 추가해야 합니다.
sudo cp -a /etc/munin/munin-node.conf /root/munin-node.conf.backup
sudo vi /etc/munin/munin-node.conf
allow 항목은 정규 표현식으로 IP를 비교합니다. 점(.)은 정규식에서 임의의 문자를 의미하므로 반드시 \.로 이스케이프하고, 앞뒤에 ^와 $를 붙여 정확히 일치하도록 작성합니다.
# 기본 허용 항목
allow ^127\.0\.0\.1$
allow ^::1$
# Munin 마스터 서버 허용
allow ^192\.168\.10\.10$
그래프에 표시될 노드 이름을 지정하려면 같은 파일의 host_name 항목을 설정합니다. 마스터의 munin.conf에 등록한 호스트명과 일치시키는 것이 좋습니다.
host_name web01.example.com
설정을 마쳤다면 munin-node를 시작하고 부팅 시 자동 실행되도록 설정합니다. 마스터 서버에 설치한 munin-node도 같은 방법으로 시작합니다.
sudo systemctl enable --now munin-node
systemctl status munin-node
이미 실행 중인 상태에서 설정을 변경했다면 재시작해야 적용됩니다.
sudo systemctl restart munin-node
6. 수집 대상 서버의 방화벽 설정 (TCP 4949)
firewalld를 사용하는 수집 대상 서버에서는 마스터 서버에서 들어오는 TCP 4949 연결을 허용해야 합니다. 4949 포트를 모든 주소에 공개하기보다 마스터 서버 IP에서만 허용하는 rich rule을 사용하는 것을 권장합니다.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.10/32" port port="4949" protocol="tcp" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rules
내부 전용망처럼 이미 접근이 통제된 환경에서 포트 단위로 간단히 열고 싶다면 다음 명령을 사용할 수도 있습니다.
sudo firewall-cmd --permanent --add-port=4949/tcp
sudo firewall-cmd --reload
7. Apache 웹 화면과 접속 인증 설정
마스터 서버에서 그래프를 브라우저로 확인할 수 있도록 Apache를 설정합니다. 먼저 패키지가 제공한 Apache 설정에서 인증 파일 경로를 확인합니다.
grep -nE 'Alias|AuthUserFile|Require' /etc/httpd/conf.d/munin.conf
일반적으로 /munin 경로가 Munin의 htmldir로 연결되어 있고, AuthUserFile로 지정된 파일을 이용해 기본 인증(Basic Auth)을 요구하도록 되어 있습니다. 확인한 인증 파일 경로에 로그인 계정을 만듭니다. 아래 예시는 인증 파일이 /etc/munin/munin-htpasswd인 경우입니다.
ls -l /etc/munin/munin-htpasswd
파일이 없다면 -c 옵션으로 새로 만들고, 파일이 이미 있다면 -c 없이 계정을 추가합니다. -c 옵션은 기존 파일을 덮어쓰므로 주의합니다. muninadmin은 예시 계정명입니다.
# 인증 파일이 없는 경우
sudo htpasswd -c /etc/munin/munin-htpasswd muninadmin
# 인증 파일이 이미 있는 경우
sudo htpasswd /etc/munin/munin-htpasswd muninadmin
Apache 설정 문법을 확인한 뒤 Apache를 시작하고 자동 실행을 설정합니다.
sudo apachectl configtest
sudo systemctl enable --now httpd
마스터 서버의 firewalld에서 HTTP 접속을 허용합니다.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
8. munin-cron 수집 주기 이해
마스터의 데이터 수집과 그래프 생성은 패키지가 설치한 cron 작업이 담당합니다.
cat /etc/cron.d/munin
기본 설정은 munin 사용자 권한으로 5분마다 /usr/bin/munin-cron을 실행하는 형태입니다. Munin의 RRD 데이터는 기본적으로 5분 간격을 기준으로 구성되므로, cron 주기만 1분으로 줄인다고 해서 그래프 해상도가 높아지지는 않으며 오히려 마스터 부하만 늘어날 수 있습니다. 특별한 요구가 없다면 기본 주기를 유지하는 것을 권장합니다.
설정 직후 그래프를 빨리 확인하고 싶다면 munin 사용자로 수동 실행할 수 있습니다.
sudo -u munin /usr/bin/munin-cron
그래프에 선이 그려지려면 최소 두 번 이상의 수집 값이 필요하므로, 처음 등록한 노드는 10~15분 정도 지난 뒤 확인합니다. 브라우저에서 다음 주소로 접속해 앞에서 만든 계정으로 로그인합니다.
http://마스터서버IP/munin/
9. 동작 확인 (4949 포트, munin-run)
마스터에서 노드 연결 확인
마스터 서버에서 각 노드의 4949 포트에 직접 접속해 응답을 확인합니다. CentOS 7에서는 nc(nmap-ncat 패키지) 또는 telnet을 사용할 수 있습니다.
sudo yum install -y nmap-ncat
nc 192.168.10.21 4949
정상이라면 # munin node at web01.example.com과 같은 인사 메시지가 표시됩니다. 이어서 다음 명령을 한 줄씩 입력해 플러그인 목록과 값을 확인하고 quit로 종료합니다.
list
fetch cpu
quit
연결 직후 끊어지거나 아무 응답이 없다면 노드의 allow 설정 또는 방화벽을 확인해야 합니다. 텔넷을 사용할 경우 telnet 192.168.10.21 4949로 같은 방식으로 확인합니다.
노드에서 플러그인 직접 실행
특정 그래프만 비어 있다면 해당 노드에서 플러그인을 직접 실행해 값이 출력되는지 확인합니다.
sudo munin-run cpu
sudo munin-run df
sudo munin-run memory
user.value 12345처럼 항목명.value 숫자 형식의 결과가 출력되면 플러그인은 정상입니다. 오류가 출력된다면 해당 플러그인의 설정이나 필요한 패키지를 점검합니다.
로그 확인
마스터의 수집 로그는 munin.conf의 logdir 경로(기본 /var/log/munin)에 저장되며, 수집 실패 여부는 munin-update.log에서 확인할 수 있습니다. 노드 로그 경로는 munin-node.conf의 log_file 항목에서 확인합니다.
sudo tail -n 50 /var/log/munin/munin-update.log
grep log_file /etc/munin/munin-node.conf
10. 자주 발생하는 문제와 확인 방법
| 증상 | 가능한 원인 | 확인 및 해결 방향 |
|---|---|---|
yum install munin 시 패키지를 찾을 수 없음 |
EPEL 저장소 미설치 또는 CentOS 7 저장소 오류 | yum repolist로 epel이 표시되는지 확인하고, 저장소 오류라면 Vault 저장소 설정을 먼저 복구합니다. |
/munin 접속 시 403 Forbidden |
아직 HTML이 생성되지 않았거나 인증·접근 설정 문제 | sudo -u munin /usr/bin/munin-cron 실행 후 htmldir에 파일이 생성되었는지와 Apache 에러 로그를 확인합니다. |
| 로그인 창이 반복해서 표시됨 | 인증 파일 경로 불일치 또는 계정 미생성 | /etc/httpd/conf.d/munin.conf의 AuthUserFile 경로와 실제 htpasswd 파일 경로가 같은지 확인합니다. |
| 특정 노드 그래프가 비어 있음 | 4949 포트 차단 또는 allow 미등록 |
마스터에서 nc 노드IP 4949로 인사 메시지가 나오는지 확인합니다. |
| 노드 이름이 다르게 표시되거나 중복됨 | munin.conf의 호스트명과 노드의 host_name 불일치 |
두 값을 동일하게 맞춘 뒤 munin-node를 재시작합니다. |
| 특정 플러그인 그래프만 없음 | 플러그인 미활성화 또는 실행 오류 | 노드에서 munin-run 플러그인명을 실행해 오류 메시지를 확인합니다. |
해결되지 않으면 비전 IDC 1:1 문의(https://visionidc.com/submitticket.php) 또는 텔레그램 VISIONIDC24로 문의해 주시기 바랍니다.
11. 관련 기술자료와 공식 참고자료
관련 비전 IDC 기술자료
- CentOS 7에서 yum 저장소 오류를 Vault 저장소로 변경하여 해결하는 방법 — 패키지 설치 단계에서 저장소 오류가 발생할 때
- CentOS 7에서 chrony로 서버 시간을 동기화하는 방법 — 서버 간 시간이 어긋나면 그래프 비교가 어려우므로 함께 설정 권장
- CentOS 7에서 디스크 용량을 많이 사용하는 디렉터리를 찾는 방법 — 디스크 그래프에서 사용량 증가를 발견했을 때
- CentOS 7에서 No space left on device 오류가 발생할 때 원인을 확인하는 방법
공식 참고자료
- Munin 프로젝트 공식 사이트
- Munin Guide — munin.conf, munin-node.conf, 플러그인 설명
- CentOS Project - CentOS Linux — CentOS Linux 7 지원 종료 일정
12. 자주 묻는 질문
수집 대상 서버에도 Apache를 설치해야 하나요?
아닙니다. 수집 대상 서버에는 munin-node만 있으면 됩니다. 웹 서버는 그래프를 보여 주는 마스터 서버에만 필요합니다.
인터넷을 통해 다른 데이터센터의 서버도 수집할 수 있나요?
가능합니다. 다만 munin-node 통신은 기본적으로 암호화되지 않으므로 4949 포트는 반드시 마스터 서버 IP에서만 허용하고, 가능하면 사설망이나 VPN 구간을 이용하는 것을 권장합니다.
그래프가 5분보다 짧은 간격으로 표시되게 할 수 있나요?
cron 주기만 바꾸는 것으로는 해상도가 바뀌지 않습니다. 짧은 간격의 수집이 필요하다면 저장 구조까지 함께 변경해야 하며 마스터 부하도 커지므로, 실시간 확인이 필요한 경우에는 서버에서 top, vmstat 같은 명령을 병행하는 편이 현실적입니다.
모니터링 대상에서 서버를 제외하려면 어떻게 하나요?
마스터의 munin.conf(또는 conf.d의 해당 파일)에서 호스트 항목을 삭제하면 다음 수집부터 제외됩니다. 기존 그래프 데이터는 dbdir과 htmldir에 남아 있으므로 필요 없다면 해당 호스트 디렉터리를 정리합니다.
마무리
이번 문서에서는 CentOS 7에서 EPEL 저장소로 Munin 마스터와 munin-node를 설치하고, 호스트 등록, allow 정규식 설정, TCP 4949 방화벽 허용, Apache 인증, 수집 주기와 동작 확인 방법을 살펴봤습니다.
그래프가 표시되지 않을 때는 마스터에서 노드 4949 포트 응답 확인 → 노드에서 munin-run 실행 → 마스터 로그 확인 순서로 점검하면 원인을 빠르게 좁힐 수 있습니다. CentOS 7은 지원이 종료된 운영체제이므로 모니터링 환경을 정비하면서 운영체제 이전 계획도 함께 검토하시기 바랍니다.
