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, awk và sed. 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.
- Tìm chuỗi:
echo "Error: Disk full" | grep "Error"- Kết quả: “Error: Disk full”.
- Lọc file:
grep "500" /var/log/nginx/access.log - 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.
- Trích cột:
echo "user1 10.0.0.1 login" | awk '{print $2}'- Kết quả: “10.0.0.1” (cột 2).
- Kết hợp điều kiện:
awk '$1 > 50 {print "High: " $0}' <<< "60% disk"- Kết quả: “High: 60% disk”.
- 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.
- Thay thế:
echo "Hello World" | sed 's/World/DevOps/'- Kết quả: “Hello DevOps”.
- Thay trong file:
sed -i 's/error/warning/' log.txt-i: Ghi đè file.
- 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, awk và sed 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.
