Cách sử dụng jq từ cơ bản đến DevOps

Giới Thiệu

jq là một công cụ dòng lệnh mạnh mẽ giúp xử lý, truy vấn và biến đổi dữ liệu JSON nhanh chóng. Đối với DevOps Engineer, việc làm việc với JSON là không thể tránh khỏi, đặc biệt khi xử lý log, API response, và cấu hình hệ thống. Trong bài viết này, chúng ta sẽ đi từ những thao tác cơ bản đến nâng cao với jq, giúp bạn làm chủ công cụ này một cách hiệu quả.

1. Cài Đặt jq

Tùy vào hệ điều hành, bạn có thể cài đặt jq theo các cách sau:

Trên Ubuntu/Debian

sudo apt update
sudo apt install jq

Trên macOS (Homebrew)

brew install jq

Trên Windows

choco install jq

Sau khi cài đặt, bạn có thể kiểm tra phiên bản jq:

jq --version

2. Cách Sử Dụng jq Cơ Bản

2.1. Đọc và Định Dạng JSON

Giả sử bạn có một file JSON data.json:

{
  "name": "Alice",
  "age": 25,
  "city": "Hanoi"
}

Sử dụng jq để hiển thị JSON theo định dạng dễ đọc:

cat data.json | jq .

2.2. Lấy Giá Trị Của Một Trường

jq '.name' data.json

Kết quả:

"Alice"

2.3. Lọc Dữ Liệu JSON Trong Mảng

Giả sử bạn có danh sách:

[
  { "name": "Alice", "age": 25 },
  { "name": "Bob", "age": 30 },
  { "name": "Charlie", "age": 28 }
]

Lấy tên tất cả user:

jq '.[].name' users.json

Lọc user trên 25 tuổi:

jq '.[] | select(.age > 25)' users.json

3. Sử Dụng jq Nâng Cao

3.1. Truy Vấn JSON Lồng Nhau

Lấy tên từ danh sách JSON lồng nhau:

{
  "users": [
    { "name": "Alice", "info": { "age": 25, "city": "Hanoi" } },
    { "name": "Bob", "info": { "age": 30, "city": "Saigon" } }
  ]
}

Truy vấn tên và thành phố:

jq '.users[] | {name: .name, city: .info.city}' data.json

3.2. Kết Hợp jq Với curl

Lấy danh sách post từ JSONPlaceholder:

curl -s https://jsonplaceholder.typicode.com/posts | jq '.[0]'

3.3. Chuyển JSON Thành Chuỗi

jq -c . data.json

3.4. Thay Đổi Giá Trị Trong JSON

Giả sử bạn muốn thay đổi thành phố của Alice thành “Da Nang”:

jq '(.users[] | select(.name == "Alice")).info.city |= "Da Nang"' data.json

3.5. Trích Xuất Nhiều Giá Trị Một Lúc

Lấy cả tên và tuổi của tất cả user:

jq '.[] | {name, age}' users.json

4. Ứng Dụng jq Trong DevOps

4.1. Phân Tích Log JSON

Nhiều hệ thống log như ELK (Elasticsearch, Logstash, Kibana) hoặc AWS CloudWatch Logs xuất dữ liệu dưới dạng JSON. Bạn có thể dùng jq để trích xuất lỗi từ log:

cat logs.json | jq '.logs[] | select(.level == "error")'

4.2. Làm Việc Với API REST

Lấy danh sách user từ API và trích xuất tên:

curl -s https://jsonplaceholder.typicode.com/users | jq '.[].name'

4.3. Kết Hợp jq Với Bash Script

Tạo script tự động trích xuất thông tin từ API:

#!/bin/bash
USERS=$(curl -s https://jsonplaceholder.typicode.com/users | jq -r '.[].name')
echo "Danh sách người dùng:"
echo "$USERS"

Lưu script và chạy:

chmod +x get_users.sh
./get_users.sh

4.4. Kết Hợp jq Trong Pipeline CI/CD

Trong GitHub Actions hoặc GitLab CI/CD, jq có thể được sử dụng để xử lý output JSON của các lệnh API:

jobs:
  check-deployment:
    runs-on: ubuntu-latest
    steps:
      - name: Kiểm tra trạng thái deployment
        run: |
          RESPONSE=$(curl -s http://api.example.com/deployment/status)
          STATUS=$(echo "$RESPONSE" | jq -r '.status')
          if [ "$STATUS" != "success" ]; then
            echo "Deployment failed!"
            exit 1
          fi

4.5. Tối Ưu Truy Vấn JSON Với jq

  • Sử dụng map() để xử lý từng phần tử trong mảng thay vì .|:
jq 'map(select(.age > 25))' users.json
  • Dùng |= để cập nhật giá trị mà không cần tạo bản sao:
jq '.users |= map(if .name == "Alice" then .city = "Da Nang" else . end)' data.json

5. Kết Luận

Với jq, bạn có thể xử lý dữ liệu JSON nhanh chóng và hiệu quả, từ các thao tác cơ bản đến nâng cao. Công cụ này đặc biệt hữu ích trong DevOps khi làm việc với log, API, và cấu hình hệ thống.

Nếu bạn muốn tìm hiểu sâu hơn, hãy đọc tài liệu chính thức tại stedolan.github.io/jq.

Hãy thử áp dụng jq vào công việc thực tế của bạn và chia sẻ trải nghiệm nha

Article Thumbnail
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
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