วิธีติดตั้งและกำหนดค่า Monit เพื่อเฝ้าดูและตรวจสอบเซิร์ฟเวอร์ของคุณ

บทความนี้ถือว่าคุณจะใช้ 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 จะแสดงข้อผิดพลาดเหล่านั้นออกมา และคุณสามารถแก้ไขได้ตามความเหมาะสม.

หน้านี้มีประโยชน์หรือไม่?

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *