Home Kiến thức VPS Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

by Đàm Trung Kiên
A+A-
Reset

Ở bài viết này mình sẽ hướng dẫn các bạn cách tạo script Monitor tài nguyên VPS và thông báo qua Telegram vô cùng đơn giản chỉ với 3 bước.

Giới thiệu

Chắc hẳn trong quá trình quản trị VPS, một trong những công việc quan trọng nhất của người quản trị đó là đảm bảo tài nguyên VPS (CPU, RAM, DISK, Băng thông..) luôn trong trạng thái ổn định. Vậy làm sao để bạn có thể luôn giám sát được tài nguyên VPS mà không cần phải truy cập trực tiếp vào VPS. Và chắc chắn giải pháp ở đây là chúng ta cần có một công cụ Monitor để theo dõi tài nguyên và cảnh báo ngay lập tức khi có dấu hiệu quá tải.

Tuy nhiên việc triển khai một hệ thống Monitor chắc hẳn không phải là điều đơn giản với những người dùng cơ bản, vì ngoài việc cần có chuyên môn sâu, bạn còn cần phải có thêm chi phí để duy trì hệ thống Monitor đó. Nếu bạn đang gặp khó khăn trong việc tìm giải pháp thì đừng lo lắng, ở bài viết này mình sẽ hướng dẫn các bạn cách tạo một script Monitor VPS vô cùng đơn giản, để những người dùng không chuyên cũng có thể thao tác được, và đặc biệt là bạn không cần mất bất kỳ một chi phí nào khác cho việc Monitor này. Bây giờ hãy bắt đầu vào các bước thực hiện nhé.

Hướng dẫn thiết lập

Bước 1: Tạo Token trên Telegram

Để kết nối với @BotFather lấy Token, bạn vào Telegram search @BotFather và chọn @BotFather có dấu tick  như hình bên dưới. Hoặc bạn có thể truy cập trực tiếp liên kết https://telegram.me/BotFather để kết nối với @BotFather.

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Nhấn START để bắt đầu cuộc trò chuyện.

Bạn soạn tiếp /newbot để tạo một bot mới.

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Tiếp đó, bạn nhập tên cho bot cần tạo. (Lưu ý: tên bot phải được kết thúc bằng từ Bot. Ví dụ: kbazBot )

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Sau khi nhập tên Bot thành công, bạn sẽ được cung cấp  Token to access HTTP API  như hình trên (khung đỏ). Bạn tiến hành lưu đoạn Token này lại.

Tiếp đó bạn thực hiện START bot vừa tạo lên để nó hoạt động.

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Bước 2: Hướng dẫn lấy ChatID trên Telegram

Để lấy ChatID, bạn vào Telegram search @userinfobot như hình bên dưới. Hoặc bạn có thể truy cập trực tiếp liên kết https://telegram.me/userinfobot để kết nối với @userinfobot.

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram
Nhấn START để bắt đầu cuộc trò chuyện.
Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Sau khi nhấn START, bạn sẽ được cung cấp  ID như hình trên (khung đỏ). Bạn tiến hành lưu đoạn ID này lại.

Bước 3: Tạo script Monitor VPS và gửi thông báo về Telegram

  • Cài đặt các dịch vụ Sysstat

Chức năng của sysstat sẽ giúp cho chúng ta có thể theo dõi hiệu suất của các hệ thống Linux(CPU, Bộ nhớ, I/O ..). Để cài đặt các bạn có thể sử dụng lệnh sau:

AZDIGI Tutorial
 
apt-get install sysstat -y  (Debian/Ubuntu)
yum install sysstat -y       (RHEL/CentOS)
    
  • Cài đặt dịch vụ VnStat

Chức năng của VnStat là giám sát lưu lượng mạng dựa trên giao diện dòng lệnh cho Linux. Để cài đặt các bạn có thể sử dụng lệnh sau:

AZDIGI Tutorial
 
apt-get install vnstat -y   (Debian/Ubuntu)
yum install vnstat -y       (RHEL/CentOS)
    
  • Tạo script Monitor

Ở đây các bạn có thể tạo file tên là monitor_vps.sh và đặt tại đường dẫn /root

AZDIGI Tutorial
vi /root/monitor_vps.sh
    

Tiếp đó bạn copy script dưới đây và dán vào file monitor_vps.sh vừa tạo.

AZDIGI Tutorial
#!/bin/bash
chat_id="10667xxxxx"                            #### Nhập ID Telegram của bạn
token="5463311202:AAELZ-2u2eU1xxxxxxxxx"        #### Nhập Token Telegram của bạn
interface="eth0"                                ### Nhập tên card mạng server của bạn
time_report=("6:00" "12:00" "17:00" "20:30")    ### Nhập khung giờ muốn nhận thông báo

mem_threshold=90; cpu_threshold=90; disk_threshold=90; inode_threshold=90; #Percent
bwin_threshold=80; bwout_threshold=80; #MB
my_text=""  #String contain alert
ip_sv=$(ip a | grep -w inet | grep -Ev "103.xxx.xxx.xxx" | awk '{print $2}' | head -n 1 | awk -F "/" '{print $1}')


#Detect resource usage
cpu_usage=$(mpstat -P ALL  | grep all | awk '{print $4}' | sed "s/\,/\./g")
mem_usage=$(free -m | awk '/Mem:/ { printf("%3.1f", $3/$2*100) }')
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}' | sed "s/%//g")
inode_usage=$(df -ih / | awk '{print $5}' | sed "s/%//g" | tail -n 1)
bw=$(vnstat -i "$interface" -tr 3)
bw_incoming=$(echo "$bw" | grep rx | awk '{printf "%s %s\t PPS: %s %s", $2, $3, $4, $5}')
bw_outcoming=$(echo "$bw" | grep tx | awk '{printf "%s %s\t PPS: %s %s", $2, $3, $4, $5}')

function telegram_send(){
    curl -X POST "https://api.telegram.org/bot"$token"/sendMessage" -d "chat_id="${chat_id}"&text=${my_text}"
}

function float_ge() {
    perl -e "{if("$1">="$2"){print 1} else {print 0}}"
}

function auto_check() {
    bw_in=$(echo "${bw_incoming}" | grep "Mbit" | awk '{print $1}')
    bw_out=$(echo "${bw_outcoming}" | grep "Mbit" | awk '{print $1}')
    if \
        [[ $(float_ge "${cpu_usage}" "${cpu_threshold}") == 1 ]] || \
        [[ $(float_ge "${mem_usage}" "${mem_threshold}") == 1 ]] || \
        [[ $(float_ge "${disk_usage}" "${disk_threshold}") == 1 ]] || \
        [[ $(float_ge "${inode_usage}" "${inode_threshold}") == 1 ]] || \
        [[ ! -z "${bw_in}" && $(float_ge "${bw_in}" "${bwin_threshold}") == 1 ]] || \
        [[ ! -z "${bw_out}" && $(float_ge "${bw_out}" "${bwout_threshold}") == 1 ]]; then
        my_text=$(echo -e "⛔️Problem: "sv.hosting-1"     #### Bạn có thể sửa nội dung thông báo Problem

CPU usage: "${cpu_usage}"%
Memory usage: "${mem_usage}"%
Disk usage: "${disk_usage}"%
Inode usage: "${inode_usage}"%
Bandwith usage:
  ➡️ In: "${bw_incoming}"
  ⬅️ Out: "${bw_outcoming}"
")
    fi
    telegram_send
}

function daily_report(){
    now=$(date "+%H:%M")
    for i in "${time_report[@]}"
    do
        if [[ "$now" == "$i" ]];
        then
            my_text=$(echo -e "✅ Resolved: "sv.hosting-1"  #### Bạn có thể sửa nội dung thông báo Resolved

CPU usage: "${cpu_usage}"%
Memory usage: "${mem_usage}"%
Disk usage: "${disk_usage}"%
Inode usage: "${disk_usage}"%
Bandwith usage:
  ➡️ In: "${bw_incoming}"
  ⬅️ Out: "${bw_outcoming}"
")
            telegram_send
        fi
    done
    unset cpu_usage; unset cpu_usage; unset disk_usage; unset bw_in; unset bw_out;
    unset inode_usage; unset bw; unset bw_incoming; unset bw_outcoming;
}

function main(){
    auto_check
    daily_report
}

main
    

Trong đó, bạn cần chú ý và thay đổi các thông tin quan trọng như sau:

Tạo script Monitor tài nguyên VPS và thông báo qua Telegram
Tạo script Monitor tài nguyên VPS và thông báo qua Telegram
  • Phân quyền cho File monitor_vps.sh
AZDIGI Tutorial
chmod +x /root/monitor_vps.sh
    
  • Tạo Cron để thiết lập thời gian chạy script

Bây giờ chúng ta sẽ cần phải tạo Cron để tự động thực thi File monitor_vps.sh vừa tạo. Ví dụ ở đây mình sẽ thiết lập thời gian cứ 2 phút script sẽ được chạy một lần để check tài nguyên VPS, nếu có tài nguyên nào đặt ngưỡng giới hạn thì sẽ thông báo qua Telegram. Các bạn cấu hình Cron như sau:

AZDIGI Tutorial
(crontab -u root -l ; echo "*/2 * * * * /bin/bash /root/monitor_vps.sh >/dev/null 2>&1") | crontab -u root -
systemctl restart crond
    
Tạo script Monitor tài nguyên VPS và thông báo qua Telegram

Nếu cấu hình chính xác các bước, thì khi VPS bị quá tải tài nguyên nào đó, ngay lập tức bạn sẽ nhận được thông báo qua Telegram với nội dung tương tự như sau.

CleanShot 2023 12 30 at 14.27.36

Tổng kết

Như vậy mình đã hướng dẫn các bạn cách cấu hình Monitor tài nguyên trên VPS vô cùng đơn giản. Với người dùng VPS cơ bản, thì script Monitor này gần như đáp ứng đầy đủ các yêu cầu về giám sát tài nguyên VPS. Từ đó giúp bạn tiết kiệm thời gian và chi phí trong quá trình vận hành.

Chúc các bạn thực hiện thành công.!

Các bạn có thể tham khảo thêm các hướng dẫn sử dụng khác tại link bên dưới

Nếu các bạn cần hỗ trợ các bạn có thể liên hệ bộ phận hỗ trợ theo các cách bên dưới:

Đánh giá

Tham gia nhóm hỗ trợ Server - Hosting

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay

Bài viết cùng chuyên mục

AZDIGI – Không chỉ là đơn vị hàng đầu trong lĩnh vực Web Hosting và Máy chủ, chúng tôi mong muốn mang lại những kiến thức bổ ích nhất và luôn cập nhật thường xuyên cho cộng đồng người đam mê thiết kế website, công nghệ,…

Vui lòng không sao chép nội dung nếu chưa xin phép. Designed and Developed by PenciDesign