Cài đặt và cấu hình công cụ dòng lệnh Influx CLI
Thiết lập biến môi trường để kết nối InfluxDB
Trước khi thực hiện truy vấn, bạn cần cấu hình các biến môi trường chứa thông tin kết nối. Việc này giúp lệnh influx biết đường dẫn server, token truy cập và bucket đích mà không cần gõ lại mỗi lần.
Thực hiện lệnh export để thêm các biến vào session hiện tại. Bạn cần thay thế YOUR_TOKEN bằng token đã tạo ở Phần 3 và YOUR_ORG bằng tên organization đã tạo.
export INFLUXDB_URL=http://localhost:8086
export INFLUXDB_TOKEN="YOUR_TOKEN"
export INFLUXDB_ORG="your-org-name"
export INFLUXDB_BUCKET="telegraf-data"
Kết quả mong đợi: Không có lỗi thông báo. Bạn có thể kiểm tra bằng lệnh echo $INFLUXDB_URL để đảm bảo biến đã được lưu.
Thiết lập context mặc định cho Influx CLI
Sau khi set biến môi trường, bạn cần tạo một context (bối cảnh) để lưu thông tin này vĩnh viễn vào file cấu hình của CLI, giúp bạn không cần gõ export mỗi khi mở terminal mới.
influx config create default --url=http://localhost:8086 --token=YOUR_TOKEN --org=your-org-name
Kết quả mong đợi: Influx CLI hiển thị thông báo Success: Created 'default' config. Đây là bước bắt buộc để các lệnh query sau này hoạt động mượt mà.
Verify kết quả cấu hình
Chạy lệnh kiểm tra xem context đã được lưu đúng chưa.
influx config list
Kết quả mong đợi: Hiển thị danh sách các config với tên "default" được đánh dấu là hiện hành (active).
Viết câu lệnh Flux cơ bản: Lọc thời gian và nhóm dữ liệu
Truy vấn cơ bản với hàm range
Lệnh Flux cơ bản nhất bắt đầu bằng việc lấy dữ liệu từ một bucket và lọc theo khoảng thời gian. Hàm range là hàm bắt buộc phải có trong mọi query Flux để giới hạn dữ liệu trả về, tránh tải hết cả cơ sở dữ liệu.
Câu lệnh dưới đây lấy dữ liệu từ bucket "telegraf-data" trong vòng 1 giờ gần nhất.
influx query --bucket telegraf-data --org your-org-name
Kết quả mong đợi: CLI trả về một bảng dữ liệu (table) chứa các dòng đo đạc (measurement) như CPU, Memory, Disk trong vòng 1 giờ qua.
Lọc dữ liệu theo Measurement và Tag
Để tập trung vào một loại dữ liệu cụ thể, ta sử dụng hàm filter kết hợp với toán tử ==. Ta sẽ lọc chỉ lấy dữ liệu CPU và nhóm theo địa chỉ IP (host).
Hàm filter sẽ loại bỏ các dòng không khớp, còn hàm group giúp chia nhỏ bảng dữ liệu thành các nhóm con dựa trên giá trị của Tag.
influx query --bucket telegraf-data --org your-org-name filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage_user")
|> group(columns: ["host"])
EOF
Kết quả mong đợi: Dữ liệu trả về chỉ còn lại các dòng đo đạc CPU loại usage_user, được phân tách thành các bảng riêng biệt cho từng host (ví dụ: host=server01, host=server02).
Verify kết quả lọc và nhóm
Kiểm tra xem dữ liệu đã được lọc đúng measurement chưa bằng cách đếm số dòng trả về.
influx query --bucket telegraf-data --org your-org-name --format json filter(fn: (r) => r._measurement == "cpu")
EOF
Kết quả mong đợi: Số nguyên dương lớn hơn 0, chứng tỏ query đã lấy được dữ liệu.
Sử dụng hàm aggregate để tính toán giá trị thống kê
Tính giá trị trung bình (Mean) theo thời gian
Thay vì xem toàn bộ điểm dữ liệu thô, bạn thường cần giá trị trung bình để nhìn xu hướng. Hàm mean sẽ gom các điểm dữ liệu trong một khoảng thời gian và tính trung bình.
Để dữ liệu dễ đọc, ta kết hợp aggregateWindow để tính trung bình cho từng khung giờ (hoặc phút).
influx query --bucket telegraf-data --org your-org-name filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage_system")
|> aggregateWindow(every: 1m, fn: mean, column: "_value")
|> yield(name: "mean")
EOF
Kết quả mong đợi: Bảng dữ liệu chỉ còn khoảng 60 dòng (60 phút), mỗi dòng là giá trị trung bình của 1 phút cho trường usage_system.
Tính toán giá trị cực đại (Max) và cực tiểu (Min)
Để phát hiện các điểm nóng (spike) hoặc sự cố giảm tải đột ngột, ta sử dụng hàm max và min. Bạn có thể thực hiện cả hai trong một query để so sánh.
influx query --bucket telegraf-data --org your-org-name filter(fn: (r) => r._measurement == "mem")
|> filter(fn: (r) => r._field == "usage_percent")
|> max()
|> min()
EOF
Kết quả mong đợi: Influx CLI sẽ trả về 2 bảng riêng biệt. Bảng thứ nhất chứa giá trị lớn nhất (max), bảng thứ hai chứa giá trị nhỏ nhất (min) trong 24 giờ qua.
Tính tổng (Sum) và biến động (Diff)
Hàm sum dùng để tính tổng lượng dữ liệu (ví dụ: tổng số packet network). Hàm derivative hoặc diff dùng để tính tốc độ thay đổi (ví dụ: tốc độ tăng RAM tiêu thụ).
influx query --bucket telegraf-data --org your-org-name filter(fn: (r) => r._measurement == "system")
|> filter(fn: (r) => r._field == "load1")
|> derivative(unit: 1m)
EOF
Kết quả mong đợi: Dữ liệu trả về là tốc độ thay đổi của tải hệ thống (load average) mỗi phút, giúp phát hiện sự tăng đột biến.
Verify kết quả aggregate
Chạy lại query tính trung bình và so sánh thủ công với dữ liệu thô để đảm bảo tính chính xác.
influx query --bucket telegraf-data --org your-org-name --format table filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_user")
|> aggregateWindow(every: 5m, fn: mean)
EOF
Kết quả mong đợi: Bảng hiển thị rõ ràng cột _value là số thập phân đại diện cho giá trị trung bình.
Xuất kết quả truy vấn sang định dạng CSV và JSON
Xuất dữ liệu sang định dạng JSON
Định dạng JSON là tiêu chuẩn để truyền dữ liệu cho các ứng dụng web hoặc script Python/NodeJS xử lý tiếp. Lệnh influx query có cờ --format json.
influx query --bucket telegraf-data --org your-org-name --format json range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> aggregateWindow(every: 1m, fn: mean)
EOF
Kết quả mong đợi: File /tmp/cpu_stats.json được tạo ra. Bạn có thể mở bằng cat /tmp/cpu_stats.json để thấy cấu trúc JSON với các key như results, tables, columns, values.
Xuất dữ liệu sang định dạng CSV
CSV phù hợp để mở trực tiếp trong Excel hoặc Google Sheets. Lệnh influx query hỗ trợ cờ --format csv.
influx query --bucket telegraf-data --org your-org-name --format csv range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> aggregateWindow(every: 5m, fn: mean)
EOF
Kết quả mong đợi: File /tmp/cpu_stats.csv được tạo. Dữ liệu trong file sẽ có các cột được phân tách bằng dấu phẩy, hàng đầu tiên là tên các trường (_time, _value, host, ...).
Verify kết quả xuất file
Đảm bảo file đã được tạo và có nội dung bằng cách đếm số dòng hoặc xem trước 5 dòng đầu.
head -n 5 /tmp/cpu_stats.csv
Kết quả mong đợi: Hiển thị 5 dòng đầu của file CSV, bao gồm dòng header và 4 dòng dữ liệu đầu tiên.
Điều hướng series:
Mục lục: Series: Triển khai Database Time-Series với InfluxDB trên Ubuntu 24.04
« Phần 5: Thu thập dữ liệu với Telegraf trên Ubuntu
Phần 7: Triển khai dashboard trực quan với Grafana »