หัวข้อการสัมมนา MRTG
MRTG
- แนะนำ MRTG
- ขั้นตอนการทำ MRTG
- การกำหนดค่า Configuration ใน Configuraation File ของ MRTG
- การประยุกต์ใช้งาน
> การดูกราฟ CPU Load หรือ OID อื่น ๆ
> การดูกราฟ extTable
> SNMP
- OIDs และ MIB
- ตำแหน่งและการดูข้อมูลใน Linux MIBs
>
- SNMP Utilities Command
Multi Router Traffic Grapher: MRTG
MRTG
MRTG เป็นเครื่องมือที่ใช้ในการมอนิเตอร์ Traffic บน network link และยังสามารถดูค่าตัวแปรของ SNMP ใด ๆ ก็ได้ตามต้องการ รวมทั้งสามารถใช้โปรแกรมภายนอกในการดูค่าที่ต้องการผ่านทาง MRTG
MRTG ประกอบด้วย Perl Script ซึ่งใช้ SNMP ในการอ่านค่า Traffic ของอุปกรณ์และใช้ภาษาซีในการบันทึกข้อมูล Traffic และพลอตกราฟ
SNMP
SNMP หรือ Simple Network Management Protocol เป็นโปรโตคอลที่ใช้ในการจัดการอุปกรณ์เครือข่าย โดย SNMP ทำให้ผู้ดูแลระบบเครือข่ายสามารถบริหารจัดการประสิทธิภาพการใช้งานเครือข่ายได้ง่ายขึ้น
ส่วนประกอบหลัก ๆ ที่จะกล่าวถึงในที่นี้คือ MIB Object และ MIB
Managed Object หรือ MIB Object หมายถึง Characteristic บางอย่างที่สามารถจัดการได
้
MIB เป็นที่รวบรวมของ Object ซึ่งจัดเรียงแบบลำดับขั้นในรูปของ Tree และอ้างถึงโดยใช้ Object ID หรือ OID ตัวอย่าง OID Structure แสดงดังรูปต่อไปน
ี้
การใช้ SNMP Utilities Command โดยต้องติดตั้ง net-snmp-utils คำสั่งที่นิยมใช้งานก็คือ snmpwalk
การหาว่า Fedora Linux MIB อยู่ที่ใดใช้คำสั่ง locate และกรองเฉพาะที่มีคำว่า snmp ดังตัวอย่าง
[root@bigboy tmp]# locate mib | grep snmp
/usr/share/doc/net-snmp-5.0.6/README.mib2c
/usr/share/snmp/mibs
/usr/share/snmp/mibs/DISMAN-SCHEDULE-MIB.txt
...
...
[root@bigboy tmp]#
โดยปกตินั้น MIBs จะ Track ข้อมูลอยู่ 2 ชนิด ก็คือ
- Counter ข้อมูลที่มีค่าเพิ่มขึ้นตาามเวลา เช่น จำนวนแพ็คเกตที่ผ่านการ์ดแลน
- Integer ข้อมูลที่มีค่าเปลี่ยนแปลงงทีละค่า เช่น หน่วยความจำที่ถูกใช้งานในปัจจุบัน
ทดลอง พิมพ์คำสั่ง locate mib | grep snmp จากนั้นดูในไฟล์ /usr/share/snmp/mibs/ucd-snmp-mib.txt ดู object, ชนิดของข้อมูล, description เช่น ssCpuRawUser
การทดสอบค่า MIB
เมื่อเราทราบค่า MIB ที่เราสนใจแล้วหลังจากนั้นใช้คำสั่ง snmpwalk เพื่อดึงค่าดังกล่าว
ทดลอง พิมพ์คำสั่ง snmpget -v1 -c public localhost ssCpuRawUser สังเกตผล และเปรียบเทียบกับผลลัพธ์ที่ได้จากการใช้คำสั่ง snmpwalk -v1 -c public localhost ssCpuRawUser
ข้อควรจำคือ ค่า OID จะอยู่ปลายสุดของ Branch หรือใบนั่นเอง ถ้าเปรียบเทียบ OID กับโครงสร้างของไดเรกทอรีในฮาร์ดดิสก์แล้ว แต่ละ Branch ก็เปรียบเสมือนไดเรกทอรีย่อยและค่าที่ปลายของ Branch หรือใบก็เปรียบเสมือนไฟล์ที่เก็บข้อมูลเอาไว้
ความแตกต่างระหว่างคำศัพท์ของ MIB และ MRTG
สิ่งสำคัญที่ต้องจดจำคือ MRTG จะอ้างถึงค่าชนิดข้อมูลแบบ counter เป็นแบบ counter แต่จะอ้างข้อมูลชนิด integer และชนิด gauge เป็น gauge โดย default แล้ว MRTG จะมองค่าทุกค่าเป็นชนิด counter
ตัวอย่าง Objects ที่สำคัญใน UCD-SNMP-MIB MIB
UCD-SNMP-MIB
Object Variable
MIB
Type
MRTG
Type
Description
ssCpuRawUser
Counter
Counter
Total CPU usage by applications run by nonprivileged users since the system booted.
Adding the user, system, and nice values can give a good approximation of total CPU usage..
ssCpuRawSystem
Counter
Counter
Total CPU usage by applications run by privileged system processes since the system booted.
ssCpuRawNice
Counter
Counter
Total CPU usage by applications running at a nondefault priority level.
ssCpuRawIdle
Counter
Counter
The percentage of the time the CPU is running idle.
Subtracting this value from 100 can give a good approximation of total CPU usage.
memAvailReal
Integer
Gauge
Available Physical Memory Space On The Host
หมายเหตุ ชี้ให้ความสำคัญของเนื้อหาในส่วนนี้
ขั้นตอนการสร้างกราฟ MRTG
1. การสร้าง Configuration File โดยมี Script ที่ช่วยในการสร้าง Configuration File โดยการเรียกคำสั่ง cfgmaker ซึ่งมีรูปแบบของคำสั่งดังนี้คือ
cfgmaker [options] [community@]router [[options] [community@]router ...]
2. การรัน MRTG โดยโปรแกรม MRTG จะใช้ Configuration File ที่สร้างขึ้น เพื่อจะได้ทราบถึงชนิดของข้อมูลที่จะบันทึกในไดเรกทอรีสำหรับจัดเก็บข้อมูลของมัน ซึ่งในการรัน 2 ครั้งแรก จะมีข้อความฟ้องเกี่ยวกับ Log File เมื่อพอใจกับผลลัพธ์ที่ได้จะทำการเพิ่มบรรทัดใน crontab ให้มีการรัน MRTG ทุกช่วงเวลาที่กำหนด โดยปกติคือทุก 5 นาที
3. การสร้าง Index File ด้วยคำสั่ง indexmaker โดย MRTG จะสร้างเว็บเพจดังนี้คือ
1) Summary View จะแสดงเฉพาะข้อมูลรายวันเท่านั้น
2) Detailed View ซึ่งจะประกอบด้วยกราฟดังต่อไปนี้คือ
? Daily Graph แสดงข้อมูลเฉลี่ย 5 นาทีโดยมีข้อมูลที่นำเสนอในกราฟประมาณ 33 ชั่วโมง
? Weekly Graph แสดงข้อมูลเฉลี่ย 30 นาทีโดยมีข้อมูลที่นำเสนอในกราฟประมาณ 8 วัน
? Monthly Graph แสดงข้อมูลเฉลี่ย 2 ชั่วโมงโดยมีข้อมูลที่นำเสนอในกราฟประมาณ 5 สัปดาห์
? Yearly Graph แสดงข้อมูลเฉลี่ย 1 วันโดยมีข้อมูลที่นำเสนอในกราฟประมาณ 1 ปี
พารามิเตอร์บางตัวใน Configuration File จะเป็นการกำหนดค่าในหน้า Summary View ส่วนบางตัวจะเป็นการกำหนดค่าในหน้า Detailed View
การกำหนดค่า Configuration ใน Configuration File ของ MRTG
คำสั่ง cfgmaker จะสร้าง Configuration File สำหรับการ์ดแลน โดยแสดงข้อมูล 2 ค่า (2 OID) ได้แก่ ข้อมูลอินพุตและข้อมูลเอาท์พุตของการ์ดแลน เมื่อเราต้องการมอนิเตอร์ OID ค่าอื่น ๆ เราต้องสร้าง Configuration File ด้วยตัวเอง
รูปแบบของพารามิเตอร์
โดยปกติแล้วพารามิเตอร์ของ MRTG จะตามด้วยชื่อกราฟซึ่งล้อมรอบด้วยเครื่องหมาย "[]" และเครื่องหมาย ":" ดังนี้คือ
Parameter[graph name]: value
พารามิเตอร์ Legend
LegendI ใช้อธิบายถึง OID ตัวแรก
LegendO ใช้อธิบายถึง OID ตัวที่ 2
Legend1 ใช้อธิบายเพิ่มเติมของ legendI จะแสดงอยู่ด้านล่างของเว็บเพจ
Legend2 ใช้อธิบายเพิ่มเติมของ legendO จะแสดงอยู่ด้านล่างของเว็บเพจ
YLegend ใช้อธิบายค่าในแนวแกน Y ที่เราต้องการเปรียบเทียบ
ตัวอย่างการใช้พารามิเตอร์ Legend มีดังนี้คือ
YLegend[graph1]: Bits per second
Legend1[graph1]: Incoming Traffic in Bits per Second
Legend2[graph1]: Outgoing Traffic in Bits per Second
LegendI[graph1]: In
LegendO[graph1]: Out
พารามิเตอร์ Options เป็นพารามิเตอร์ที่ใช้ในการจัดรูปแบบของกราฟ โดยจะมี options ดังต่อไปนี้
growright เป็นการกำหนดให้ค่าที่ด้านขวาสุดของกราฟเป็นค่าล่าสุด ปกติแล้ว MRTG จะกำหนดค่า default เป็นรูปแบบที่ตรงกันข้าม โดยค่าจะเพิ่มไปทางด้านซ้าย
nopercent เป็นการกำหนดไม่ให้ MRTG พิมพ์ข้อมูลในรูป percent ที่ด้านล่างของกราฟ gauge เป็นการบอกให้ MRTG ทราบว่าข้อมูลดังกล่าวเป็นข้อมูลชนิด gauge
bits เป็นการแปลงข้อมูลจากไบต์เป็นบิต
ตัวอย่างการใช้พารามิเตอร์ Options มีดังนี้คือ
options[graph1]: growright,nopercent,perminute
พารามิเตอร์ Title
Title เป็นการกำหนดหัวข้อในหน้า Summary View
PageTop เป็นการกำหนดหัวข้อในหน้า Detailed View
ตัวอย่างการใช้พารามิเตอร์ Title มีดังนี้คือ
Title[graph1]: Interface eth0
PageTop[graph1]: Detailed Statistics For Interface eth0
พารามิเตอร์การปรับสเกล
MaxBytes เป็นการกำหนดค่าสูงสุดของข้อมูลที่ MRTG จะพลอตในกราฟหนึ่ง ๆ MRTG จะพยายามปรับกราฟเพื่อให้ค่าสูงสุดของกราฟอยู่ด้านบนสุดของกราฟอยู่เสมอแม้ว่าจะเซ็ตค่า MaxBytes แล้วก็ตาม
Unscaled เป็นการเซ็ตให้ MRTG ปิดการทำงานการปรับสเกลแบบอัตโนมัติ (Auto Scaling)
ตัวอย่างการใช้พารามิเตอร์การปรับสเกลมีดังนี้คือ
Unscaled[graph1]: ymwd
MaxBytes[graph1]: 100
พารามิเตอร์ Target
โดยปกติแล้ว MRTG จะพยายามเปรียบเทียบ MIB OID 2 ค่าซึ่งระบุอยู่ที่พารามิเตอร์ Target โดย OID ทั้ง 2 ค่านั้นจะถูกคั่นด้วยเครื่องหมาย "&" ดังแสดงในตัวอย่างข้างล่างนี้
Target[graph1]: mib-object-1.0&mib-object-2.0:@
ตัวเลข ".0" จำเป็นต้องกำหนดที่ตอนท้ายของ OID ด้วย ค่านี้เราจะทราบจากการใช้คำสั่ง SNMP ดังแสดงในตัวอย่างข้างล่างนี้ ซึ่ง ".0" ถูกใส่ต่อท้าย OID
[root@silent mibs]#snmpwalk -v 1 -c craz33guy localhost ssCpuRawUser
UCD-SNMP-MIB::ssCpuRawUser.0 = Counter32: 926739
[root@silent mibs]#
การพลอตค่า OID เพียงค่าเดียวในกราฟ ทำได้ดังนี้คือระบุ OID ซ้ำในพารามิเตอร์ Target ดังตัวอย่าง
Target[graph1]: mib-object-1.0&mib-object-1.0:@
การพลอตกราฟจากการนำค่า OID มาบวกกัน ทำได้โดยการระบุที่พารามิเตอร์ Target เช่นเดียวกัน
Target[graph1]: mib-object-1.0&mib-object-2.0:@ + mib-object-3.0&mib-object-4.0:@
ทดลอง สร้างกราฟ MRTG ของ CPU Load, memory อธิบาย Configuration File ประกอบ
ทดลอง สร้างกราฟ MRTG ของ Connection อธิบาย Configuration File ประกอบ
Reference
1. Quick HOWTO: Monitoring Server Performance
2. Quick HOWTO: Advanced MRTG For Linux
3. http://www.cisco.com. Task3-Using MRTG to Monitor and Graph Traffic Loads
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\-----========XXXX========-----//////////////////////////////////////////////////
ขั้นตอนการติดตั้งและประยุกต์ใช้งาน mrtg
1. ก่อนอื่นจะต้องติดตั้ง net-snmp เพื่อให้สามารถติดต่อผ่าน SNMP บนอุปกรณ์เครือข่ายได้
2. ติดตั้ง mrtg ด้วยคำสั่ง apt-get install mrtg
โดย home directory ของ mrtg อยู่ที่ /var/www/mrtg ส่วนคำแนะนำการใช้ mrtg อยู่ที่ /var/www/mrtg/index.html
3. แก้ไขแฟ้ม /etc/httpd/conf.d/mrtg.conf เพื่ออนุญาตให้ทุก network สามารถเข้ามาอ่านข้อมูลได้ ดังตัวอย่าง
Order deny,allow
Deny from all
Allow from all
Allow from 127.0.0.1
4. ตั้งค่า locale ไม่ให้เป็น utf-8 ด้วยคำสั่ง
export LANG=en_US
5. สร้าง directory สำหรับเก็บข้อมูลแสดงผล ซึ่งในที่นี้คือ myhost
mkdir /var/www/mrtg/myhost
6. ทดสอบดึงค่าที่เราสนใจโดยใช้คำสั่ง snmpwalk ดังตัวอย่าง
snmpwalk -v1 -c public netserv.cc.psu.ac.th ssCpuRawUser
จากนั้นทดสอบดึงค่าอื่น โดยการเปลี่ยนจาก ssCpuRawUser เป็น ssCpuRawSystem, ssCpuRawNice, memAvailSwap และ memTotalSwap ซึ่งแต่ละ object ควรจะคืนค่ากลับมาด้วย
7. สร้าง Configuration File โดยอาจใช้คำสั่ง cfgmaker ช่วย และปรับแก้ภายหลัง
cfgmaker -global "options[_]:bits,growright" --global "workdir: /var/www/mrtg/myhost" public@netserv.cc.psu.ac.th > /etc/mrtg/mrtg-myhost.cfg
ตัวอย่างไฟล์อยู่ที่ http://host.psu.ac.th/~tipaporn.p/mrtg-myhost.cfg
Configuration ในไฟล์มีดังนี้
EnableIPv6: no
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
workdir:/var/www/mrtg/myhost
### Netserv CPU Load : System, User and Nice Processes ###
Target[netserv.cc.psu.ac.th_1]: ssCpuRawUser.0&ssCpuRawUser.0:public@netserv.cc.psu.ac.th + ssCpuRawSystem.0&ssCpuRawSystem.0:public@netserv.cc.psu.ac.th + ssCpuRawNice.0&ssCpuRawNice.0:public@netserv.cc.psu.ac.th
MaxBytes[netserv.cc.psu.ac.th_1]: 100
Title[netserv.cc.psu.ac.th_1]: CPU Load of Netserv
PageTop[netserv.cc.psu.ac.th_1]: CPU Load of Netserv - System, User and Nice Processes
ShortLegend[netserv.cc.psu.ac.th_1]: %
YLegend[netserv.cc.psu.ac.th_1]: CPU Utilization
Legend1[netserv.cc.psu.ac.th_1]: Current CPU percentage load
LegendI[netserv.cc.psu.ac.th_1]: Used
LegendO[netserv.cc.psu.ac.th_1]:
Options[netserv.cc.psu.ac.th_1]: growright,nopercent
Unscaled[netserv.cc.psu.ac.th_1]: ymwd
#############################################
### Netserv Available Swap VS. Total Swap Memory ###
Target[netserv.cc.psu.ac.th_2]: memAvailSwap.0&memTotalSwap.0:public@netserv.cc.psu.ac.th
MaxBytes[netserv.cc.psu.ac.th_2]: 100000000000
Title[netserv.cc.psu.ac.th_2]: Available Swap VS. Total Swap Memory of Netserv
PageTop[netserv.cc.psu.ac.th_2]: Available Swap Memory of netserv
ShortLegend[netserv.cc.psu.ac.th_2]: B
YLegend[netserv.cc.psu.ac.th_2]: Bytes
Legend1[netserv.cc.psu.ac.th_2]: Available swap memory in bytes
Legend2[netserv.cc.psu.ac.th_2]: Total swap memory in bytes
LegendI[netserv.cc.psu.ac.th_2]: Free
LegendO[netserv.cc.psu.ac.th_2]: Total
Options[netserv.cc.psu.ac.th_2]: growright,gauge,nopercent
#############################################
8. ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง
mrtg /etc/mrtg/mrtg-myhost.cfg
รันคำสั่งนี้อีก 2 ครั้ง หลังจากนั้นสังเกตผล อาจดูว่ามีค่าบันทึกใน log file หรือไม่ที่ /var/www/mrtg/myhost/ชื่อไฟล์.log
9. สร้าง index.html สำหรับ homepage mrtg ด้วยคำสั่ง
indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/mrtg-myhost.cfg
10. ตั้งค่าให้ mrtg ทำการบันทึกค่าทุก ๆ 5 นาที ด้วยการสร้างแฟ้ม /etc/cron.d/mrtg-myhost ให้มีข้อความว่า
0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg-myhost.cfg
11. สั่งให้ cron ทำงานใหม่ด้วยคำสั่ง
/etc/init.d/crond reload
Reloading cron daemon configuration: [ OK ]
12. ทดสอบผลงานเรียกดูข้อมูลตัวอย่างได้ที่ http://localhost/mrtg/myhost
13. สรุปผลจาก Configuration ประกอบกราฟที่ได้
14. เปิดดูไฟล์ /etc/snmp/snmpd.conf ดูว่าคำสั่งในส่วนของ Executables/scripts ถูก comment เอาไว้หรือไม่ ถ้าใช่ให้ uncomment แล้วให้ระบบอ่านค่าที่ปรับใหม่ด้วยคำสั่ง
/etc/init.d/snmpd reload
Reloading snmpd: [OK]
จากนั้นอธิบายถึง extTable
15. ทดสอบเรียก snmpwalk -v1 -c public localhost extTable
16. เพิ่มคำสั่งในส่วนของ Executables/scripts ในไฟล์ /etc/snmp/snmpd.conf ด้วยคำสั่ง
exec echofriend /bin/echo Dear honey
17. ทดสอบเรียก snmpwalk -v1 -c public localhost extTable อีกครั้ง สังเกตผลลัพธ์ที่ได้
18. ในที่นี้จะแสดงการใช้ Shell Script เพื่อแสดงจำนวน Connection ของเครื่อง โดยการสร้างไฟล์ชื่อ conncheck.sh ซึ่งมีข้อมูลอยู่ภายในดังนี้
#!/bin/sh
# Filename: /root/conncheck.sh
if [ -f $1 ]; then
cat $1 | grep 'ip_conntrack ' | awk '{print $2}'
exit 0
fi
exit 1
จากนั้นเปลี่ยน permission ของไฟล์ให้เป็น Executable ด้วยคำสั่ง chmod +x conncheck.sh
19. แก้ไขไฟล์ /ect/snmp/snmpd.conf เพื่อให้รัน Shell Script ที่สร้างขึ้นแทน ด้วยการเพิ่มคำสั่ง
exec conncheck /root/conncheck.sh /proc/slabinfo
จากนั้นให้ระบบอ่านค่าที่ปรับใหม่ด้วยคำสั่ง
/etc/init.d/snmpd reload
20. หากค่าที่ได้จากรัน script ไม่ใช่ integer หรือ counter สำหรับพลอตกราฟ mrtg จะต้องทำแปลงค่าก่อน โดยใช้ keyword: ConversionCode เพื่อระบุ path ของไฟล์ที่ใช้ในการแปลงข้อมูล โดยเพิ่มบรรทัดนี้ในไฟล์ /etc/mrtg/mrtg-myhost.cfg ดังนี้คือ
ConversionCode: /etc/mrtg/MyConversions.pl
และในส่วนของ Target ที่ใช้ระบุ output ของโปรแกรมคือ .1.3.6.1.4.1.2021.8.1.101.1 เช่น
Target[myhost]:.1.3.6.1.4.1.2021.8.1.101.1&.1.3.6.1.4.1.2021.8.1.101.1:public@ipAddress|Str2Int
MaxBytes[myhost]: 250000
Title[myhost]: The number of connections of myhost
PageTop[myhost]: Connections of myhost
ShortLegend[myhost]: conns
YLegend[myhost]:Connections
LegendI[myhost]:Total
LegendO[myhost]:
Legend1[myhost]:Connections of myhost(ip_conntrack)
Options[myhost]: growright,gauge,nopercent
21. สร้างไฟล์ /etc/mrtg/MyConversioncode.pl ซึ่งมีคำสั่งดังนี้
sub Str2Int{
my $value = shift;
return int($value);
}
22. รันคำสั่ง mrtg /etc/mrtg/mrtg-myhost.cfg
23. รันคำสั่ง indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/mrtg-myhost.cfg
24. ทดสอบผลงานเรียกดูข้อมูลตัวอย่างได้ที่ http://localhost/mrtg/myhost