Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp 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

  1. CPU:

    top -bn1 | grep "Cpu(s)" | awk '{print $2}'
    • Lấy % CPU usage.
  2. RAM:

    free -m | grep "Mem:" | awk '{print $3/$2 * 100}'
    • Tính % RAM đã dùng.

Quản Lý Process

  1. Danh sách process:

    ps aux | grep "nginx"
    • Tìm process Nginx.
  2. Kill process:

    kill -9 $(pidof nginx)
    • Dừng Nginx bằng PID.
  3. 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

  1. 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%
  2. 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)

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 Bashcan 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.

Điều hướng chuỗi bài viết<< Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
>> Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm