บทความนี้ถือว่าคุณจะใช้ Ubuntu Server 20.04 หรือ 24.04.
แรงจูงใจ
Monit เป็นเครื่องมือที่เรียบง่ายและเบาสำหรับการเฝ้าติดตามและจัดการบริการ กระบวนการ ไฟล์ และระบบไฟล์บนเซิร์ฟเวอร์ Linux ของคุณ ความสามารถในการทำงานเชิงป้องกันทำให้มันเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการอัตโนมัติของเซิร์ฟเวอร์ ด้านล่างนี้เป็นขั้นตอนรายละเอียดเกี่ยวกับวิธีการติดตั้ง ตั้งค่า และใช้ Monit บน Ubuntu Server 20.04 และ 24.04.
ทางเลือก
Netdata มาพร้อมกับ WordOps และทำงานได้ดีมากในการแสดงข้อมูลสถิติของเซิร์ฟเวอร์ของคุณ แต่ไม่มีคุณสมบัติการเฝ้าติดตามแบบเชิงรุกที่ Monit มีให้ ส่วนเครื่องมืออื่น ๆ เช่น Kibana, Zabbix และ Nagios ก็ได้รับความนิยมเช่นกัน แต่การตั้งค่าใช้งานนั้นยากกว่า และใช้ทรัพยากรระบบมากขึ้น.
ติดตั้ง Monit
โชคดีที่ Monit มีอยู่ในคลังซอฟต์แวร์ของ Ubuntu ดังนั้นมาติดตั้งกันด้วยคำสั่งต่อไปนี้:
sudo apt update
sudo apt install monit
การตั้งค่าพื้นฐาน
ไฟล์การตั้งค่าหลักของ Monit อยู่ที่ /etc/monit/monitrc. ก่อนที่จะเริ่มแก้ไข ควรสร้างสำเนาสำรองไว้ก่อน:
sudo cp /etc/monit/monitrc /etc/monit/monitrc.backup
ตามค่าเริ่มต้น Monit จะตรวจสอบบริการทุก 2 นาที (120 วินาที) คุณสามารถปรับค่านี้ในไฟล์ได้โดยการแก้ไขบรรทัดต่อไปนี้ เราแนะนำให้ตรวจสอบทุก 1 นาที:
ตั้งค่า daemon เป็น 60
Monit มาพร้อมกับเซิร์ฟเวอร์อีเมลของตัวเอง แต่เนื่องจากเราต้องการระบบที่มั่นคงกว่า และได้ตั้งค่า Sendmail ไว้แล้ว จึงจะใช้ Sendmail เป็น MTA ของเรา โดยตั้งค่าให้ชี้ไปยัง localhost (พารามิเตอร์นี้ถูกตั้งเป็นคอมเมนต์ไว้ตามค่าเริ่มต้น ดังนั้นคุณสามารถคัดลอกและวางข้อความข้างต้นเข้าไปได้เลย):
ตั้งเซิร์ฟเวอร์อีเมลเป็น localhost
การ รูปแบบอีเมล พารามิเตอร์เหล่านี้กำหนดทุกด้านของโครงสร้างอีเมลของคุณ ดังนั้นคุณจึงต้องยกเลิกการใส่เครื่องหมาย # ออกจากทุกบรรทัด และขั้นตอนการตั้งค่าขั้นต่ำคือการเปลี่ยนที่อยู่อีเมลในส่วน FROM เท่านั้น:
จาก: Monit <mo************@*****le.com>
ตั้งที่อยู่อีเมลที่จะรับการแจ้งเตือนทั้งหมดจาก Monit โดยทั่วไปคือที่อยู่อีเมลธุรกิจของคุณเอง:
ตั้งการแจ้งเตือน al****@*****le.com
Monit ใช้ส่วนติดต่อ HTTP ที่ฝังตัวไว้ทั้งเพื่อแสดงหน้าสถานะผ่านเว็บและเพื่อจัดการคำสั่งจากบรรทัดคำสั่ง แม้ว่าคุณจะไม่ต้องการเปิดใช้งานส่วนติดต่อเว็บ คุณก็ต้องระบุบล็อกการตั้งค่าที่ถูกต้องและครบถ้วน เพื่อสร้างจุดปลายทาง (endpoint) และจัดการ Monit อย่างถูกต้อง.
ตั้งพอร์ต httpd เป็น 2812 และใช้ที่อยู่ localhost
อนุญาต localhost
อนุญาต admin:monit # ต้องใช้ผู้ใช้ 'admin' พร้อมรหัสผ่าน 'monit'
เพื่อเปิดใช้งานการเข้าถึงจากระยะไกล ให้เปลี่ยน localhost ไปยังที่อยู่ IP หรือโดเมนของเซิร์ฟเวอร์ที่เหมาะสม และกำหนดข้อมูลการยืนยันตัวตนที่ปลอดภัย.
เพิ่มไฟล์การตั้งค่าเพิ่มเติม:
นอกจากไฟล์การตั้งค่าหลักแล้ว Monit อาจรวมถึงไฟล์การตั้งค่าเพิ่มเติมจาก /etc/monit/conf-enabled/. เราจะเพิ่มเครื่องมือตรวจสอบหลายตัวภายในโฟลเดอร์นี้ เพื่อครอบคลุมบริการส่วนใหญ่ที่เราใช้บนเซิร์ฟเวอร์ของเรา แต่ก่อนอื่น มาเริ่มจากเรื่องที่สำคัญที่สุดก่อน นั่นคือความปลอดภัย.
ติดตามการเข้าสู่ระบบ SSH ที่สำเร็จ
นี่เป็นคำเตือนแรกที่สำคัญมาก เพราะเราจำเป็นต้องทราบทุกครั้งที่มีผู้ใดเข้าสู่ระบบเซิร์ฟเวอร์ของเราผ่าน SSH ได้สำเร็จ คำเตือนนี้ถูกส่งมาจาก Shireesh ที่ Elitmus และเราจะตั้งชื่อมันว่า ssh_logins.conf:
ตรวจสอบไฟล์ ssh_logins ที่อยู่ในเส้นทาง /var/log/auth.log
หากไม่ตรงกับ "/etc/monit/whitelist_ips.regex" ให้ข้าม
หากตรงกับ "Accepted publickey" ให้ส่งการแจ้งเตือน
เพิ่มที่อยู่ IP หนึ่งที่อยู่ต่อบรรทัดในไฟล์ /etc/monit/whitelist_ips.regex หรือแสดงความคิดเห็น/ลบมันออก หากต้องการรับการแจ้งเตือนทั้งหมด.
ติดตามการทำงานของ LEMP stack
ชื่อที่เหมาะสม lemp.conf ตัวตรวจสอบนี้ติดตามทรัพยากรของระบบเรา เช่น พื้นที่จัดเก็บข้อมูล CPU และ RAM NGINX PHP และ MySQL ซึ่งในกรณีของเราคือ MariaDB สูตรสำหรับ loadavg คือ 1.5 * จำนวนแกน CPU:
# ตรวจสอบการใช้งานระบบไฟล์บนระบบไฟล์รูท
ตรวจสอบระบบไฟล์ rootfs ด้วยเส้นทาง /
หากพื้นที่ใช้งาน > 90% ให้แจ้งเตือน # แจ้งเตือนหากพื้นที่ดิสก์ใช้งานเกิน 90%
# ตรวจสอบตัวชี้วัดประสิทธิภาพระบบบน localhost
ตรวจสอบระบบ localhost
หาก loadavg (1 นาที) > 6 ให้แจ้งเตือน # แจ้งเตือนหากค่าเฉลี่ยโหลด 1 นาทีเกิน 6
หาก loadavg (5 นาที) > 4 ให้แจ้งเตือน # แจ้งเตือนหากค่าเฉลี่ยโหลด 5 นาทีเกิน 4
หากการใช้หน่วยความจำ > 90% ให้แจ้งเตือน # แจ้งเตือนหากการใช้หน่วยความจำเกิน 90%
# แจ้งเตือนหากการใช้งาน CPU เกิน 80% ในการตรวจสอบติดต่อกัน 15 ครั้ง
หากการใช้งาน CPU > 80% เป็นเวลา 15 รอบ ให้แจ้งเตือน # การใช้งาน CPU รวม
หากการใช้งาน CPU (ผู้ใช้) > 70% ให้แจ้งเตือน # การใช้งาน CPU ของผู้ใช้
หากการใช้งาน CPU (ระบบ) > 30% ให้แจ้งเตือน # การใช้งาน CPU ของระบบ
หากการใช้งาน CPU (รอ) > 20% ให้แจ้งเตือน # การใช้งาน CPU ที่รอ I/O
# ตรวจสอบกระบวนการเซิร์ฟเวอร์เว็บ Nginx (HTTPS)
ตรวจสอบกระบวนการ nginx ด้วยไฟล์ pid /var/run/nginx.pid
start program = "/usr/sbin/service nginx start"
stop program = "/usr/sbin/service nginx stop"
หากการใช้งาน CPU > 80% เป็นเวลา 2 รอบ ให้แจ้งเตือน # แจ้งเตือนหากการใช้งาน CPU เกิน 80% ในการตรวจสอบ 2 ครั้งติดต่อกัน
if failed host 127.0.0.1 port 443 protocol https then restart # Restart if Nginx is not responding on HTTPS
# ตรวจสอบกระบวนการของเซิร์ฟเวอร์ฐานข้อมูล MySQL
ตรวจสอบกระบวนการ mysqld ด้วยไฟล์ pid /var/run/mysqld/mysqld.pid
start program = "/usr/sbin/service mysql start"
stop program = "/usr/sbin/service mysql stop"
หาก CPU > 80% เป็นเวลา 2 รอบ ให้แจ้งเตือน # แจ้งเตือนหากการใช้งาน CPU เกิน 80% ในการตรวจสอบ 2 ครั้งติดต่อกัน
if failed unixsocket /var/run/mysqld/mysqld.sock then restart # เริ่มต้น MySQL ใหม่หาก Unix socket ไม่ตอบสนอง
# ตรวจสอบกระบวนการ PHP-FPM สำหรับ PHP 8.3
ตรวจสอบกระบวนการ php8.3-fpm ด้วยไฟล์ pid /var/run/php/php8.3-fpm.pid
เริ่มโปรแกรม = "/usr/sbin/service php8.3-fpm start"
หยุดโปรแกรม = "/usr/sbin/service php8.3-fpm stop"
หาก cpu > 80% เป็นเวลา 2 รอบ ให้แจ้งเตือน # แจ้งเตือนหากการใช้งาน CPU เกิน 80% ในการตรวจสอบ 2 ครั้งติดต่อกัน
ติดตาม Redis
มาเพิ่มการติดตาม Redis ลงในไฟล์แยกต่างหากกันเถอะ, redis.conf, เนื่องจากมันไม่ใช่ส่วนสำคัญในการทำงานของ WordPress และสามารถปิดการใช้งานได้หากจำเป็น:
# การเฝ้าติดตาม Redis (โดยใช้ Unix socket)
ตรวจสอบกระบวนการ redis ด้วยไฟล์ pid /var/run/redis/redis-server.pid
start program = "/usr/sbin/service redis-server start"
stop program = "/usr/sbin/service redis-server stop"
# การตรวจสอบทรัพยากรของกระบวนการ
หากการใช้งาน CPU > 80% เป็นเวลา 5 รอบ ให้แจ้งเตือน
หากการใช้งานหน่วยความจำ > 75% ให้แจ้งเตือน
หากจำนวนลูกกระบวนการ > 255 เป็นเวลา 5 รอบ ให้แจ้งเตือน
group redis
# ตรวจสอบไฟล์บันทึก Redis เพื่อหาข้อผิดพลาด
ตรวจสอบไฟล์ redis_log ที่เส้นทาง /var/log/redis/redis-server.log
หากพบ "ERROR" ให้แจ้งเตือน
หากพบ "CRITICAL" ให้แจ้งเตือน
group redis
จอภาพ Fail2Ban
โดยใช้วิธีการเดียวกันนี้ มาเพิ่ม fail2ban.conf:
ตรวจสอบกระบวนการ fail2ban ด้วยไฟล์ pid /var/run/fail2ban/fail2ban.pid
กลุ่ม services
เริ่มโปรแกรม = "/etc/init.d/fail2ban force-start"
หยุดโปรแกรม = "/etc/init.d/fail2ban stop"
if failed unixsocket /var/run/fail2ban/fail2ban.sock then restart
if 5 restarts within 5 cycles then timeout
ตรวจสอบไฟล์ fail2ban_log ที่เส้นทาง /var/log/fail2ban.log
if match "ERROR|WARNING" then alert
ติดตาม ClamAV
เราจำเป็นต้องทราบว่า ClamAV ที่เราได้ติดตั้งไว้ก่อนหน้านี้ พบไวรัสหรือมัลแวร์ใดบนเซิร์ฟเวอร์ของเราหรือไม่ ดังนั้น clamav.conf ดูเหมือนนี้:
# ตรวจสอบไฟล์บันทึก ClamAV เพื่อหาการเปลี่ยนแปลงที่บ่งชี้ว่ามีการตรวจพบ
ตรวจสอบไฟล์ clamav_log ที่อยู่ในเส้นทาง /var/log/clamav/clamav.log
หากพบข้อความ "FOUND" ให้ส่งการแจ้งเตือน
ตรวจสอบความสมบูรณ์ของไฟล์ที่ละเอียดอ่อน
Monit สามารถติดตามไฟล์สำคัญหรือไฟล์ที่ไม่น่าจะมีการเปลี่ยนแปลงบ่อยครั้ง และแจ้งเตือนเราเมื่อมีการเปลี่ยนแปลงเกิดขึ้น กิจกรรมนี้มักเรียกว่า “การตรวจสอบความสมบูรณ์ของไฟล์” ดังนั้นไฟล์การตั้งค่าของเราจึงมีชื่อว่า fim.conf และภายในนั้น คุณสามารถจัดเรียงไฟล์ของคุณได้ดังนี้:
# ตรวจสอบการเปลี่ยนแปลงในไฟล์การตั้งค่า WordPress
ตรวจสอบไฟล์ wp_config ที่อยู่ในเส้นทาง /var/www/example.com/wp-config.php
หากค่า checksum เปลี่ยนแปลง ให้ส่งการแจ้งเตือน
ตรวจสอบไฟล์ whitelist_ips ที่อยู่ในเส้นทาง /etc/monit/whitelist_ips.regex
หากค่า checksum เปลี่ยนแปลง ให้ส่งการแจ้งเตือน
เปิดใช้งานและเริ่มบริการ Monit
เปิดใช้งาน Monit ให้เริ่มทำงานอัตโนมัติเมื่อระบบบูต:
sudo systemctl enable monit
จากนั้น ให้เริ่มบริการ Monit:
sudo systemctl start monit
คุณสามารถตรวจสอบสถานะของบริการ Monit ได้ด้วย:
sudo systemctl status monit
การทดสอบการตั้งค่า Monit
ก่อนที่จะนำการตั้งค่า Monit ของคุณไปใช้ในระบบจริง ให้ลองทดสอบก่อน:
sudo monit -t
sudo monit reload
sudo monit status
การ สถานะ monit คำสั่งนี้จะแสดงรายชื่อบริการและกระบวนการทั้งหมดที่ Monit กำลังติดตามอยู่ในขณะนี้.
หากมีข้อผิดพลาดในการตั้งค่า Monit จะแสดงข้อผิดพลาดเหล่านั้นออกมา และคุณสามารถแก้ไขได้ตามความเหมาะสม.
ใส่ความเห็น