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ả
Công Cụ Text Processing – Grep, Awk, Sed trong Bash DevOps
Khi làm DevOps, bạn sẽ thường xuyên đối mặt với đống text – log hệ thống, output lệnh, file config – và cần trích xuất, lọc, hoặc sửa chúng nhanh chóng. Đây là lúc text processing trong Bash DevOps tỏa sáng với grep Bash, awk Bash, và sed Bash. Trong bài thứ năm của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng ba công cụ này để xử lý text như pro, kèm thực hành thực tế. Đây là những thứ tôi dùng để debug log và phân tích hệ thống mỗi ngày, 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 trong DevOps
- 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 "2025-03-13 10:00:00 INFO Disk usage: 42%" > system_log.txt
echo "2025-03-13 10:01:00 ERROR CPU high: 95%" >> system_log.txt
echo "2025-03-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: 2025-03-13 10:01:00 ERROR CPU high: 95% Danh sách usage: 42% Chuyển ERROR thành WARNING: 2025-03-13 10:00:00 INFO Disk usage: 42% 2025-03-13 10:01:00 WARNING CPU high: 95% 2025-03-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 grep Bash, awk Bash, và sed Bash là vũ khí để bạn lọc, trích xuất, và chỉnh sửa text nhanh chóng. Thực hành với analyze_system_log.sh
cho thấy bạn có thể tự động hóa phân tích log dễ dàng – bước quan trọng trong quản lý hệ thống. Bài tiếp theo, chúng ta sẽ khám phá Function trong Bash – cách tái sử dụng code như pro.