Tạo Index với Mapping tùy chỉnh và cấu hình Shards/Replicas
Bước đầu tiên là xác định cấu trúc dữ liệu (Schema) cho index mới, bao gồm định nghĩa kiểu dữ liệu, phương thức phân tích (analyzer) và số lượng Shard/Replica.
Ta sẽ tạo index tên là logs-application với mapping cho trường timestamp (kiểu date), level (kiểu keyword để không bị phân tách), và message (kiểu text với phân tích chuẩn).
Cấu hình 1 Shard chính (Primary) và 1 Replica để đảm bảo dữ liệu không bị mất nếu node chính gặp sự cố, đồng thời tăng khả năng đọc song song.
curl -X PUT "https://localhost:9200/logs-application" -u admin:your_password -k -H 'Content-Type: application/json' -d '
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.mapping.total_fields.limit": 1000
},
"mappings": {
"properties": {
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"level": {
"type": "keyword"
},
"message": {
"type": "text",
"analyzer": "standard"
},
"host": {
"type": "keyword"
},
"service": {
"type": "keyword"
},
"duration_ms": {
"type": "long"
}
}
}
}'
Kết quả mong đợi: JSON trả về với trường "acknowledged": true xác nhận index đã được tạo thành công với cấu hình mapping và settings như yêu cầu.
Thực hiện các thao tác CRUD qua REST API
Sau khi index đã sẵn sàng, ta sẽ thực hiện các thao tác Create, Read, Update, Delete trực tiếp trên dữ liệu để kiểm tra tính năng của mapping vừa thiết lập.
1. Tạo dữ liệu (Create/Insert)
Sử dụng lệnh POST để thêm một document mẫu vào index logs-application. Ta sẽ cung cấp _id thủ công để dễ kiểm soát hoặc để OpenSearch tự tạo.
curl -X POST "https://localhost:9200/logs-application/_doc/1" -u admin:your_password -k -H 'Content-Type: application/json' -d '
{
"timestamp": "2024-05-20T10:30:00Z",
"level": "ERROR",
"message": "Connection timeout to database server db-01",
"host": "web-server-01",
"service": "api-gateway",
"duration_ms": 5000
}'
Kết quả mong đợi: JSON trả về với "result": "created" và "_version": 1.
2. Truy xuất dữ liệu (Read/Get)
Sử dụng lệnh GET để lấy lại document vừa tạo theo _id, xác nhận dữ liệu đã được lưu trữ và phân tích đúng kiểu.
curl -X GET "https://localhost:9200/logs-application/_doc/1" -u admin:your_password -k
Kết quả mong đợi: JSON trả về đầy đủ nội dung document, trường "_source" chứa dữ liệu gốc.
3. Cập nhật dữ liệu (Update)
Sử dụng lệnh POST với endpoint /_update để sửa một trường cụ thể trong document (ví dụ: sửa level từ ERROR sang WARN).
curl -X POST "https://localhost:9200/logs-application/_update/1" -u admin:your_password -k -H 'Content-Type: application/json' -d '
{
"doc": {
"level": "WARN",
"message": "Connection timeout resolved, retry successful"
}
}'
Kết quả mong đợi: JSON trả về với "result": "updated" và "_version": 2.
4. Xóa dữ liệu (Delete)
Sử dụng lệnh DELETE để xóa document khỏi index.
curl -X DELETE "https://localhost:9200/logs-application/_doc/1" -u admin:your_password -k
Kết quả mong đợi: JSON trả về với "result": "deleted".
Quản lý và duyệt dữ liệu trên OpenSearch Dashboards
Để trực quan hóa dữ liệu và kiểm tra mapping mà không cần gõ lệnh, ta sử dụng giao diện OpenSearch Dashboards (Kibana).
1. Khám phá Index Pattern
Truy cập OpenSearch Dashboards tại địa chỉ https://localhost:5601. Đăng nhập bằng tài khoản admin.
Vào menu Data Visualizations (hoặc Stack Management -> Index Patterns tùy phiên bản), chọn Create index pattern.
Trong ô Index pattern, nhập tên index: logs-application*. Chọn trường Time field là timestamp.
Nhấn Create index pattern.
Kết quả mong đợi: Dashboards sẽ tự động sinh ra danh sách các trường (Fields) dựa trên mapping ta đã định nghĩa ở phần 1. Các trường như level và message sẽ hiển thị đúng kiểu dữ liệu.
2. Duyệt và Query dữ liệu (Discover)
Vào menu Discover (biểu kính lúp) trên thanh bên trái.
Chọn index pattern logs-application* vừa tạo từ dropdown trên cùng.
Điền dữ liệu mẫu mới vào terminal (lặp lại bước Create ở phần CRUD) để có dữ liệu hiển thị.
Sử dụng thanh tìm kiếm (Search bar) để viết query KQL (Kibana Query Language).
level: "ERROR" AND host: "web-server-01"
Nhấn Enter. Kết quả mong đợi: Danh sách các log hiện ra dưới dạng bảng, chỉ hiển thị các dòng thỏa mãn điều kiện. Các trường text đã được phân tích (analyzer) sẽ cho phép tìm kiếm từ khóa linh hoạt.
Điều chỉnh cấu hình Shards và Replicas động (Dynamic)
Trong quá trình vận hành, bạn có thể cần thay đổi số lượng Replica để tăng khả năng chịu lỗi hoặc giảm tải RAM mà không cần xóa index.
1. Kiểm tra trạng thái hiện tại
Sử dụng lệnh GET để xem thông tin index, đặc biệt là phần number_of_shards và number_of_replicas.
curl -X GET "https://localhost:9200/logs-application/_settings?pretty" -u admin:your_password -k
Kết quả mong đợi: JSON hiển thị cấu hình hiện tại của index.
2. Thay đổi số lượng Replica
Giả sử muốn tăng số Replica lên 2 để cải thiện hiệu năng đọc (Read throughput) khi có nhiều truy vấn song song.
curl -X PUT "https://localhost:9200/logs-application/_settings" -u admin:your_password -k -H 'Content-Type: application/json' -d '
{
"number_of_replicas": 2
}'
Kết quả mong đợi: JSON trả về với "acknowledged": true. Lưu ý: Số lượng Primary Shard (number_of_shards) không thể thay đổi động sau khi tạo index, chỉ có thể thay đổi số lượng Replica.
3. Xác minh kết quả
Chạy lại lệnh kiểm tra trạng thái để đảm bảo số lượng Replica đã được cập nhật.
curl -X GET "https://localhost:9200/_cat/shards/logs-application?v" -u admin:your_password -k
Kết quả mong đợi: Bảng hiển thị các shard, bạn sẽ thấy có nhiều dòng replica hơn so với ban đầu (tổng số shard = Primary + Replicas).
Điều hướng series:
Mục lục: Series: Triển khai Database Search với OpenSearch và Ubuntu 24.04
« Phần 4: Tối ưu hóa hiệu năng và cấu hình bộ nhớ JVM
Phần 6: Triển khai cluster đa node và cân bằng tải »