MRTG 서버와 모니터링 대상서버가 분리되어있을 경우 원격에서 모니터링 대상서버로의 결과값을 받기를 원할때 사용하는 방법이다.
나같은 경우는 웹 접속자수, LISTEN 포트, 하드디스크 온도등을 체크하려고 한다.
아래와 같이 설정파일에 등록
/etc/snmp/snmpd.conf
###############################################################################
# Executables/scripts
# 쉘 스크립트를 이곳에 등록하여 그 결과를 모니터링 할 수가 있다.
# 여기서 예제로 설명하는 mrtg.cfg 를 보면 Target[mrtg_tab] 소스에 직접 쉘
# 스크립트를 지정하여 로컬 머신 web server, mysql server의 데몬과 세션을
# 모니터링 하는데, 밑에서처럼 두 쉘 스크립트를 이곳에 등록하여 모니터링 할
# 수도 있다.
# 이렇게 모니터링 하게 되면 쉘 스크립트의 결과가 MIB 객체로 등록이 되므로
# 원격 mrtg 머신에서도 이 쉘 스크립트를 모니터링 할 수 있는 장점이 있다.
# 그러나 이곳에 쉘 스크립트를 등록하여 이용하는 방법은 보안 문제를 유발 할
# 수 있음을 인지하여 주의 깊게 사용하기 바란다.
# 또한 이 방법의 경우에는 쉘 스크립트 결과가 1라인을 초과 한다면 그 결과는
# 짤려지게 된다.
exec http_conn /root/system_info.sh http_conn
exec listen_port /root/system_info.sh listen_port
exec system_uptime /root/system_info.sh system_uptime
exec hdd_temp1 /root/system_info.sh hdd_temp1
exec hdd_temp2 /root/system_info.sh hdd_temp2
스크립트 파일
1개의 파일로 원하는 명령어를 함수로 만들어버렸다...
#!/bin/sh
http_conn()
{
web_conn=`netstat -an |grep :80 |grep EST |wc -l`
echo $web_conn
}
listen_port()
{
listen=`netstat -an |grep LISTEN |grep -v unix |wc -l`
echo $listen
}
system_uptime()
{
CHECK=`uptime |grep days`
if [ "$CHECK" == "" ] ; then
system_uptime=0
echo $system_uptime
else
system_uptime=`uptime | awk '{print $3}'`
echo $system_uptime
fi
}
hdd_temp1()
{
hdd_temp1=`hddtemp /dev/sda |awk '{print $3}'`
echo $hdd_temp1
}
hdd_temp2()
{
hdd_temp2=`hddtemp /dev/sdb |awk '{print $3}'`
echo $hdd_temp2
}
case "$1" in
http_conn)
http_conn
;;
listen_port)
listen_port
;;
system_uptime)
system_uptime
;;
hdd_temp1)
hdd_temp1
;;
hdd_temp2)
hdd_temp2
;;
*)
echo $"Usage : 0$ { http_conn | listen_port | system_uptime | hdd_temp1 | hdd_temp2 }"
;;
esac
원격에서 snmpwalk 를 통해서 결과값을 확인
# snmpwalk XXX.XXX.XXX.XXX -v2c -c public .1.3.6.1.4.1.2021.8.1.101
UCD-SNMP-MIB::extOutput.1 = STRING: 0
UCD-SNMP-MIB::extOutput.2 = STRING: 10
UCD-SNMP-MIB::extOutput.3 = STRING: 0
UCD-SNMP-MIB::extOutput.4 = STRING: 38
UCD-SNMP-MIB::extOutput.5 = STRING: 36
제대로 받아온다... ㅋㅋ
이제는 MRTG CFG 파일을 수정해서 결과값을 가지고 그리면 끝..!!
Target[hdd_temp]: .1.3.6.1.4.1.2021.8.1.101.4&.1.3.6.1.4.1.2021.8.1.101.4:public@xxx.xxx.xxx.xxx:::::2
MaxBytes[hdd_temp]: 500
Suppress[hdd_temp]: d
Title[hdd_temp]: hdd_temp
PageTop[hdd_temp]: hdd_temp
<TABLE>
<TR><TD>SYSTEM:</TD> <TD>WEB</TD></TR>
<TR><TD>IP:</TD> <TD>XXX.XXX.XXX.XXX</TD></TR>
</TABLE>