การทำระบบ Web Traffic Monitor โดยใช้ Open source software : CATCI
บทความนี้เหมาะสำหรับผู้ที่มีความรู้พื้นฐานทางด้าน Computer Network หรือเคยใช้งาน Mikrotik router มาบ้างเล็กน้อย เพราะรายละเอียดบางอย่าง ทางผู้เขียนไม่ได้อธิบายถึงเนื้อหาพื้นฐานต่างๆไว้
การนำอุปกรณ์ Network devices มาเชื่อมต่อกันให้เป็นระบบเครือข่ายขึ้นมาเพื่อใช้งานตามวัตถุประสงค์ได้แล้วนั้น อีกหนึ่งความสำคัญที่ขาดไม่ได้นั่นคือ การดูแลรักษาระบบเครือข่ายให้พร้อมใช้งานได้ปกติ ตลอดเวลา หรือ ให้เกิด Down time น้อยที่สุด หากเกิดปัญหา เราสามารถที่จะมีข้อมูลต่างๆ ไม่ว่าจะเป็น Traffic การใช้งานระบบ Network ในช่วงเวลานั้นๆ เพื่อจะใช้การในวิเคราะห์ปัญหาและแก้ไขให้ได้เร็วที่สุด
ดังนั้น เราจำเป็นที่จะต้องมีระบบที่ใช้เฝ้าดู ตรวจสอบการใช้งาน Traffic ผ่านอุปกรณ์ Network devices ต่างๆได้ ซึ่งในปัจจุบันมี Software ให้เลือกใช้มากมาย มีทั้งเสียค่าใช้จ่าย และมีทั้งแบบไม่เสียค่าใช้จ่าย คือ Opensource Softwares ต่างๆ เช่น ZABBIX=อ่านวิธีการติดตั้งและใช้งานเบื้องต้นได้จากบทความของผู้เขียนเองได้ที่ลิงค์นี้ https://medium.com/@akenetjpk/02f41db83c34 , MRTG , NAGIOS หรืออื่นๆ ซึ่งบทความนี้ ทางผู้เขียนจะมาแนะนำวิธีการใช้งาน Open source software ที่ชื่อว่า “ CACTI “
โปรแกรม CACTI ในบทความนี้ ทางผู้เขียนจะติดตั้งบนระบบปฎิบัติการ Linux Ubuntu Server 22.04 และจำเป็นที่จะต้องติดตั้งโปรแกรมอื่นๆลงไปด้วย ดังนั้นก่อนที่จะติดตั้งโปรแกรม CACTI ให้ทำการติดตั้งโปรแกรมต่าง ตามขั้นตอนดังต่อไปนี้ โดยเราจะติดตั้งโปรแกรมที่จำเป็นทั้งหมดลงในเครื่อง CACTI Server ตามรูป Network Diagram ด้านบน
1.ขั้นตอนการติดตั้ง Ubuntu Server
2.ขั้นตอนการติดตั้ง Apache Webserver
3.ขั้นตอนการติดตั้ง MySQL Server
4.ขั้นตอนการติดตั้ง PHP และ extension
ในบทความนี้ ในลำดับขั้นตอนข้อ 1–4 นั้น ทางผู้เขียนจะขออ้างจากบทความเดิมของทางผู้เขียนเอง ท่านผู้อ่านสามารถอ่าน วิธีติดตั้งข้อ 1–4 ได้ในบทความนี้ -> https://medium.com/@akenetjpk/02f41db83c34
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
5. การติดตั้งโปรแกรม CACTI
Login เข้า Ubuntu Server จากนั้นทำการเปลี่ยน Work path โดยพิมพ์คำสั่ง cd /var/www/html แล้วกด Enter
ทำการติดตั้งโปรแกรม git โดยพิมพ์คำสั่ง apt-get install git แล้วกด enter จากนั้นกด y แล้วกด enter ตามรูปด้านบน
ทำการพิมพ์คำสั่ง git clone -b 1.2.x https://github.com/Cacti/cacti.git จากนั้นกด Enter ตามรูปด้านบน
เราจะได้ไฟล์โปรแกรม CACTI เข้ามาในเครื่อง Ubuntu Server โดยพิมพ์คำสั่ง ls จะเห็น directory cacti เพิ่มเข้ามาตามรูปด้านบน
ทำการ Login เข้าโปรแกรม MySQL ที่อยู่ใน Ubuntu Server โดยพิมพ์คำสั่ง mysql -u root -p จากนั้นกรอก password ลงไป ( Password ที่ได้จากการติดตั้ง MySQL ในครั้งแรก ในขั้นตอน 3.ขั้นตอนการติดตั้ง MySQL Server ) แล้วกด Enter ตามรูปด้านบน
จากนั้นพิมพ์คำสั่ง
CREATE DATABASE cacti DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
ALTER DATABASE cacti CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
FLUSH PRIVILEGES;
เมื่อใส่ไปครบ 3 คำสั่งด้านบนแล้วให้พิมพ์ exit แล้วกด enter เพื่อออกจากโปรแกรม MySQL
จากนั้นให้พิมพ์คำสั่ง mysql -u root -p cacti < /var/www/html/cacti/cacti.sql แล้วกด Enter จากนั้นให้ใส่ password ของ MySQL ลงไป ( Password ที่ได้จากการติดตั้ง MySQL ในครั้งแรก ในขั้นตอน 3.ขั้นตอนการติดตั้ง MySQL Server )
จากนั้นทำการเปลี่ยน Path ไปที่ /var/www/html/cacti/include แต่เนื่องจากเราอยู่ใน path : /var/www/html แล้วให้พิมพ์ cd cacti/include ได้เลย จากนั้นกด Enter จากนั้นพิมพ์คำสั่ง cp config.php.dist config.php เพื่อทำการ copy file จากนั้นกด Enter ตามรูปด้านบน
จากนั้นให้พิมพ์คำสั่ง
nano config.php
เพื่อทำการแก้ไข configfile ของ cacti ตามรูปด้านบน
จากนั้นเมื่อเข้าหน้าต่างแก้ไขของโปรแกรม nano ให้กดลูกศร เพื่อเลื่อนมาแก้ไขในส่วนของ username / password ของ database จากรูปด้านบน ให้ใช้ user : root ให้ใส่ password ของ MySQL ลองไป ( Password ที่ได้จากการติดตั้ง MySQL ในครั้งแรก ในขั้นตอน 3.ขั้นตอนการติดตั้ง MySQL Server ) จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม nano
จากนั้นทำการพิมพ์คำสั่ง
contabe -e
กด Enter
เลื่อนลูกศรลงมาบรรทัดใหม่ จากนั้นใส่คำสั่ง
/5 * * * * apache php /var/www/html/cacti/poller.php &>/dev/null
ลงไป จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม crontab
ทำการสร้างไฟล์ cactid โดยพิมพ์คำสั่ง
touch /etc/default/cactid
แล้วกด Enter ตามรูปด้านบน
ทำการ copy file ไปไว้ใน path ที่ถูกต้องของโปรแกรม CACTI โดยพิมพ์คำสั่ง
cp -p /var/www/html/cacti/service/cactid.service /etc/systemd/system
จากนั้นกด Enter ตามรูปด้านบน
ทำการแก้ไขไฟล์ cactid.service โดยพิมพ์คำสั่ง
nano /etc/systemd/system/cactid.service
แล้วกด Enter ตามรูปด้านบน
ให้แก้ไขในบรรทัดดังนี้ (ตามรูปด้านบน)
User=www-data
Group=www-data
EnvironmentFile=/etc/default/cactid
จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม nano
ทำการเปลี่ยน owner ของ CACTI โดยพิมพ์คำสั่ง
chown -R www-data:www-data /var/www/html/cacti
จากนั้นกด Enter
จากนั้นทำการพิมพ์คำสั่งดังนี้ เพื่อเปิดการใช้งานและตรวจสอบการทำงานของโปรแกรม CACTI
systemctl daemon-reload
systemctl enable cactid
systemctl start cactid
systemctl status cactid
หากโปรแกรมทำงานได้ปกติจะแสดงผลตามรูปด้านบน
จากนั้นพิมพ์คำสั่ง
nano /etc/php/8.1/apache2/php.ini
แล้ว Enter แล้วทำการค้นหาบรรทัดและแก้ไขค่าเป็นดังนี้
memory_limit = 512M
ตามรูปด้านบน
และเลื่อนหาบรรทัดและแก้ไขค่า max_execution_time = 60 ตามรูปด้านบน
และเลื่อนหาบรรทัดและแก้ไขค่า
date.timezone = Asia/Bangkok
ตามรูปด้านบน จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม nano
จากนั้นพิมพ์คำสั่ง
nano /etc/php/8.1/cli/php.ini
แล้ว Enter และเลื่อนหาบรรทัดและแก้ไขค่า
date.timezone = Asia/Bangkok
ตามรูปด้านบน
จากนั้นทำการติดตั้ง extension เพิ่มเติมให้กับ php8.1 โดยพิมพ์คำสั่ง
apt-get install php8.1-snmp php8.1-gmp -y
ตามรูปด้านบน แล้วกด Enter
จากนั้นพิมพ์คำสั่ง
nano /etc/php/8.1/apache2/php.ini
เพื่อเข้าไปแก้ไขในส่วนของบรรทัดที่มีคำว่า
extension=gmp
และ
extension=snmp
โดยเอาเครื่องหมาย ; ด้านหน้าออก จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม nano ตาม 2 รูป ด้านบน
พิมพ์คำสั่ง
nano /etc/mysql/mysql.conf.d/mysqld.cnf
จากนั้นเลื่อนลงมาด้านล่างสุด ให้ใส่ค่าต่อไปนี้เข้าไป ( ตามรูปด้านบน)
collation_server = utf8mb4_unicode_ci
innodb_flush_log_at_timeout = 3
innodb_read_io_threads = 32
innodb_write_io_threads = 16
จากนั้นกด ctrl+o แล้ว enter เพื่อทำการ save จากนั้นกด ctrl+x เพื่อทำการออกจากโปรแกรม nano
จากนั้นพิมพ์คำสั่งเพื่อตั้งค่า
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
แล้วกด Enter จากนั้นให้ใส่ password ของ MySQL ลงไป ( Password ที่ได้จากการติดตั้ง MySQL ในครั้งแรก ในขั้นตอน 3.ขั้นตอนการติดตั้ง MySQL Server ) เพื่อตั้งค่าให้กับ “MySQL — TimeZone Support”
ทำการเปิด Web Browser จากนั้นพิมพ์ ip-address-server-ubuntu/cacti จากนั้นระบบจะให้กรอก username / password default คือ user : admin password : admin จากนั้นกด Login ระบบจะให้ทำการเปลี่ยน password ใหม่ ให้ตั้ง password ใหม่ได้ตามต้องการ
จากนั้นทำการเลือก theme ที่ต้องการ และกดยอมรับ Accept License จากนั้น เลื่อนลงมาด้านล่างซ้ายจะเห็นปุ่ม Begin ให้กดเข้าสู่ขั้นตอนต่อไปได้เลย
ระบบจะทำการตรวจสอบการตั้งค่าและ package ที่จำเป็นสำหรับโปรแกรม CACTI หากเรียบร้อยจะเห็นเครื่องหมาย กดLikeสีเขียว หากไม่เรียบร้อยจะเป็นเครื่องหมาย กดUnLikeสีแดง หาก warning จะเป็นเครื่องหมายสีเหลือง ตามรูปด้านบน กรณีที่ระบบแจ้ง warning เราไม่จำเป็นต้องแก้ไขก็ได้ แต่ถ้าเป็น เครื่องหมาย กดUnLikeสีแดง เราต้องทำการติดตั้ง Package ที่ระบบร้องขอให้เรียบร้อย จึงจะกด Next ต่อไปได้ จากรูปด้านบน ไม่มี เครื่องหมาย กดUnLikeสีแดง สามารถกด Next ได้เลย
จากนั้นให้กด Next ได้เลย ตามรูปด้านบน
ระบบจะทำการตรวจสอบ Permission ของ Directory ว่าตั้งค่าไว้ถูกต้องหรือไม่ จากรูปด้านบน จะเห็นเครื่องหมาย กดLikeสีเขียว แสดงว่าเรียบร้อยแล้ว ให้กด Next ได้เลย
ระบบจะสรุปการตั้งค่า Path ต่างๆ ถ้าค่าถูกต้องจะขึ้นเครื่องหมายถูกสีเขียว ให้กด Next ได้เลย ตามรูปด้านบน
จากนั้นกดเลือกที่ I have … จากนั้นกด Next ได้เลย
ทำการตั้งค่า Default Profile ตามต้องการ และในส่วนของ Default options ให้เอาเครื่องหมายถูก ในส่วนของ Scan Mode ออก จากนั้นกด Next
จากนั้นกด Next อีกครั้ง ตามรูปด้านบน
จะเข้าสู่หน้าต่างตามรูปด้านบน ให้กด Next
จากนั้นให้เลือกติ๊กเครื่องหมายถูกที่ Comfirm Installation และกด Install
ระบบจะทำการติดตั้งโปรแกรม CACTI รอจนระบบติดตั้งให้แล้วเสร็จ จะใช้เวลาซักครู่
เมื่อระบบติดตั้งโปรแกรม CACTI แล้วเสร็จจะขึ้นตามรูปด้านบน จากนั้นกดปุ่ม Get Started ได้เลย
จะเข้าสู่หน้าต่างการตั้งค่าต่างๆให้กับ CACTI ต่อไป ไม่ว่าจะเป็นการเพิ่ม Devices ของอุปกรณ์ Network ต่างๆ เพื่อให้ดึงข้อมูลมาสร้างเป็น Traffic Graphs ให้เราไว้ใช้ Monitor ได้
6. การเพิ่ม Network Devices เข้าระบบ CACTI เพื่อสร้าง Interface Traffic Graphs
บทความนี้จะยกตัวอย่างเบื้องต้น เพื่อทำการดึงค่า Interface Traffic จากอุปกรณ์ Mikrotik router โดยมีขั้นตอนคร่าวๆดังนี้
จากรูป Network Diagram ด้านบน ทางผู้เขียนจะทำการตั้งค่าให้ CACTI Server ทำการดึงค่า Interface Traffic ต่างๆ ของ Mikrotik เพื่อนำไปสร้างเป็น Traffic Graphs
จากรูป Network Diagram ทดสอบทำการ ping จาก CACTI Server ไปที่ Mikrotik router ทั้ง 2 ตัว เพื่อยืนยันว่า CACTI Server นั้นติดต่อกับอุปกรณ์ Mikrotik router ได้แล้ว เพื่อที่โปรแกรม CACTI จะได้ดึงค่า Interface Traffic ต่างๆจาก Mikrotik router ได้ผ่าน SNMP Protocol( ทำความเข้าใจกับ SNMP Protocol ได้จากบทความของผู้เขียนเองได้ที่ลิงค์นี้ https://medium.com/@akenetjpk/42d72bf53f53 )
การที่จะให้ CACTI ดึงค่า Interface ต่างๆของ Network devices มาแสดงผลได้นั้น Network devices นั้นต้องเปิดการใช้งาน SNMP Protocol ซึ่งแต่ละอุปกรณ์ แต่ละยี่ห้อ จะมีขั้นตอนในการตั้งค่าแตกต่างกันไป แต่หลักๆคือ เราต้องทำการ Enable SNMP Server version2 และ กำหนด SNMP Community และ กำหนด Policy ให้ทำการ Read only เท่านั้น ในบทความนี้ จะยกตัวอย่าง Network devices คือ Mikrotik router ซึ่งได้เชื่อมต่อถึงกันตามรูป Network diagram ด้านบน
จากรายละเอียดที่ผู้เขียนได้แนะนำวิธีติดตั้งโปรแกรม CACTI ไปข้างต้นแล้วนั้น เราจะได้เครื่อง CACTI Server ที่พร้อมใช้งานแล้ว จาก Network diagram จะเห็นว่า CACTI Server และ Mikrotik Router ทั้ง 2 ตัวนั้น เชื่อมต่อเครือข่าย internet ได้ปกติแล้ว โดยใช้ Public ip โดยตรง
ในบทความนี้จะไม่อธิบายถึงวิธีการทำ src.NAT และ dst.NAT และระบบไม่มี firewall ใดๆปิดกั้น ตามรูป network diagram ด้านบน
ซึ่ง CACTI Server จะเข้าไปดึงข้อมูลจาก Mikrotik Router โดยใช้ Public IP ได้เลยเพื่อไปหา Mikrotik Router ตัวนั้นๆ ส่วนการใช้งานจริงๆนั้น ก็ขึ้นอยู่กับผู้ดูแลระบบ ว่าจะออกแบบระบบอย่างไร ไม่ว่าจะใช้กันภายในแบบ Intranet จะมีระบบ Firewall หรือจะทำ NAT จาก Private IP เป็น Public IP อย่างไรนั้น ก็ขึ้นอยู่กับความต้องการของผู้ดูแลระบบจะคอนฟิกเพิ่มเติมได้เองต่อไป
จากรูปด้านบน ให้ทำการ login เข้าไปตั้งค่า Mikrotik router เพื่อทำการเปิดใช้งาน SNMP ซึ่งตัวอย่างการตั้งค่าในรูปด้านบนคือ Mikrotik router รุ่น hAP Lite ตาม Network diagram ที่ได้ออกแบบไว้
ซึ่งผู้เขียนขอข้ามขั้นตอนการตั้งค่าใช้งานของ mikrotik การเข้าคอนฟิก mikrotik จะใช้โปรแกรม winbox ของ mikrotik เอง
การเปิดใช้งาน SNMP ให้เข้าไปที่เมนู IP → SNMP → เลือก Enable → Communities → + → ตั้งชื่อให้ communitiy → เลือก Read Access เท่านั้น → OK
กลับมาที่หน้าต่าง SNMP Settings ให้เลือก Trap Community : ที่เรา add เข้ามา จากนั้นให้เลือก Trap Version : 2 จากนั้นกด OK ตามรูปด้านบน เป็นอันเสร็จขั้นตอนการเปิดใช้งาน SNMP server ของ Router Mikrotik และสำหรับ Router Mikrotik อีกตัวใน Network Diagram นั้นก็ทำการตั้งค่าด้วยวิธีเดียวกัน
กลับมาที่ Web : CACTI ให้เราคลิกเลือกที่เมนู Devices จากนั้นที่มุมขวาบน ให้คลิกที่เครื่องหมาย + (บวก)
จะเข้าสู่หน้าต่าง Device [New] โดยกรอกค่าต่างๆดังนี้
Description : ให้ตั้งชื่อ Device ตามที่เราต้องการ
Hostname : ให้ใส่ IP Address ของอุปกรณ์ของเราเข้าไป ในที่นี้คือ Mikrotik Router
Device Template : ให้เลือก Net-SNMP Device
SNMP Community String : ให้ใส่ชื่อ Community ที่เราได้ตั้งค่าไว้ ในที่นี้คือส่วนของ SNMP ของ Mikrotik Router
จากนั้นกดที่ปุ่ม Create ด้านล่างขวา
รอจนระบบแจ้งว่า Operation successful เป็นอันเสร็จเรียบร้อย ตามรูปด้านบน
จากนั้นกลับมาที่เมนู Devices จะเห็น รายการ Device ที่เราเพิ่มเข้ามา ให้คลิกเข้าไป
ที่มุมขวาบน จะเห็นเมนู Create Graphs for this Device ให้เราคลิกเลือกเข้าไป เพื่อทำการสร้าง Traffic interface graphs
จากนั้นเลือก Interface ที่ต้องการสร้างเป็น Graphs จากรูปด้านบน ทางผู้เขียนได้ทำการเลือกทุก Interface และในส่วนของ Select … ให้ทำการเลือก In/Out bits 64bit จากนั้นกด Create
เมื่อแล้วเสร็จ ตัวระบบจะแสดงหน้าต่าง Operation successful ตามรูปด้านบน
จากนั้นตาม Network Diagram สำหรับ Router Mikrotik ตัวอื่นๆ ก็ทำเช่นกันเดียวกัน
เราจะได้ Devices เข้ามาในโปรแกรม CACTI ครบตาม Network Diagram ที่เราได้ออกแบบไว้ตามรูปด้านบน
การเข้าดู ทราฟฟิคกราฟ เบื้องต้นนั้น ให้เข้าไปที่เมนู graphs ด้านบน จากนั้นที่มุนขวาบุน เลือกที่รูปหมายเลข 2 ตามรูปด้านบน จะเป็นการดูในรูปแบบ Preview Mode (ซึ่งทางผู้เขียนเองมีความชอบใน mode นี้) ซึ่งผู้อ่านสามารถเลือกปรับการดูได้ตามต้องการได้เลย กรณีที่ต้องการดู traffic graphs ของอุปกรณ์ที่ต้องการนั้น ให้เลือกที่ Device สำหรับช่อง Search จะเป็นการระบุดู traffic interface ที่เราต้องการจะดูก็พิมพ์ชื่อ interface นั้นๆได้เลย และสามารถเลือกช่วงเวลาของ trafice graphs ได้โดยเลือกที่ Preset แล้วระบุช่วงเวลาที่ต้องการได้ ตามรูปด้านบน
จุดเด่นของโปรแกรม CACTI ตามความเห็นส่วนตัวของผู้เขียน
— สามารถกำหนด User policy ได้ เช่น กำหนดให้ User ดู Traffic เฉพาะ Interface ที่อนุญาตได้
— สามารถลง Plugin เพิ่มเติมได้ เช่น WeatherMAP เพื่อใช้วาด Network MAP ( Network Diagram ) ของอุปกรณ์ว่าเชื่อมต่อกันอย่างไร หรือ Thresholds เพื่อตั้งค่าวัดระดับ Traffic เมื่อถึงค่าที่กำหนดไว้ให้ทำการส่ง Email แจ้งเตือนได้
— กำหนดกลุ่มของ Interface เพื่อดูเฉพาะรายการ Interface traffic ที่ต้องการได้
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
สำหรับบทความนี้ ทางผู้เขียนขอแนะนำเบื้องต้นไว้เพียงเท่านี้ ซึ่งโดยตัวโปรแกรม CACTI นี้มีเมนูให้ปรับแต่ง ใช้งานได้หลากหลายมากๆ ทางผู้อ่านลองทดสอบใช้งาน และฝึกใช้งานได้ต่อไปตามต้องการ หากผู้เขียนมีข้อแนะนำใดเพิ่มเติม จะมาเพิ่มเติมในบทความให้ต่อไป และหากผู้อ่านท่านใด มีข้อแนะนำติชมใดๆ สามารถ comment มาพูดคุยกันได้ครับ
ขอบคุณครับ