Difference between revisions of "Network monitoring"
Line 222: | Line 222: | ||
echo trim($output); | echo trim($output); | ||
?> | ?> | ||
+ | </source> | ||
+ | |||
+ | run script บน shell | ||
+ | <source lang="bash"> | ||
+ | root@ubuntu:~# cd /usr/share/cacti/site/scripts/ | ||
+ | root@ubuntu:/usr/share/cacti/site/scripts# php winCpuLoad.php [ip] [community string] | ||
+ | cpu0:5 cpu1:5 cpu2:7 cpu3:6root@ubuntu:/usr/share/cacti/site/scripts# | ||
</source> | </source> |
Revision as of 07:53, 8 June 2016
SNMP
- เป็น protocol มาตรฐานบนอุปกรณ์เครือข่ายที่ใช้บริหารจัดการอุปกรณ์เช่นการอ่านค่าต่าง ๆ จากอุปกรณ์หรือส่งคำสั่งเพื่อเปลี่ยนแปลงค่าต่าง ๆ ของอุปกรณ์
- โดยมี Network Management System(NMS) ติดตั้งซอฟท์แวร์สำหรับการจัดการ โดยติดต่อไปที่ SNMP agent ที่อยู่บนอุปกรณ์ที่เป็น Managed Device เช่น Router, Switch, Server host เป็นต้น
- SNMP Agent จะเปิดให้บริการที่ UDP Port 161
- การเข้าถึงข้อมูลต่าง ๆ บน SNMP Agent จะอ้างอิงผ่าน Object identifier(OID) หรือ Management Information Base(MIB) ซึ่งข้อมูลค่าต่าง ๆ จะถูกเก็บไว้เป็นโครงสร้าง tree และมี index เชื่อมกันในแต่ละกิ่งของข้อมูล
snmpd
- snmpd เป็น service ที่เป็น snmp agent บน Linux host (ในที่นี้ใช้ Ubuntu 14.04.4) ติดตั้งโดยใช้คำสั่ง
apt-get install snmp snmpd snmp-mibs-downloader
- แก้ไขไฟล์ /etc/snmp/snmpd.conf เพื่อกำหนดค่า community string และเปิดให้ remote NMS สามารถดึงข้อมูลได้
#agentAddress udp:127.0.0.1:161
agentAddress udp:161
rocommunity [community string] default
- restart snmpd
service snmpd restart
การดึงข้อมูลจาก SNMP
- snmpget
ดึงข้อมูลจาก snmp agent ผ่าน OID หรือ MIB
รูปแบบคำสั่งเป็น snmpget [OPTIONS] AGENT OID [OID] …
โดยมี options ที่สำคัญคือ
-v : เวอร์ชั่นของ snmp {1, 2c, 3}
-c : community string
-On : แสดง OID เป็นตัวเลขแทน MIB
snmpget -v 2c -c [community string] [agent ip] sysName.0
SNMPv2-MIB::sysName.0 = STRING: ubuntu
snmpget -v 2c -c [community string] -On [agent ip] sysName.0
.1.3.6.1.2.1.1.5.0 = STRING: ubuntu
- snmpgetnext
ดึงข้อมูลแรกถัดจาก OID ที่ระบุ
snmpgetnext -v 2c -c [community string] [agent ip] .
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64
snmpget -v 2c -c [community string] -On [agent ip] .
.1.3.6.1.2.1.1.1.0 = STRING: Linux ubuntu 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64
- snmpwalk
ดึงข้อมูลทั้งหมดถัดจาก OID ที่ระบุ
snmpwalk -v 2c -c qwerty localhost interface
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 65536
IF-MIB::ifMtu.2 = INTEGER: 1500
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 1000000000
IF-MIB::ifPhysAddress.1 = STRING:
IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:34:e1:8f
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
IF-MIB::ifAdminStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifLastChange.1 = Timeticks: (0) 0:00:00.00
- GUI snmp client
http://www.ireasoning.com Free MIB Browser
cacti
เป็นระบบ monitoring ที่ใช้ rrdtool เก็บข้อมูลและทำกราฟทำให้ทำงานได้เร็ว มี template หลากหลาย ดึงข้อมูลแบบปรับแต่งเองได้หลากหลาย มี plugins ให้ใช้งานและจัดการผู้ใช้ได้ http://cacti.net
ติดตั้ง cacti
apt-get install cacti
ให้ตั้งรหัสผ่านของ mysql root user
เลือก apache2 เป็น http server
ระบุรหัสผ่านของ mysql root
ตั้งค่ารหัสผ่านของ mysql cacti user
จากนั้นเรียก cacti ผ่าน browser http://[ip or hostname]/cacti และทำตามขั้นตอน ใช้ username และ password เริ่มต้นเป็น admin และตั้งค่ารหัสผ่านใหม่
เพิ่มอุปกรณ์ประเภท switch
เพิ่มอุปกรณ์
- คลิก Add
- ระบุข้อมูล SNMP ของอุปกรณ์ปลายทาง
สร้างกราฟ
- คลิก Create Graphs for this host
- เลือก 64bits counter สำหรับ Gigabits Interface
สร้าง graph tree
- คลิก Graph Trees แล้วคลิก Add
- ระบุรายละเอียด tree แล้วคลิก Create
เพิ่มอุปกรณ์ลงใน tree
- เลือกอุปกรณ์ที่จะเพิ่มลง tree แล้วเลือก Place on a Tree(ชื่อ tree) แล้วคลิก Go
- เลือกที่อยู่ใน tree แล้วคลิก Continue
ดูกราฟ
เพิ่มอุปกรณ์ประเภท Linux host
เพิ่มอุปกรณ์
- คลิก Add
- ระบุข้อมูล SNMP ของอุปกรณ์ปลายทาง
สร้างกราฟ
- คลิก Create Graphs for this host
- เลือกสร้างกราฟที่ต้องการ
สร้าง graph tree
- คลิก Graph Trees แล้วคลิก Add
- ระบุรายละเอียด tree แล้วคลิก Create
เพิ่มอุปกรณ์ลงใน tree
- เลือกอุปกรณ์ที่จะเพิ่มลง tree แล้วเลือก Place on a Tree(ชื่อ tree) แล้วคลิก Go
- เลือกที่อยู่ใน tree แล้วคลิก Continue
ดูกราฟ
เพิ่มอุปกรณ์ประเภท Windows
เปิด SNMP service บน Windows
- ยกตัวอย่าง Windows 10 ไปที่ Control Panel > Programs > Programs and Features > Turn Windows feature on or off แล้วเลือก SNMP
- เปิด Computer Management คลิกขวาที่ SNMP Service เลือก Properties
- ที่ tab Agent ระบุข้อมูล
- ที่ tab Security ระบุ Community string และ ip address ของ NMS แล้ว restart Service SNMP
- เปิด Windows Firewall ให้ ip address ของ NMS เข้ามาดึงข้อมูลจาก SNMP service ได้
เพิ่มอุปกรณ์
- คลิก Add
- ระบุข้อมูล SNMP ของอุปกรณ์ปลายทาง
สร้างกราฟ
- คลิก Create Graphs for this host
- เลือกสร้างกราฟที่ต้องการ
สร้าง graph tree
- คลิก Graph Trees แล้วคลิก Add
- ระบุรายละเอียด tree แล้วคลิก Create
เพิ่มอุปกรณ์ลงใน tree
- เลือกอุปกรณ์ที่จะเพิ่มลง tree แล้วเลือก Place on a Tree(ชื่อ tree) แล้วคลิก Go
- เลือกที่อยู่ใน tree แล้วคลิก Continue
ดูกราฟ
Custom data input and template
เนื่องจาก template ที่ให้มาไม่ครอบคลุม และมีอุปกรณ์เฉพาะที่ต้องการ monitor นอกจาก switch หรือ server เป็นจำนวนผู้ใช้งาน wireless เป็นต้น
สร้าง script สำหรับดึงข้อมูล
script จะเป็นภาษาอะไรก็ได้เช่น php , bash , python โดยใน script ใช้ library ของตนในการดึกข้อมูลจากอะไรก็ได้เช่น SNMP , ssh , REST API(HTTP) เป็นต้น
โดยที่ output จากการ run script บน linux shell จะต้องออกมาในรูปแบบที่ถูกต้องคือ
fieldName1:value1 fieldName2:value2 fieldName3:value3 ...
โดยจะมีข้อมูลกี่ field ก็ได้คั่นด้วยช่องว่าง จำนวน field ของ script output จะมีผลต่อการการสร้าง template ในการเก็บข้อมูลของ cacti
ตัวอย่าง script ดึงข้อมูลจำนวนผู้ใช้งาน wireless จาก cisco controller แยกตาม ssid
<?php
$controller = $argv[1];
$community_string = $argv[2];
$snmp = snmp2_walk($controller,$community_string,'1.3.6.1.4.1.14179.2.1.4.1.7'); // bsnMobileStationSsid
$result = array_count_values($snmp);
$JumboPlus = isset($result['STRING: @JumboPlus'])?$result['STRING: @JumboPlus']:0;
$TOTWiFi = isset($result['STRING: @TOT_Wi-Fi'])?$result['STRING: @TOT_Wi-Fi']:0;
$AISWiFi = isset($result['STRING: @ AISwifi'])?$result['STRING: @ AISwifi']:0;
$TRUEWiFi = isset($result['STRING: .@ TRUEWIFI'])?$result['STRING: .@ TRUEWIFI']:0;
$eduroam = isset($result['STRING: eduroam'])?$result['STRING: eduroam']:0;
echo trim("jumboplus:$JumboPlus tot:$TOTWiFi ais:$AISWiFi true:$TRUEWiFi eduroam:$eduroam");
?>
run script บน shell จะได้ output
supawit@cacti:/usr/share/cacti/site/scripts$ php cisco_user_count_per_ssid_poller_tot.php [controller ip address] [community string]
jumboplus:8954 tot:101 ais:1250 true:269 eduroam:22supawit@cacti:/usr/share/cacti/site/scripts$
สร้าง script ดึงข้อมูล CPU Load ของ windows
สร้างไฟล์ /usr/share/cacti/site/scripts/winCpuLoad.php
<?php
$host = $argv[1];
$community = $argv[2];
$result = snmpwalk($host,$community,'hrProcessorLoad');
$result = str_replace('INTEGER: ',"",$result);
$output = "";
foreach($result as $index => $value)
{
$output .= "cpu$index:$value ";
}
echo trim($output);
?>
run script บน shell
root@ubuntu:~# cd /usr/share/cacti/site/scripts/
root@ubuntu:/usr/share/cacti/site/scripts# php winCpuLoad.php [ip] [community string]
cpu0:5 cpu1:5 cpu2:7 cpu3:6root@ubuntu:/usr/share/cacti/site/scripts#