Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống 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

  1. CPU:

    top -bn1 | grep "Cpu(s)" | awk '{print $2}'
  2. Disk:

    df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1
  3. 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

  1. Cài đặt:

    • Đảm bảo curl đã cài (sudo apt install curl).
    • Thay SLACK_WEBHOOK bằng URL thật từ Slack.
  2. 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%
  3. 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%!”.

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.

Điều hướng chuỗi bài viết<< Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
>> Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps 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