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ả
Quản Lý Hệ Thống với Bash – Theo Dõi và Can Thiệp trong DevOps
Trong DevOps, quản lý hệ thống là nhiệm vụ sống còn – theo dõi tài nguyên, phát hiện vấn đề, và can thiệp kịp thời để giữ server chạy mượt mà. Quản Lý Hệ Thống với Bash DevOps dùng Bash để giám sát Bash CPU/RAM, can thiệp Bash vào process, mà không cần tool phức tạp. Trong bài thứ mười hai của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng Bash để theo dõi và quản lý hệ thống, kèm thực hành thực tế. Đây là kinh nghiệm tôi áp dụng khi server “kêu cứu” lúc nửa đêm, không chỉ là lý thuyết đâu nhé!
Tại Sao Quản Lý Hệ Thống với Bash?
Bash trong Hệ Thống
Bash cung cấp lệnh và script để:
- Theo dõi CPU, RAM, disk (VD:
top
,free
). - Quản lý process (VD:
kill
,ps
). - Can thiệp nhanh khi cần (VD: restart service).
Ví dụ: Script Bash phát hiện process ngốn RAM và kill nó thay vì chờ server crash.
Lợi Ích trong DevOps
- Nhẹ nhàng: Không cần cài thêm tool giám sát nặng.
- Tự động hóa: Kết hợp với cron (bài 8) để chạy định kỳ.
- Phản ứng nhanh: Can thiệp trước khi vấn đề lớn.
Thực tế: Tôi từng dùng Bash để kill process ngốn CPU lúc 2 giờ sáng – cứu server mà không cần SSH vào debug.
Công Cụ Quản Lý Hệ Thống trong Bash
Giám Sát CPU và RAM
-
CPU:
top -bn1 | grep "Cpu(s)" | awk '{print $2}'
- Lấy % CPU usage.
-
RAM:
free -m | grep "Mem:" | awk '{print $3/$2 * 100}'
- Tính % RAM đã dùng.
Quản Lý Process
-
Danh sách process:
ps aux | grep "nginx"
- Tìm process Nginx.
-
Kill process:
kill -9 $(pidof nginx)
- Dừng Nginx bằng PID.
-
Top process ngốn tài nguyên:
ps -eo pid,%cpu,%mem,cmd --sort=-%cpu | head -n 5
Can Thiệp Hệ Thống
- Restart service:
systemctl restart nginx
Thực Hành: Script Giám Sát và Can Thiệp
Script Theo Dõi Hệ Thống
Tạo system_manager.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_manager.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
CPU_THRESHOLD=${CPU_THRESHOLD:-90}
RAM_THRESHOLD=${RAM_THRESHOLD:-80}
# Hàm ghi log
log() {
echo "[$TIMESTAMP] $1" >> "$LOG_FILE" 2>/dev/null || {
echo "Không thể ghi log" >&2
exit 1
}
}
# 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%)"
# Tìm và kill process ngốn CPU
TOP_PID=$(ps -eo pid,%cpu --sort=-%cpu | head -n 2 | tail -n 1 | awk '{print $1}')
log "Kill process $TOP_PID (CPU cao)"
kill -9 "$TOP_PID" 2>/dev/null || log "Không thể kill $TOP_PID"
else
log "CPU ổn: $CPU%"
fi
}
# Hàm kiểm tra RAM
check_ram() {
local RAM=$(free -m | grep "Mem:" | awk '{print $3/$2 * 100}')
if [ $(echo "$RAM > $RAM_THRESHOLD" | bc) -eq 1 ]; then
log "Cảnh báo: RAM vượt $RAM% (ngưỡng $RAM_THRESHOLD%)"
else
log "RAM ổn: $RAM%"
fi
}
# Gọi hàm
check_cpu
check_ram
Chạy và Test
-
Local:
chmod +x system_manager.sh ./system_manager.sh
- Kết quả mẫu:
tail /var/log/system_manager.log [2025-03-13 10:00:00] CPU ổn: 15.3% [2025-03-13 10:00:00] RAM ổn: 42.5%
- Kết quả mẫu:
-
Mô phỏng CPU cao:
- Chạy stress test (VD:
stress --cpu 8
) rồi chạy script:[2025-03-13 10:01:00] Cảnh báo: CPU vượt 95% (ngưỡng 90%) [2025-03-13 10:01:00] Kill process 12345 (CPU cao)
- Chạy stress test (VD:
Giải thích:
check_cpu
: Theo dõi và can thiệp nếu CPU vượt ngưỡng.ps -eo
: Lấy PID process ngốn CPU nhất.kill -9
: Dừng process (cẩn thận trong production).
DevOps: Script này có thể chạy qua cron để giám sát liên tục.
Debug và Cải Tiến
- Thêm debug:
bash -x system_manager.sh
- Kiểm tra log:
tail -f /var/log/system_manager.log
Thực tế: Tôi từng để script kill nhầm process quan trọng – thêm log và điều kiện chặt chẽ hơn đã khắc phục.
Ứng Dụng trong DevOps
Giám Sát Định Kỳ
- Cron job:
*/5 * * * * /home/user/system_manager.sh
Pipeline CI/CD
- Kiểm tra runner:
pre_build: script: - bash system_manager.sh - grep "Cảnh báo" /var/log/system_manager.log && exit 1
Case study: Một team dùng Bash giám sát RAM trong cron, phát hiện leak sớm – tiết kiệm 20% chi phí server.
Best Practice
- Kiểm tra process trước khi kill.
- Ghi log mọi can thiệp.
- Dùng ngưỡng linh hoạt qua biến.
Kết Luận
Quản Lý Hệ Thống với Bash DevOps với giám sát Bash và can thiệp Bash giúp bạn theo dõi CPU RAM Bash và xử lý vấn đề nhanh chóng. Thực hành với system_manager.sh
cho thấy Bash đủ mạnh để quản lý hệ thống hiệu quả – công cụ không thể thiếu trong DevOps. Bài tiếp theo, chúng ta sẽ khám phá Tự Động Hóa SSH với Bash – cách quản lý multi-server như pro.