「MySQL을 snmpd로 감시」에서 설명한 것은 SNMP서버가 MySQL값을 처리하는 방법이었다.
여기에서는 SNMP클라이언트인 MRTG가 MySQL값을 조사하는 방법을 소개한다.
SNMP클라이언트로 조사할 것인지 SNMP서버로 조사할 것인지 상황에 맞게 선택하면 될 것이다.
Debian에서는 다음과 같은 조작으로 MRTG가 설치된다.
root@shell# aptitude install mrtg mrtg-contrib
사용방법
MRTG설정파일에 MRTG가 명령어(스크립트)를 실행해서 그 결과를 처리하도록 해보자.
Target[Threads_connected]: `/etc/snmp/mysql_mrtg.sh`
Title[Threads_connected]: "MySQL Threads_connected"
Options[Threads_connected]: growright,nopercent,gauge
YLegend[Threads_connected]: times
ShortLegend[Threads_connected]: times
Legend1[Threads_connected]: times
Legent2[Threads_connected]: times
LegentO[Threads_connected]:
Target키워드는 Threads_connected를 조사하는 스크립트를 「`」로 묶어서 지정한다.
스크립트는 /etc/snmp/mysql_mrtg.sh로 한다. 이 스크립트에는 실행권한을 chmod로 부여해둔다. 또 Options에 nopercent를 지정해서 %를 다루지 않게 한다. Options의 gauge는 값을 차이처리, 평균화(/sec.)를 하지않는다는 것을 의미한다.
MRTG는 새롭게 취득한 값과 전에 취득한 값의 차이를 계산하여 그것을 기준으로 그래프를 그린다. 보통 네트워크의 인터페이스의 입출력패킷 양의 수치는 누적되어 처리되므로 이번에 얻은 값과 전에 얻은 값의 차이를 계산해서 출력한다.
그러나 이번에 측정하려고 하는 것은 MySQL의 Threads_connected 즉 지금 접속하고 있는 수이므로 gauge를 이용한다.
참고로 디스크사용량이나 미사용량은 gauge처리를 하는 것이 좋다.
MRTG는 보통 값을 초간격으로 평균(값/sec.)을 낸다. gauge의 경우, 값을 평균화하지 않고 측정값이 그대로 출력된다. 즉 순간순간 측정된 값이 출력된다.
gauge하고 비슷한 것이 absolute가 있다. 이것은 값을 초간격으로 평균처리하는 점이 gauge하고 다른 점이다.
Legend는 축의 단위이다. 단순히 표시할 때의 문자열을 나타내므로 편한대로 설정하면 될 것이다. LegendO[]:처럼 단위를 지정하지 않으면 Outbound선을 출력하지 않는다.
스크립트는 다음과 같이 처리한다.
간략화한 것이므로 인수처리, 에러처리, 배타처리등은 생략한다.
#!/bin/sh
export PATH=/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
TMPFILE=/tmp/mysql_mrtg.$$
mysql -uroot -e 'SHOW STATUS' > $TMPFILE
N=`grep -i '^Threads_connected' $TMPFILE | awk '{print $2}'`
T=`grep -i '^Uptime' $TMPFILE | awk '{print $2}'`
rm TMPFILE
echo "$N"
echo 0
echo "$(expr $T / 86400) days"
echo "MySQL Server Threads_connected"
exit 0
출력포맷은 다음과 같다.
Inbound의 값(수치)
Outbound의 값(수치)
가동시간(문자열)
코멘트(문자열)
MRTG는 인터페이스 패킷의 입출력을 조사하는 것을 전제로 하고 있다.
따라서 인터페이스의 Inbound와 Outbound 둘다 값이 필요하다.
이번 예에서는 한개만 필요하므로 Outbound를 0으로 고정하고 있다. 이것은 숫자이다.
나머지 가동시간, 코멘트는 인간이 읽을 수 있는 문자열이면 뭐든지 괜찮다.
2010년 5월 10일 월요일
2010년 3월 18일 목요일
MySQL를 snmpd로 감시1
서버의 상태를 정보수집하는 경우, SNMP가 잘 사용된다. 관리업무에 사용되는 SNMP클라이언트 툴로서는 MRTG가 유명하다.
MRTG에서 mysqladmin 명령어나 mysql명령어를 실행해서 정보수집하는 방법도 있지만 이것은 다음과 같은 점에서 좋지 않는 면도 있다.
- mysqladmin명령어나 mysql명령어를 실행하기위해 클라이언트가 되는 MRTG가 있는 머신과 MySQL서버간의 통신이 허용되는 케이스가 적다.
- 힘들여 MySQL서버가 움직이는 컴퓨터에 SNMP서버를 돌리게 했는데도 그것과는 다른 별도의 방법으로 MySQL서버 정보를 취득하는 것도 거시기하다.
[클라이언트] [서버]
SNMP클라이언트 -------------------------------->SNMP서버(->mysql명령->MySQL서버)
SNMP서버가 MySQL정보를 보내주는 것이 가능하다면 간단하게 해결될 것이다.
여기에서는 Linux 2.6과 net-snmp 5.1.2를 사용해서 설명한다. 물론 ucd-snmp계열이라면 통용되는 이야기가 된다.
또, Debian GNU/Linux 3.1 sarge에서는 다음과 같이 조작하는 것으로 SNMP서버와 클라이언트 양쪽이 인스톨된다.
Debian패키지 인스톨
root@shell# aptitude install snmp snmpd
피드 구독하기:
글 (Atom)
