Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Monitoring với Bash – Báo Cáo Hệ Thống trong DevOps
Trong DevOps, giám sát hệ thống là cách để bạn “bắt mạch” server – phát hiện vấn đề trước khi chúng trở thành thảm họa. Monitoring với Bash DevOps dùng Bash để giám sát hệ thống Bash, tạo báo cáo Bash, và gửi alert Bash mà không cần tool phức tạp như Prometheus ngay từ đầu. Trong bài thứ mười lăm của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách xây dựng script giám sát đơn giản nhưng hiệu quả, kèm thực hành thực tế. Đây là kinh nghiệm tôi dùng để theo dõi server nhỏ, không chỉ là lý thuyết đâu nhé!
Tại Sao Monitoring với Bash?
Giám Sát với Bash
Bash cho phép thu thập metric cơ bản:
- CPU, RAM, disk usage.
- Process bất thường.
- Gửi thông báo khi vượt ngưỡng.
Ví dụ: Script Bash gửi email khi CPU vượt 90%, thay vì đợi server crash.
Lợi Ích trong DevOps
- Nhẹ nhàng: Không cần cài đặt agent nặng.
- Tùy chỉnh: Dễ điều chỉnh cho nhu cầu cụ thể.
- Tích hợp: Kết hợp với cron (bài 8) hoặc pipeline.
Thực tế: Tôi từng dùng Bash gửi alert qua Slack khi disk đầy, kịp dọn dẹp trước khi hệ thống dừng – chỉ mất 10 phút setup.
Công Cụ Monitoring trong Bash
Thu Thập Metric
-
CPU:
top -bn1 | grep "Cpu(s)" | awk '{print $2}'
-
Disk:
df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1
-
RAM:
free -m | grep "Mem:" | awk '{print $3/$2 * 100}'
Gửi Alert
- Email (dùng
mail
):echo "Disk đầy" | mail -s "Cảnh báo" user@example.com
- Slack (dùng
curl
):curl -X POST -H 'Content-type: application/json' --data '{"text":"Disk vượt 80%"}' https://hooks.slack.com/services/xxx/yyy/zzz
Thực Hành: Script Giám Sát và Báo Cáo
Script Monitoring
Tạo system_monitor.sh
:
#!/bin/bash
set -e
trap 'echo "Lỗi tại dòng $LINENO: $BASH_COMMAND" >&2; exit 1' ERR
# Biến
LOG_FILE="/var/log/system_monitor.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
CPU_THRESHOLD=${CPU_THRESHOLD:-90}
DISK_THRESHOLD=${DISK_THRESHOLD:-80}
SLACK_WEBHOOK="https://hooks.slack.com/services/xxx/yyy/zzz" # Thay bằng webhook thật
# Hàm ghi log
log() {
echo "[$TIMESTAMP] $1" >> "$LOG_FILE" 2>/dev/null || {
echo "Không thể ghi log" >&2
exit 1
}
}
# Hàm gửi alert Slack
send_alert() {
local MESSAGE="$1"
curl -s -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$MESSAGE\"}" "$SLACK_WEBHOOK" >/dev/null 2>&1 || {
log "Lỗi gửi alert Slack"
}
}
# Hàm kiểm tra CPU
check_cpu() {
local CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if [ $(echo "$CPU > $CPU_THRESHOLD" | bc) -eq 1 ]; then
log "Cảnh báo: CPU vượt $CPU% (ngưỡng $CPU_THRESHOLD%)"
send_alert "Server $(hostname): CPU vượt $CPU%!"
else
log "CPU ổn: $CPU%"
fi
}
# Hàm kiểm tra disk
check_disk() {
local DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ "$DISK" -gt "$DISK_THRESHOLD" ]; then
log "Cảnh báo: Disk vượt $DISK% (ngưỡng $DISK_THRESHOLD%)"
send_alert "Server $(hostname): Disk vượt $DISK%!"
else
log "Disk ổn: $DISK%"
fi
}
# Gọi hàm
check_cpu
check_disk
echo "Giám sát hoàn tất, xem log tại $LOG_FILE"
Chạy và Test
-
Cài đặt:
- Đảm bảo
curl
đã cài (sudo apt install curl
). - Thay
SLACK_WEBHOOK
bằng URL thật từ Slack.
- Đảm bảo
-
Chạy script:
chmod +x system_monitor.sh ./system_monitor.sh
- Kết quả mẫu:
Giám sát hoàn tất, xem log tại /var/log/system_monitor.log
- Log:
[2025-03-13 10:00:00] CPU ổn: 15.3% [2025-03-13 10:00:00] Disk ổn: 42%
- Kết quả mẫu:
-
Mô phỏng vượt ngưỡng:
- Set
CPU_THRESHOLD=10
:CPU_THRESHOLD=10 ./system_monitor.sh
- Log:
[2025-03-13 10:01:00] Cảnh báo: CPU vượt 15.3% (ngưỡng 10%)
- Slack: Tin nhắn “Server my-server: CPU vượt 15.3%!”.
- Set
Giải thích:
check_cpu
: Theo dõi và báo nếu CPU cao.send_alert
: Gửi thông báo qua Slack.log
: Ghi lại mọi sự kiện.
DevOps: Script này có thể chạy qua cron để giám sát liên tục.
Debug Monitoring
- Thêm debug:
bash -x system_monitor.sh
- Test alert:
send_alert "Test alert"
Thực tế: Tôi từng quên kiểm tra lỗi curl
, alert không gửi – thêm xử lý lỗi trong send_alert
khắc phục.
Ứng Dụng trong DevOps
Giám Sát Định Kỳ
- Cron job:
*/5 * * * * /home/user/system_monitor.sh
Pipeline CI/CD
- Báo cáo trước deploy:
monitor: script: - bash system_monitor.sh - grep "Cảnh báo" /var/log/system_monitor.log && exit 1
Case study: Một team dùng Bash gửi alert email khi RAM vượt 90%, giảm 70% downtime – không cần tool giám sát lớn.
Best Practice
- Kiểm tra metric trước khi gửi alert.
- Dùng webhook hoặc email thay hardcode.
- Ghi log để debug sau.
Kết Luận
Monitoring với Bash DevOps với giám sát hệ thống Bash là cách đơn giản nhưng hiệu quả để tạo báo cáo Bash và gửi alert Bash. Thực hành với system_monitor.sh
cho thấy bạn có thể theo dõi server dễ dàng – bước quan trọng trong DevOps. Bài tiếp theo, chúng ta sẽ khám phá Bash Nâng Cao: Parallel Execution – cách tối ưu script như pro.