Monitoring với Bash: Báo cáo hệ thống và cảnh báo tự động trong DevOps
Hướng dẫn xây dựng hệ thống monitoring với Bash: thu thập metric CPU/RAM/Disk/Network, gửi cảnh báo qua Slack/Telegram/email, ghi log CSV và tạo daily report.
Trong bài viết trước, chúng ta đã tìm hiểu cách kết hợp Bash và Docker để quản lý container, viết watchdog script tự động restart khi crash. Bây giờ, chúng ta sẽ mở rộng phạm vi giám sát — không chỉ container mà toàn bộ hệ thống: CPU, RAM, Disk, Network, và gửi cảnh báo đến team khi có vấn đề phát sinh.
Trong DevOps, monitoring là “mắt thần” giúp bạn phát hiện vấn đề trước khi chúng trở thành sự cố nghiêm trọng. Nhiều người nghĩ rằng monitoring phải dùng Prometheus, Grafana hay Datadog — nhưng thực tế, với một script Bash kết hợp cron, bạn đã có thể thu thập metric, gửi alert qua Slack/Telegram, và tạo daily report mà không cần cài thêm bất kỳ agent nào.
Bài viết này sẽ hướng dẫn bạn cách thu thập các metric hệ thống cốt lõi, gửi cảnh báo qua webhook, lưu dữ liệu dạng CSV để phân tích sau, và kết hợp mọi thứ thành một daily report script hoàn chỉnh.
Thu thập metric hệ thống
CPU
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# CPU usage từ idlecpu_usage(){ top -bn1 | grep "Cpu(s)"| awk '{print 100 - $8}'| tr -d ','}# Load average 1 phútload_avg(){ awk '{print $1}' /proc/loadavg
}# Số CPU corescpu_cores(){ nproc
}
========================================
DAILY SYSTEM REPORT
Host: web-prod-01
Date: 2026-09-01 08:00:00
========================================
--- System Info ---
Uptime: up 45 days 3 hours 22 minutes
Processes: 234
TCP Connections: 187
--- Resource Usage ---
CPU: 23.4%
RAM: 67.2% (5412 MB used)
Disk: 72% (58 GB used)
Load: 1.85
--- Thresholds ---
CPU: OK
RAM: OK
Disk: OK
--- Top 5 CPU Processes ---
root 12.3% CPU 0.1% RAM nginx: worker
www-data 8.7% CPU 2.1% RAM php-fpm: pool
mysql 5.2% CPU 15.3% RAM mysqld
root 3.1% CPU 0.8% RAM node /opt/api
root 1.4% CPU 0.2% RAM sshd
--- Top 5 RAM Processes ---
mysql 15.3% RAM 5.2% CPU mysqld
www-data 2.1% RAM 8.7% CPU php-fpm: pool
root 1.8% RAM 0.9% CPU node /opt/api
root 0.8% RAM 3.1% CPU node /opt/api
redis 0.5% RAM 0.3% CPU redis-server
========================================
Ghi chú triển khai
Webhook security: Lưu Slack webhook URL và Telegram bot token dưới dạng biến môi trường hoặc file được bảo vệ bằng quyền 600, không hardcode trong script.
Metric history: File CSV sẽ grows theo thời gian. Kết hợp với logrotate hoặc script dọn dẹp định kỳ để giữ file ở kích thước hợp lý. Bạn cũng có thể dùng awk hoặc python để phân tích xu hướng từ CSV.
Threshold tuning: Giá trị mặc định (80%/95%) phù hợp cho hầu hết server. Điều chỉnh theo workload cụ thể — ví dụ server chạy batch processing có thể cần ngưỡng CPU cao hơn.
Multi-extend script: Để monitor nhiều server, kết hợp với SSH từ Bài 13 — chạy script trên mỗi server và aggregate kết quả về một nơi.
Escalation: Khi nhận được alert CRITICAL, script có thể gọi thêm API để tạo ticket trong hệ thống issue tracking (Jira, GitHub Issues).
Lời kết
Monitoring với Bash không cần phức tạp — chỉ cần thu thập đúng metric, thiết lập ngưỡng cảnh báo hợp lý, và gửi alert đến đúng kênh. Từ việc đọc CPU/RAM/Disk, ghi log CSV để phân tích xu hướng, đến gửi cảnh báo qua Slack/Telegram và tạo daily report — tất cả đều nằm trong một script Bash chạy định kỳ qua cron.
Ở bài tiếp theo, chúng ta sẽ khám phá Bash nâng cao: Parallel Execution — cách tối ưu hiệu suất script bằng background process, xargs -P, GNU parallel và quản lý concurrency.