ติดตั้ง mrtg บน ubuntu
จาก Wiki Opensource
บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 21-12-2554
ดูแลโดย WIPAT
- ทดสอบกับ ubuntu 10.04, 8.04
- ตัวอย่างต้นแบบนี้เหมาะสำหรับเก็บข้อมูลของ server โดยไม่จำเป็นต้องใช้ snmp
- หากต้องการใช้ snmp ต้องมีการติดตั้งโปรแกรม snmpd มาก่อน มีคำแนะนำตามบันทึก ติดตั้ง snmpd บน ubuntu
- หากยังไม่ติดตั้ง apache ให้ติดตั้งด้วยคำสั่ง sudo apt-get install apache2 apache2-doc
- ติดตั้งโปรแกรม mrtg ด้วยคำสั่ง sudo apt-get install mrtg
หากได้หน้าต่างว่า Configuring mrtg
... Make /etc/mrtg.cfg owned by and readable only by root?
ให้ตอบ <Yes> ระบบจะติดตั้งต่อจนเสร็จ
- สร้างพื้นที่เก็บข้อมูลของ mrtg ไว้ที่ /var/www/mrtg ด้วยคำสั่ง sudo mkdir -p /var/www/mrtg
สร้าง directory สำหรับเก็บข้อมูลแสดงผล ด้วยคำสั่ง sudo mkdir -p /var/www/mrtg/myhost
สร้าง directory สำหรับเก็บการตั้งค่า sudo mkdir -p /etc/mrtg
- สร้างแฟ้ม /etc/apache2/conf.d/mrtg มีข้อความว่า
Alias /mrtg /var/www/mrtg
<Location /mrtg>
Order deny,allow
Deny from all
Allow from all
</Location>
แล้วสั่งให้ apache ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/apache2 force-reload
บางทีมี bug พื้นที่ /var/lock/mrtg ถูกลบหายไปหลังการรีบูทเครื่อง
ต้องสร้างพื้นที่ /var/lock/mrtg ด้วยคำสั่ง sudo mkdir -p /var/lock/mrtg
และต้องสร้างทุกครั้งที่บูทเครื่องด้วย โดยการเพิ่มคำสั่งไว้ในแฟ้ม /etc/rc.local
ด้วยการเพิ่มบรรทัดคำสั่งว่า mkdir -p /var/lock/mrtg
- ลองสร้างกราฟ CPU Load และ Idle โดยไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-cpu.sh
สร้างแฟ้ม /etc/mrtg/get-cpu.sh มีข้อมูลว่า
#!/bin/bash
IDLE=$(vmstat|tail -1|awk '{print $(NF-1)}')
TEMP=$(uptime|grep -o "load average.*"|awk '{print $3}'|cut -d',' -f 1)
NUMA=$(echo ${TEMP}|cut -d'.' -f 1)
NUMB=$(echo ${TEMP}|cut -d'.' -f 2)
LOAD=$(expr $(expr ${NUMA} \* 100) + ${NUMB})
TIME=$(uptime)
echo "${IDLE}"
echo "${LOAD}"
echo "$TIME"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-cpu.sh
สร้างแฟ้ม /etc/mrtg/myhost-cpu.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-cpu]:`/etc/mrtg/get-cpu.sh`
MaxBytes[myhost-cpu]: 10000
Title[myhost-cpu]: Idle CPU and Load average
PageTop[myhost-cpu]: <H1>Idle CPU and Load average</H1>
ShortLegend[myhost-cpu]: %
YLegend[myhost-cpu]: CPU and Load Utilization
Legend1[myhost-cpu]: Idle CPU
Legend2[myhost-cpu]: Load average
LegendI[myhost-cpu]: Idle
LegendO[myhost-cpu]: Load
Options[myhost-cpu]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg
สร้าง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg
สร้างแฟ้มสั่งการ mrtg ด้วยการสร้างแฟ้ม /etc/mrtg/mymrtg.sh ให้มีข้อความว่า
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg
ทดสอบดูผลงานได้ที่เวบ http://mywebserver/mrtg/myhost
- สร้างแฟ้ม /etc/cron.d/mrtg-myhost ให้เป็นดังนี้
*/5 * * * * root sh /etc/mrtg/mymrtg.sh
แล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/cron restart
หากต้องการเพิ่มกราฟ mrtg เส้นอื่นเข้าไปอีก ก็เพิ่มคำสั่งต่อท้ายบรรทัดในแฟ้ม /etc/mrtg/mymrtg.sh ได้เลย
หากเป็น ubuntu 8.04 อาจเจอปัญหาพื้นที่ /var/lock/mrtg หายไป ทำให้ mrtg ไม่ทำงาน จึงแนะนำให้ใช้ shell script ช่วยเพิ่มเติม
โดยการสร้างแฟ้มชื่อ /etc/mrtg/mymrtg.sh มีข้อมูลดังตัวอย่างคือ
#!/bin/bash
if [ ! -d /var/lock/mrtg ] ; then
mkdir -p /var/lock/mrtg
fi
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg
- ตัวอย่างหากต้องการตั้งค่าให้ cron สั่งให้ mrtg บันทึกค่าทุกๆ 5 นาที
ให้สร้างแฟ้ม /etc/cron.d/mrtg-myhost ให้มีข้อความว่า
*/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg
แล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/cron restart
- เพิ่มกราฟ Memory Free และ Swap โดยได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-memory.sh
สร้างแฟ้ม /etc/mrtg/get-memory.sh มีข้อมูลว่า
#!/bin/bash
FREE=$(echo "$(free|grep "/cache:"|awk '{print $4}')*1000"|bc)
SWAP=$(free|grep "Swap:"|awk '{print $3}')
TIME=$(uptime)
echo "${FREE}"
echo "${SWAP}"
echo "$TIME"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-memory.sh
สร้างแฟ้ม /etc/mrtg/myhost-memory.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-mem]:`/etc/mrtg/get-memory.sh`
MaxBytes[myhost-mem]: 2000000000
Title[myhost-mem]: Free Memory and Swap Used
PageTop[myhost-mem]: <H1>Free Memory and Swap Used</H1>
ShortLegend[myhost-mem]: bytes
YLegend[myhost-mem]: bytes
LegendI[myhost-mem]: Free Memory:
LegendO[myhost-mem]: Swap Used:
Legend1[myhost-mem]: Free memory, in bytes
Legend2[myhost-mem]: Swap Used, in bytes
Options[myhost-mem]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-memory.cfg
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg /etc/mrtg/myhost-memory.cfg
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-memory.cfg
- เพิ่มกราฟ CPU wait for IO เพียงเส้นเดียว ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-cpu-io.sh
สร้างแฟ้ม /etc/mrtg/get-cpu-io.sh มีข้อมูลว่า
#!/bin/bash
CPU_WAIT_IO=$(vmstat|tail -1|awk '{print $16}')
TIME=$(uptime)
echo "$CPU_WAIT_IO"
echo "0"
echo "$TIME"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-cpu-io.sh
สร้างแฟ้ม /etc/mrtg/myhost-cpu-io.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-cpu-io]:`/etc/mrtg/get-cpu-io.sh`
MaxBytes[myhost-cpu-io]: 100
Title[myhost-cpu-io]: CPU Time spent waiting for IO
PageTop[myhost-cpu-io]: <H1>CPU Time spent waiting for IO</H1>
ShortLegend[myhost-cpu-io]: %
YLegend[myhost-cpu-io]: wait IO
Legend1[myhost-cpu-io]: current:
Legend2[myhost-cpu-io]:
LegendI[myhost-cpu-io]: current, %
LegendO[myhost-cpu-io]:
Options[myhost-cpu-io]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu-io.cfg
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg /etc/mrtg/myhost-memory.cfg /etc/mrtg/myhost-cpu-io.cfg
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu-io.cfg
- เพิ่มกราฟ network traffic ของ eth0 โดยได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-speed-eth0.sh
สร้างแฟ้ม /etc/mrtg/get-speed-eth0.sh มีข้อมูลว่า
#!/bin/bash
MYFILE="/tmp/get-speed-eth0.txt"
DEVFILE="/proc/net/dev"
NETDEV="eth0"
if [ ! -f "${MYFILE}" ] ; then
NOW=$(date "+%s")
DATA=$(grep -i "${NETDEV}" ${DEVFILE}|cut -d':' -f 2)
IN=$(echo ${DATA}|awk '{print $1}')
OUT=$(echo ${DATA}|awk '{print $9}')
START="${NOW}:${IN}:${OUT}"
echo "${START}" > ${MYFILE}
sleep 5
fi
TEMP=$(head -1 ${MYFILE})
NOW=$(echo ${TEMP}|cut -d':' -f 1)
IN=$(echo ${TEMP}|cut -d':' -f 2)
OUT=$(echo ${TEMP}|cut -d':' -f 3)
START="${NOW}:${IN}:${OUT}"
NOW2=$(date "+%s")
DATA2=$(grep -i "${NETDEV}" ${DEVFILE}|cut -d':' -f 2)
IN2=$(echo ${DATA2}|awk '{print $1}')
OUT2=$(echo ${DATA2}|awk '{print $9}')
STOP="${NOW2}:${IN2}:${OUT2}"
echo "${STOP}" > ${MYFILE}
PERIOD=$(expr ${NOW2} - ${NOW})
RIN=$(expr ${IN2} - ${IN})
TOUT=$(expr ${OUT2} - ${OUT})
SPEEDIN=$(expr $(expr ${RIN} \* 8 ) / ${PERIOD})
SPEEDOUT=$(expr $(expr ${TOUT} \* 8 ) / ${PERIOD})
TIME=$(uptime)
echo "${SPEEDIN}"
echo "${SPEEDOUT}"
echo "${TIME}"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-speed-eth0.sh
สร้างแฟ้ม /etc/mrtg/myhost-speed-eth0.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-speed]:`/etc/mrtg/get-speed-eth0.sh`
MaxBytes[myhost-speed]: 1000000000
Title[myhost-speed]: Traffic Analysis for eth0
PageTop[myhost-speed]: <H1>Traffic Analysis for eth0</H1>
ShortLegend[myhost-speed]: b/s
YLegend[myhost-speed]: Bits per Second
Legend1[myhost-speed]: In
Legend2[myhost-speed]: Out
LegendI[myhost-speed]: In
LegendO[myhost-speed]: Out
options[myhost-speed]: gauge, growright
ทดสอบ สร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-speed-eth0.cfg
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg /etc/mrtg/myhost-memory.cfg /etc/mrtg/myhost-cpu-io.cfg /etc/mrtg/myhost-speed-eth0.cfg
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-speed-eth0.cfg
- ควรจัดทำกราฟ mrtg ทั้ง 4 รูปแบบคือ CPU idle/load, Memory free/swap, CPU io wait และ network traffic
เพราะเป็นข้อมูลเบื้องต้นในการวิเคราะห์การสิ้นเปลืองทรัพยากร
หากจำเป็นก็เพิ่มกราฟอื่นๆต่อไป
วิธีการจัดทำกราฟ mrtg แบบง่ายๆจากแฟ้ม script ที่ทำไว้สำเร็จรูปให้ทำดังนี้
wget http://ftp.psu.ac.th/pub/mrtg/myhost/install-mrtg-myhost.sh -P /tmp
sudo sh /tmp/install-mrtg-myhost.sh
ระบบจะติดตั้งอัตโนมัติ รอสักครู่ แค่นี้ก็เสร็จแล้ว
ทดสอบผลงานได้เลยที่หน้าเวบ http://localhost/mrtg/myhost
- ตัวอย่างการทำกราฟ Idle CPU and Load
ใช้ข้อมูล ssCpuIdle.0 และ laLoadInt.1 จาก snmp แสดงผลภาพเป็นกราฟสองเส้น
สร้างแฟ้ม /etc/mrtg/myhost-cpu.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[myhost-cpu]:ssCpuIdle.0&laLoadInt.1:public@localhost
RouterUptime[myhost-cpu]: public@localhost
MaxBytes[myhost-cpu]: 10000
Title[myhost-cpu]: Idle CPU and Load average
PageTop[myhost-cpu]: <H1>Idle CPU and Load average</H1>
ShortLegend[myhost-cpu]: %
YLegend[myhost-cpu]: CPU and Load Utilization
Legend1[myhost-cpu]: Idle CPU
Legend2[myhost-cpu]: Load average
LegendI[myhost-cpu]: Idle
LegendO[myhost-cpu]: Load
Options[myhost-cpu]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg
- ตัวอย่างการทำกราฟ memory และ swap
ใช้ข้อมูล memAvailReal.0 และ memTotalSwap.0 จาก snmp แสดงผลภาพเป็นกราฟสองเส้น
สร้างแฟ้ม /etc/mrtg/myhost-mem.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[myhost-mem]: memAvailReal.0&memTotalSwap.0:public@localhost - memIndex.0&memAvailSwap.0:public@localhost + memBuffer.0&memIndex.0:public@localhost + memCached.0&memIndex.0:public@localhost
RouterUptime[myhost-mem]: public@localhost
MaxBytes[myhost-mem]: 2000000
Title[myhost-mem]: Free Memory and Swap Used
PageTop[myhost-mem]: <H1>Free Memory and Swap Used</H1>
kMG[myhost-mem]: k,M,G,T,P,X
ShortLegend[myhost-mem]: bytes
YLegend[myhost-mem]: bytes
LegendI[myhost-mem]: Free Memory:
LegendO[myhost-mem]: Swap Used:
Legend1[myhost-mem]: Free memory, in bytes
Legend2[myhost-mem]: Swap Used, in bytes
Options[myhost-mem]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mem.cfg
- ตัวอย่างทำกราฟ Mysql connection เพียงเส้นเดียว
ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-mysql-session.sh
สร้างแฟ้ม /etc/mrtg/get-mysql-session.sh มีข้อมูลว่า
#!/bin/bash
SESSION=$(mysqladmin -uroot -pmysqlpassword extended|grep "Threads_connected"|cut -d'|' -f3)
TIME=$(uptime)
echo "$SESSION"
echo "0"
echo "$TIME"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-mysql-session.sh
สร้างแฟ้ม /etc/mrtg/myhost-mysql-session.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-mysql-session]:`/etc/mrtg/get-mysql-session.sh`
MaxBytes[myhost-mysql-session]: 1000
Title[myhost-mysql-session]: Mysql connection
PageTop[myhost-mysql-session]: <H1>Mysql connection</H1>
ShortLegend[myhost-mysql-session]: conns
YLegend[myhost-mysql-session]: conns
Legend1[myhost-mysql-session]: current:
Legend2[myhost-mysql-session]:
LegendI[myhost-mysql-session]: current, number of connections
LegendO[myhost-mysql-session]:
Options[myhost-mysql-session]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mysql-session.cfg
- ตัวอย่างทำกราฟ Mysql memory เพียงเส้นเดียว
ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-mysql-mem.sh
สร้างแฟ้ม /etc/mrtg/get-mysql-mem.sh มีข้อมูลว่า
#!/bin/bash
MYSQL_PID=$(ps ax|grep "mysqld.pid"|grep -v "grep"|awk '{print $1}')
MEMORY=$(pmap -d $MYSQL_PID|tail -1|awk '{print $4}'|cut -d'K' -f1)
TIME=$(uptime)
echo $MEMORY
echo "0"
echo "$TIME"
echo "MYHOST"
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-mysql-mem.sh
สร้างแฟ้ม /etc/mrtg/myhost-mysql-mem.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
Target[myhost-mysql-mem]: `/etc/mrtg/get-mysql-mem.sh`
MaxBytes[myhost-mysql-mem]: 10000000
Title[myhost-mysql-mem]: Mysql memory usage
PageTop[myhost-mysql-mem]: <H1>Mysql memory usage</H1>
kMG[myhost-mysql-mem]: k,M,G,T,P,X
ShortLegend[myhost-mysql-mem]: bytes
YLegend[myhost-mysql-mem]: bytes
Legend1[myhost-mysql-mem]: private memory:
Legend2[myhost-mysql-mem]:
LegendI[myhost-mysql-mem]: private memory, in bytes
LegendO[myhost-mysql-mem]:
Options[myhost-mysql-mem]: gauge, nopercent, growright
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mysql-mem.cfg
- ตัวอย่างการทำกราฟ TCP Establish connection
ใช้ข้อมูล tcpCurrEstab.0 จาก snmp แสดงผลภาพเป็นกราฟเพียงเส้นเดียว
สร้างแฟ้ม /etc/mrtg/myhost-tcpestab.cfg มีข้อมูลตัวอย่างประมาณว่า
WorkDir: /var/www/mrtg/myhost
LoadMIBs: /usr/share/snmp/mibs/TCP-MIB.txt
Target[myhost-tcpestab]: tcpCurrEstab.0&tcpCurrEstab.0:public@localhost
RouterUptime[myhost-tcpestab]: public@localhost
MaxBytes[myhost-tcpestab]: 1000000
Title[myhost-tcpestab]: TCP Current Establish
PageTop[myhost-tcpestab]: <H1>TCP Current Establish </H1>
ShortLegend[myhost-tcpestab]: conns
YLegend[myhost-tcpestab]: conns
LegendI[myhost-tcpestab]: Current:
LegendO[myhost-tcpestab]:
Legend1[myhost-tcpestab]: Current, numbers of connections
Legend2[myhost-tcpestab]:
Options[myhost-tcpestab]: nopercent, growright, gauge
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-tcpestab.cfg
- ตัวอย่างคำสั่งในการแสดง index สำหรับกราฟหลายรูปในหน้าเดียว
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-tcpestab.cfg /etc/mrtg/myhost-cpu.cfg /etc/mrtg/mrtg-myhost.cfg
- สร้าง config file สำหรับ myhost ด้วยคำสั่ง
sudo cfgmaker -global "options[_]:bits,growright" --global "workdir: /var/www/mrtg/myhost" public@localhost > /tmp/mrtg-myhost.cfg
sudo cp /tmp/mrtg-myhost.cfg /etc/mrtg/mrtg-myhost.cfg
ทดสอบสร้างภาพ ต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg-myhost.cfg
สร้าง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/mrtg-myhost.cfg