Macld DevOps,Linux Bài 5. Text Processing trong Bash-Grep, Awk, Sed Hiệu Quả

Bài 5. Text Processing trong Bash-Grep, Awk, Sed Hiệu Quả

Công Cụ Text Processing – Grep, Awk, Sed trong Bash DevOps

Khi làm DevOps, bạn sẽ thường xuyên phải xử lý một lượng lớn văn bản – từ log hệ thống, output của các lệnh, đến file cấu hình – và cần phải trích xuất, lọc hoặc chỉnh sửa chúng một cách nhanh chóng. Đây chính là lúc text processing trong Bash DevOps phát huy hiệu quả với các công cụ như grep, awksed. Trong bài thứ năm của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ hướng dẫn bạn cách sử dụng ba công cụ này để xử lý văn bản như một chuyên gia, kèm theo các bài thực hành thực tế. Đây là những công cụ tôi sử dụng hàng ngày để debug log và phân tích hệ thống, chứ không chỉ là lý thuyết đâu nhé!

Tại Sao Text Processing Quan Trọng?

Text trong DevOps

  • Log: Tìm lỗi 500 trong Nginx log.
  • Output lệnh: Trích xuất CPU usage từ top.
  • Config: Sửa dòng trong file cấu hình tự động.

Ví dụ: Thay vì đọc từng dòng log bằng tay, bạn dùng grep để lọc lỗi trong 2 giây.

Lợi ích

  • Nhanh chóng: Phân tích dữ liệu không cần tool phức tạp.
  • Tự động hóa: Xử lý text trong pipeline hoặc script giám sát.
  • Debug: Tìm nguyên nhân lỗi từ log mà không mò mẫm.

Thực tế: Tôi từng dùng awk để trích IP từ log truy cập, phát hiện tấn công DDoS trong 5 phút – không có nó thì mất cả giờ.

Công Cụ Text Processing trong Bash

Grep Bash: Lọc Dữ Liệu

Grep tìm kiếm text theo pattern.

  1. Tìm chuỗi:
    echo "Error: Disk full" | grep "Error"
    • Kết quả: “Error: Disk full”.
  2. Lọc file:
    grep "500" /var/log/nginx/access.log
  3. Tùy chọn hữu ích:
    • -i: Không phân biệt hoa thường.
    • -n: Hiển thị số dòng.
    • -v: Loại bỏ dòng khớp.
      grep -n "error" log.txt

Awk Bash: Trích Xuất và Xử Lý

Awk chia text thành cột, trích xuất dữ liệu.

  1. Trích cột:
    echo "user1 10.0.0.1 login" | awk '{print $2}'
    • Kết quả: “10.0.0.1” (cột 2).
  2. Kết hợp điều kiện:
    awk '$1 > 50 {print "High: " $0}' <<< "60% disk"
    • Kết quả: “High: 60% disk”.
  3. Xử lý file:
    awk '{print $5}' /proc/meminfo

Sed Bash: Sửa Text

Sed thay thế, xóa, hoặc chỉnh sửa text.

  1. Thay thế:
    echo "Hello World" | sed 's/World/DevOps/'
    • Kết quả: “Hello DevOps”.
  2. Thay trong file:
    sed -i 's/error/warning/' log.txt
    • -i: Ghi đè file.
  3. Xóa dòng:
    sed '/error/d' log.txt

Tips: Kiểm tra output trước khi dùng -i để tránh sửa sai.

Thực Hành: Script Phân Tích Log Hệ Thống

Chuẩn Bị File Log Giả Lập

Tạo system_log.txt:

echo "2024-10-13 10:00:00 INFO Disk usage: 42%" > system_log.txt
echo "2024-10-13 10:01:00 ERROR CPU high: 95%" >> system_log.txt
echo "2024-10-13 10:02:00 INFO Memory free: 1024MB" >> system_log.txt

Script Phân Tích

Tạo analyze_system_log.sh:

#!/bin/bash

LOG_FILE="system_log.txt"

# Kiểm tra file
if [ ! -f "$LOG_FILE" ]; then
    echo "Không tìm thấy $LOG_FILE"
    exit 1
fi

# Grep: Tìm lỗi
echo "Các lỗi trong log:"
grep "ERROR" "$LOG_FILE"

# Awk: Trích xuất % usage
echo "Danh sách usage:"
awk '/usage/ {print $5}' "$LOG_FILE"

# Sed: Thay ERROR thành WARNING
echo "Chuyển ERROR thành WARNING:"
sed 's/ERROR/WARNING/' "$LOG_FILE"

# Ghi log đã xử lý
sed 's/ERROR/WARNING/' "$LOG_FILE" > "processed_log.txt"
echo "Log đã xử lý lưu vào processed_log.txt"

Chạy và Test

chmod +x analyze_system_log.sh
./analyze_system_log.sh
  • Kết quả mẫu:
    Các lỗi trong log:
    2024-10-13 10:01:00 ERROR CPU high: 95%
    Danh sách usage:
    42%
    Chuyển ERROR thành WARNING:
    2024-10-13 10:00:00 INFO Disk usage: 42%
    2024-10-13 10:01:00 WARNING CPU high: 95%
    2024-10-13 10:02:00 INFO Memory free: 1024MB
    Log đã xử lý lưu vào processed_log.txt

Giải thích:

  • grep "ERROR": Lọc dòng có lỗi.
  • awk '/usage/ {print $5}': Trích cột 5 (usage).
  • sed 's/ERROR/WARNING/': Thay text.

DevOps: Script này có thể dùng để phân tích log pipeline hoặc hệ thống.

Debug Text Processing

  • Test grep:
    grep -v "INFO" "$LOG_FILE"  # Loại dòng INFO
  • Kiểm tra awk:
    awk '{print "Debug: " $0}' "$LOG_FILE"

Thực tế: Tôi từng dùng grep sai pattern, debug bằng cách in từng bước với awk – nhanh chóng tìm ra lỗi.

Ứng Dụng trong DevOps

Phân Tích Log

  • Tìm lỗi 500 trong Nginx:
    grep " 500 " /var/log/nginx/access.log | awk '{print $1}'
    • Lấy IP gây lỗi.

Pipeline CI/CD

  • Trích kết quả test:
    analyze_test:
    script:
      - grep "FAIL" test_result.log > failed_tests.txt
      - cat failed_tests.txt

Case study: Một team dùng sed để sửa config tự động trong pipeline, giảm thời gian deploy từ 10 phút xuống 2 phút.

Kết Luận

Text processing trong Bash DevOps với các công cụ như grep, awksed là những vũ khí mạnh mẽ giúp bạn lọc, trích xuất và chỉnh sửa văn bản một cách nhanh chóng. Thực hành với script analyze_system_log.sh sẽ cho bạn thấy khả năng tự động hóa việc phân tích log – một bước quan trọng trong việc quản lý hệ thống. Trong bài tiếp theo, chúng ta sẽ cùng khám phá Function trong Bash – cách tái sử dụng mã nguồn như một chuyên gia.

Điều hướng chuỗi bài viết

<< Bài 4. Xử Lý File trong Bash-Đọc, Ghi và Quản Lý Hiệu Quả
>> Bài 6. Function trong Bash-Tái Sử Dụng Code Hiệu Quả

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *